From fc69e8d81127a76d78df0d51d6e6941a356e04ed Mon Sep 17 00:00:00 2001 From: "Jon Michael Aanes (aider)" Date: Tue, 15 Apr 2025 00:20:47 +0200 Subject: [PATCH 1/4] feat: Add get_pull_request_comments method to GiteaClient with tests --- aider_gitea/gitea_client.py | 19 ++++++++++++++ test/test_gitea_client.py | 49 +++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 test/test_gitea_client.py diff --git a/aider_gitea/gitea_client.py b/aider_gitea/gitea_client.py index 0ebeb9f..3254324 100644 --- a/aider_gitea/gitea_client.py +++ b/aider_gitea/gitea_client.py @@ -129,3 +129,22 @@ class GiteaClient: if repo['owner']['login'].lower() != owner.lower(): continue yield repo['name'] + + def get_pull_request_comments(self, owner: str, repo: str, pull_number: int) -> list[dict]: + """Get comments for a specific pull request. + + Args: + owner (str): Owner of the repository. + repo (str): Name of the repository. + pull_number (int): The pull request number. + + Returns: + list[dict]: A list of comment dictionaries containing comment data. + + Raises: + requests.HTTPError: If the API request fails. + """ + url = f'{self.gitea_url}/repos/{owner}/{repo}/pulls/{pull_number}/comments' + response = self.session.get(url) + response.raise_for_status() + return response.json() diff --git a/test/test_gitea_client.py b/test/test_gitea_client.py new file mode 100644 index 0000000..f64cf4e --- /dev/null +++ b/test/test_gitea_client.py @@ -0,0 +1,49 @@ +import pytest +import responses +from aider_gitea.gitea_client import GiteaClient + + +class TestGiteaClient: + def setup_method(self): + """Set up test fixtures.""" + self.gitea_url = "https://gitea.example.com" + self.token = "test_token" + self.client = GiteaClient(self.gitea_url, self.token) + self.owner = "test_owner" + self.repo = "test_repo" + + @responses.activate + def test_get_pull_request_comments(self): + """Test retrieving comments for a pull request.""" + pull_number = 123 + expected_comments = [ + { + "id": 1, + "body": "This is a test comment", + "user": {"login": "test_user"}, + "created_at": "2023-01-01T00:00:00Z", + }, + { + "id": 2, + "body": "Another test comment", + "user": {"login": "another_user"}, + "created_at": "2023-01-02T00:00:00Z", + }, + ] + + # Mock the API response + url = f"{self.gitea_url}/api/v1/repos/{self.owner}/{self.repo}/pulls/{pull_number}/comments" + responses.add( + responses.GET, + url, + json=expected_comments, + status=200, + ) + + # Call the method + comments = self.client.get_pull_request_comments(self.owner, self.repo, pull_number) + + # Verify the result + assert comments == expected_comments + assert len(responses.calls) == 1 + assert responses.calls[0].request.url == url -- 2.45.1 From 49fa94d7175f3b219574110003d072c90aac5dcd Mon Sep 17 00:00:00 2001 From: "Jon Michael Aanes (aider)" Date: Tue, 15 Apr 2025 00:21:15 +0200 Subject: [PATCH 2/4] refactor: replace responses with monkeypatch for testing gitea client --- test/test_gitea_client.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/test/test_gitea_client.py b/test/test_gitea_client.py index f64cf4e..1524627 100644 --- a/test/test_gitea_client.py +++ b/test/test_gitea_client.py @@ -1,5 +1,5 @@ import pytest -import responses +from unittest.mock import MagicMock from aider_gitea.gitea_client import GiteaClient @@ -12,8 +12,7 @@ class TestGiteaClient: self.owner = "test_owner" self.repo = "test_repo" - @responses.activate - def test_get_pull_request_comments(self): + def test_get_pull_request_comments(self, monkeypatch): """Test retrieving comments for a pull request.""" pull_number = 123 expected_comments = [ @@ -31,19 +30,21 @@ class TestGiteaClient: }, ] - # Mock the API response - url = f"{self.gitea_url}/api/v1/repos/{self.owner}/{self.repo}/pulls/{pull_number}/comments" - responses.add( - responses.GET, - url, - json=expected_comments, - status=200, - ) + # Create a mock response + mock_response = MagicMock() + mock_response.json.return_value = expected_comments + mock_response.raise_for_status = MagicMock() + + # Mock the session.get method + mock_get = MagicMock(return_value=mock_response) + monkeypatch.setattr(self.client.session, "get", mock_get) # Call the method comments = self.client.get_pull_request_comments(self.owner, self.repo, pull_number) # Verify the result assert comments == expected_comments - assert len(responses.calls) == 1 - assert responses.calls[0].request.url == url + + # Verify the correct URL was called + expected_url = f"{self.gitea_url}/repos/{self.owner}/{self.repo}/pulls/{pull_number}/comments" + mock_get.assert_called_once_with(expected_url) -- 2.45.1 From d2691e2ebaae424985219ed488d76767b59a4df6 Mon Sep 17 00:00:00 2001 From: "Jon Michael Aanes (aider)" Date: Tue, 15 Apr 2025 00:21:27 +0200 Subject: [PATCH 3/4] fix: update test to match actual Gitea API URL format --- test/test_gitea_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_gitea_client.py b/test/test_gitea_client.py index 1524627..951657e 100644 --- a/test/test_gitea_client.py +++ b/test/test_gitea_client.py @@ -46,5 +46,5 @@ class TestGiteaClient: assert comments == expected_comments # Verify the correct URL was called - expected_url = f"{self.gitea_url}/repos/{self.owner}/{self.repo}/pulls/{pull_number}/comments" + expected_url = f"{self.gitea_url}/api/v1/repos/{self.owner}/{self.repo}/pulls/{pull_number}/comments" mock_get.assert_called_once_with(expected_url) -- 2.45.1 From e2b3bdb8111c68ea9ea248e6ff8cd8f917921167 Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes Date: Tue, 15 Apr 2025 00:21:48 +0200 Subject: [PATCH 4/4] Ruff --- aider_gitea/gitea_client.py | 12 +++++++----- test/test_gitea_client.py | 36 +++++++++++++++++++----------------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/aider_gitea/gitea_client.py b/aider_gitea/gitea_client.py index 3254324..587db06 100644 --- a/aider_gitea/gitea_client.py +++ b/aider_gitea/gitea_client.py @@ -129,18 +129,20 @@ class GiteaClient: if repo['owner']['login'].lower() != owner.lower(): continue yield repo['name'] - - def get_pull_request_comments(self, owner: str, repo: str, pull_number: int) -> list[dict]: + + def get_pull_request_comments( + self, owner: str, repo: str, pull_number: int, + ) -> list[dict]: """Get comments for a specific pull request. - + Args: owner (str): Owner of the repository. repo (str): Name of the repository. pull_number (int): The pull request number. - + Returns: list[dict]: A list of comment dictionaries containing comment data. - + Raises: requests.HTTPError: If the API request fails. """ diff --git a/test/test_gitea_client.py b/test/test_gitea_client.py index 951657e..9eefae0 100644 --- a/test/test_gitea_client.py +++ b/test/test_gitea_client.py @@ -1,32 +1,32 @@ -import pytest from unittest.mock import MagicMock + from aider_gitea.gitea_client import GiteaClient class TestGiteaClient: def setup_method(self): """Set up test fixtures.""" - self.gitea_url = "https://gitea.example.com" - self.token = "test_token" + self.gitea_url = 'https://gitea.example.com' + self.token = 'test_token' self.client = GiteaClient(self.gitea_url, self.token) - self.owner = "test_owner" - self.repo = "test_repo" + self.owner = 'test_owner' + self.repo = 'test_repo' def test_get_pull_request_comments(self, monkeypatch): """Test retrieving comments for a pull request.""" pull_number = 123 expected_comments = [ { - "id": 1, - "body": "This is a test comment", - "user": {"login": "test_user"}, - "created_at": "2023-01-01T00:00:00Z", + 'id': 1, + 'body': 'This is a test comment', + 'user': {'login': 'test_user'}, + 'created_at': '2023-01-01T00:00:00Z', }, { - "id": 2, - "body": "Another test comment", - "user": {"login": "another_user"}, - "created_at": "2023-01-02T00:00:00Z", + 'id': 2, + 'body': 'Another test comment', + 'user': {'login': 'another_user'}, + 'created_at': '2023-01-02T00:00:00Z', }, ] @@ -37,14 +37,16 @@ class TestGiteaClient: # Mock the session.get method mock_get = MagicMock(return_value=mock_response) - monkeypatch.setattr(self.client.session, "get", mock_get) + monkeypatch.setattr(self.client.session, 'get', mock_get) # Call the method - comments = self.client.get_pull_request_comments(self.owner, self.repo, pull_number) + comments = self.client.get_pull_request_comments( + self.owner, self.repo, pull_number, + ) # Verify the result assert comments == expected_comments - + # Verify the correct URL was called - expected_url = f"{self.gitea_url}/api/v1/repos/{self.owner}/{self.repo}/pulls/{pull_number}/comments" + expected_url = f'{self.gitea_url}/api/v1/repos/{self.owner}/{self.repo}/pulls/{pull_number}/comments' mock_get.assert_called_once_with(expected_url) -- 2.45.1