from unittest.mock import MagicMock, patch from gitea.client import GiteaClient def test_gitea_client_list_repo_issues() -> None: client: GiteaClient = GiteaClient() with patch("httpx.Client.get") as mock_get: mock_response: MagicMock = MagicMock() mock_response.status_code = 200 mock_response.json.return_value = [] mock_get.return_value = mock_response # Test default parameter ("open") client.list_repo_issues("owner", "repo") mock_get.assert_called_once() args, _ = mock_get.call_args assert "type=issues" in args[0] assert "state=open" in args[0] mock_get.reset_mock() # Test custom parameter ("closed") client.list_repo_issues("owner", "repo", state="closed") mock_get.assert_called_once() args, _ = mock_get.call_args assert "type=issues" in args[0] assert "state=closed" in args[0] def test_gitea_client_list_repo_pull_requests() -> None: client: GiteaClient = GiteaClient() with patch("httpx.Client.get") as mock_get: mock_response: MagicMock = MagicMock() mock_response.status_code = 200 mock_response.json.return_value = [] mock_get.return_value = mock_response # Test default parameter ("open") client.list_repo_pull_requests("owner", "repo") mock_get.assert_called_once() args, _ = mock_get.call_args assert "state=open" in args[0] mock_get.reset_mock() # Test custom parameter ("closed") client.list_repo_pull_requests("owner", "repo", state="closed") mock_get.assert_called_once() args, _ = mock_get.call_args assert "state=closed" in args[0] def test_gitea_client_list_assigned_issues() -> None: client: GiteaClient = GiteaClient() user_mock: MagicMock = MagicMock() user_mock.login = "testuser" with patch.object(client, "get_authenticated_user", return_value=user_mock), \ patch("httpx.get") as mock_get: mock_response: MagicMock = MagicMock() mock_response.status_code = 200 mock_response.json.return_value = [] mock_get.return_value = mock_response client.list_assigned_issues("owner", "repo") mock_get.assert_called_once() args, _ = mock_get.call_args assert "type=issues" in args[0] assert "state=open" in args[0] def test_gitea_client_list_assigned_pull_requests() -> None: client: GiteaClient = GiteaClient() user_mock: MagicMock = MagicMock() user_mock.login = "testuser" with patch.object(client, "get_authenticated_user", return_value=user_mock), \ patch("httpx.get") as mock_get: mock_response: MagicMock = MagicMock() mock_response.status_code = 200 mock_response.json.return_value = [ {"number": 1, "title": "PR 1", "assignee": {"login": "testuser"}, "user": {"login": "otheruser"}}, {"number": 2, "title": "PR 2", "assignee": None, "user": {"login": "testuser"}}, {"number": 3, "title": "PR 3", "assignee": {"login": "otheruser"}, "user": {"login": "otheruser"}} ] mock_get.return_value = mock_response res = client.list_assigned_pull_requests("owner", "repo") mock_get.assert_called_once() assert len(res) == 2 numbers = [pr.number for pr in res] assert 1 in numbers assert 2 in numbers assert 3 not in numbers def test_gitea_client_list_unread_notifications() -> None: client: GiteaClient = GiteaClient() with patch("httpx.Client.get") as mock_get: mock_response: MagicMock = MagicMock() mock_response.status_code = 200 mock_response.json.return_value = [ {"id": 1, "repository": {"owner": {"login": "meeks"}}}, {"id": 2, "repository": {"owner": {"login": "other"}}}, ] mock_get.return_value = mock_response # Test without since res = client.list_unread_notifications() mock_get.assert_called_once() _, kwargs = mock_get.call_args assert kwargs.get("params") == {"all": "false"} assert len(res) == 1 assert res[0]["id"] == 1 mock_get.reset_mock() # Test with since res = client.list_unread_notifications(since="2026-06-30T21:41:16+02:00") mock_get.assert_called_once() _, kwargs = mock_get.call_args assert kwargs.get("params") == {"all": "false", "since": "2026-06-30T21:41:16+02:00"}