[Bug] --user-login резолвится в первого попавшегося пользователя без проверки совпадения #60

Closed
opened 2026-07-16 18:25:02 +07:00 by artem.kokos · 0 comments
Owner

Проблема

Резолв логина в user ID (redmine_reporter/client.py:199-201):

users = redmine.user.filter(login=text)
return int(users[0].id)

Берётся первый элемент результата без проверки, что найден ровно один пользователь и что его логин совпадает точно. Redmine user.filter не обязан выполнять exact-match: при частичном совпадении или нескольких похожих логинах отчёт молча строится по чужому user_id.

При этом для --user-name неоднозначность уже корректно обрабатывается (ошибка со списком до 5 совпадений), а для --user-login — нет. Поведение асимметрично.

Пример сценария

redmine-reporter --user-login ivanov

Если фильтр вернул [ivanov, ivanova], отчёт будет построен по ivanov — даже если имелся в виду другой человек. Никакого предупреждения пользователь не получит.

Рекомендации

  1. После user.filter(login=...) проверять точное совпадение user.login == text; при нуле или нескольких совпадениях — понятная ошибка, по аналогии с обработкой неоднозначного --user-name.
  2. Тесты: точное совпадение; несколько совпадений → ошибка; нет совпадений → ошибка; частичное совпадение логина не принимается.

Связанные места

  • redmine_reporter/client.py:195-205 (_resolve_user_id)
  • Задача #40 (отчёт по другому пользователю)

Критерии приёмки

  • --user-login принимает только точное совпадение логина.
  • При неоднозначности/отсутствии пользователя выводится понятная ошибка.
  • Добавлены тесты на все четыре случая.
## Проблема Резолв логина в user ID (`redmine_reporter/client.py:199-201`): ```python users = redmine.user.filter(login=text) return int(users[0].id) ``` Берётся первый элемент результата без проверки, что найден ровно один пользователь и что его логин совпадает точно. Redmine `user.filter` не обязан выполнять exact-match: при частичном совпадении или нескольких похожих логинах отчёт молча строится по чужому user_id. При этом для `--user-name` неоднозначность уже корректно обрабатывается (ошибка со списком до 5 совпадений), а для `--user-login` — нет. Поведение асимметрично. ## Пример сценария ```bash redmine-reporter --user-login ivanov ``` Если фильтр вернул `[ivanov, ivanova]`, отчёт будет построен по `ivanov` — даже если имелся в виду другой человек. Никакого предупреждения пользователь не получит. ## Рекомендации 1. После `user.filter(login=...)` проверять точное совпадение `user.login == text`; при нуле или нескольких совпадениях — понятная ошибка, по аналогии с обработкой неоднозначного `--user-name`. 2. Тесты: точное совпадение; несколько совпадений → ошибка; нет совпадений → ошибка; частичное совпадение логина не принимается. ## Связанные места - `redmine_reporter/client.py:195-205` (`_resolve_user_id`) - Задача #40 (отчёт по другому пользователю) ## Критерии приёмки - [ ] `--user-login` принимает только точное совпадение логина. - [ ] При неоднозначности/отсутствии пользователя выводится понятная ошибка. - [ ] Добавлены тесты на все четыре случая.
artem.kokos added the bugredmine labels 2026-07-16 18:25:02 +07:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#60