From 512b682cc52b0564467de4fc5a085f8fe8a2d08d Mon Sep 17 00:00:00 2001 From: kitos Date: Thu, 9 Jul 2026 15:26:36 +0200 Subject: [PATCH] fix(jira): correct user_find_by_user_string kwarg breaking account-id auto-detection atlassian-python-api takes limit, not maxResults. The TypeError was silently swallowed at DEBUG level, so every non-admin user's Jira account-id lookup failed even with a valid email and working admin Jira connection. --- backend/app/services/jira_service.py | 2 +- backend/tests/test_jira_service.py | 48 ++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/backend/app/services/jira_service.py b/backend/app/services/jira_service.py index ec1fd2e..32e0506 100644 --- a/backend/app/services/jira_service.py +++ b/backend/app/services/jira_service.py @@ -303,7 +303,7 @@ def lookup_user_jira_account_id(db: Session, user: User) -> bool: try: jira = get_admin_jira_client(db) - results = jira.user_find_by_user_string(query=email, maxResults=10) + results = jira.user_find_by_user_string(query=email, limit=10) account_id: Optional[str] = None for u in results or []: diff --git a/backend/tests/test_jira_service.py b/backend/tests/test_jira_service.py index a50a5be..e3d65e5 100644 --- a/backend/tests/test_jira_service.py +++ b/backend/tests/test_jira_service.py @@ -277,3 +277,51 @@ def test_search_jira_issues_maps_fields(mock_get_client): assert results[0]["summary"] == "Test issue" assert results[0]["status"] == "In Progress" mock_jira.jql.assert_called_once() + + +def _make_user(**overrides): + from app.models.user import User + u = MagicMock(spec=User) + u.username = "gerardo-ruiz" + u.email = "gerardo.ruiz@kaseya.com" + u.jira_account_id = None + for k, v in overrides.items(): + setattr(u, k, v) + return u + + +@patch("app.services.jira_service.has_admin_jira_configured", return_value=True) +@patch("app.services.jira_service.get_admin_jira_client") +def test_lookup_user_jira_account_id_calls_with_valid_kwargs(mock_get_client, mock_configured, db): + # Regression test: atlassian-python-api's user_find_by_user_string() takes + # `limit`, not `maxResults` — passing maxResults raised a TypeError that + # was silently swallowed, so the lookup always failed even with a valid + # email and a working admin Jira connection. + mock_jira = MagicMock() + mock_jira.user_find_by_user_string.return_value = [ + {"emailAddress": "gerardo.ruiz@kaseya.com", "accountId": "abc123"} + ] + mock_get_client.return_value = mock_jira + user = _make_user() + + updated = jira_service.lookup_user_jira_account_id(db, user) + + mock_jira.user_find_by_user_string.assert_called_once_with( + query="gerardo.ruiz@kaseya.com", limit=10 + ) + assert updated is True + assert user.jira_account_id == "abc123" + + +@patch("app.services.jira_service.has_admin_jira_configured", return_value=True) +@patch("app.services.jira_service.get_admin_jira_client") +def test_lookup_user_jira_account_id_no_match(mock_get_client, mock_configured, db): + mock_jira = MagicMock() + mock_jira.user_find_by_user_string.return_value = [] + mock_get_client.return_value = mock_jira + user = _make_user() + + updated = jira_service.lookup_user_jira_account_id(db, user) + + assert updated is False + assert user.jira_account_id is None