| # Copyright 2025 Google LLC |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import unittest |
| from unittest.mock import patch, AsyncMock |
| import asyncio |
| import json |
| |
| from gerrit_mcp_server import main |
| |
| |
| class TestQueryChanges(unittest.TestCase): |
| @patch("gerrit_mcp_server.main.run_curl", new_callable=AsyncMock) |
| def test_query_changes_success(self, mock_run_curl): |
| async def run_test(): |
| # Arrange |
| query = "status:open" |
| limit = 5 |
| mock_response = [ |
| { |
| "_number": 123, |
| "subject": "Test Change 1", |
| "updated": "2023-01-03T00:00:00.000000000Z", |
| }, |
| { |
| "_number": 456, |
| "subject": "Test Change 2", |
| "updated": "2023-01-01T00:00:00.000000000Z", |
| "work_in_progress": True, |
| }, |
| ] |
| mock_run_curl.return_value = json.dumps(mock_response) |
| gerrit_base_url = "https://my-gerrit.com" |
| |
| # Act |
| result = await main.query_changes( |
| query, gerrit_base_url=gerrit_base_url, limit=limit |
| ) |
| |
| # Assert |
| self.assertIn('Found 2 changes for query "status:open":', result[0]["text"]) |
| self.assertIn("- 123: Test Change 1", result[0]["text"]) |
| self.assertIn("- 456: [WIP] Test Change 2", result[0]["text"]) |
| |
| asyncio.run(run_test()) |
| |
| @patch("gerrit_mcp_server.main.run_curl", new_callable=AsyncMock) |
| def test_query_changes_no_results(self, mock_run_curl): |
| async def run_test(): |
| # Arrange |
| query = "status:merged" |
| mock_run_curl.return_value = "[]" |
| gerrit_base_url = "https://my-gerrit.com" |
| |
| # Act |
| result = await main.query_changes(query, gerrit_base_url=gerrit_base_url) |
| |
| # Assert |
| self.assertEqual( |
| result, |
| [{"type": "text", "text": f"No changes found for query: {query}"}], |
| ) |
| |
| asyncio.run(run_test()) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |