# tests/test_github_tool.py import unittest from unittest.mock import patch, MagicMock from tools.github_tool import GitHubTool class TestGitHubTool(unittest.TestCase): def setUp(self): self.github_tool = GitHubTool() def test_get_functions(self): functions = self.github_tool.get_functions() self.assertEqual(len(functions), 4) function_names = [f["name"] for f in functions] expected_names = ["read_file", "create_branch", "commit_file", "create_pull_request"] self.assertListEqual(function_names, expected_names) @patch('tools.github_tool.requests.get') def test_read_file(self, mock_get): mock_response = MagicMock() mock_response.status_code = 200 mock_response.json.return_value = {"content": "file content"} mock_get.return_value = mock_response result = self.github_tool.execute("read_file", path="test.txt") self.assertEqual(result, "file content") mock_get.assert_called_once() @patch('tools.github_tool.requests.get') @patch('tools.github_tool.requests.post') def test_create_branch(self, mock_post, mock_get): mock_get_response = MagicMock() mock_get_response.status_code = 200 mock_get_response.json.return_value = {"object": {"sha": "test_sha"}} mock_get.return_value = mock_get_response mock_post_response = MagicMock() mock_post_response.status_code = 201 mock_post.return_value = mock_post_response result = self.github_tool.execute("create_branch", branch_name="test-branch") self.assertEqual(result, "Branch 'test-branch' created successfully") mock_get.assert_called_once() mock_post.assert_called_once() @patch('tools.github_tool.requests.put') def test_commit_file(self, mock_put): mock_response = MagicMock() mock_response.status_code = 200 mock_put.return_value = mock_response result = self.github_tool.execute("commit_file", branch_name="test-branch", file_path="test.txt", content="test content", commit_message="Test commit") self.assertEqual(result, "File committed successfully to branch 'test-branch'") mock_put.assert_called_once() def test_commit_file_to_main(self): result = self.github_tool.execute("commit_file", branch_name="main", file_path="test.txt", content="test content", commit_message="Test commit") self.assertEqual(result, "Cannot commit directly to main branch") @patch('tools.github_tool.requests.post') def test_create_pull_request(self, mock_post): mock_response = MagicMock() mock_response.status_code = 201 mock_response.json.return_value = {"html_url": "https://github.com/test/test/pull/1"} mock_post.return_value = mock_response result = self.github_tool.execute("create_pull_request", title="Test PR", body="Test body", head="test-branch") self.assertEqual(result, "Pull request created successfully: https://github.com/test/test/pull/1") mock_post.assert_called_once() def test_unknown_function(self): result = self.github_tool.execute("unknown_function") self.assertEqual(result, "Unknown function: unknown_function") if __name__ == '__main__': unittest.main()