diff --git a/tests/unittest/test_fetching_sub_issues.py b/tests/unittest/test_fetching_sub_issues.py index 48795866..43ab68f8 100644 --- a/tests/unittest/test_fetching_sub_issues.py +++ b/tests/unittest/test_fetching_sub_issues.py @@ -1,118 +1,121 @@ -import unittest -import asyncio -from unittest.mock import AsyncMock, patch -from pr_agent.tools.ticket_pr_compliance_check import extract_tickets, extract_and_cache_pr_tickets -from pr_agent.git_providers.github_provider import GithubProvider - - -class TestTicketCompliance(unittest.TestCase): - - @patch.object(GithubProvider, 'get_user_description', return_value="Fixes #1 and relates to #2") - @patch.object(GithubProvider, '_parse_issue_url', side_effect=lambda url: ("WonOfAKind/KimchiBot", int(url.split('#')[-1]))) - @patch.object(GithubProvider, 'repo_obj') - async def test_extract_tickets(self, mock_repo, mock_parse_issue_url, mock_user_desc): - """ - Test extract_tickets() to ensure it extracts tickets correctly - and fetches their content. - """ - github_provider = GithubProvider() - github_provider.repo = "WonOfAKind/KimchiBot" - github_provider.base_url_html = "https://github.com" - - # Mock issue retrieval - mock_issue = AsyncMock() - mock_issue.number = 1 - mock_issue.title = "Sample Issue" - mock_issue.body = "This is a test issue body." - mock_issue.labels = ["bug", "high priority"] - - # Mock repo object - mock_repo.get_issue.return_value = mock_issue - - tickets = await extract_tickets(github_provider) - - # Verify tickets were extracted correctly - self.assertIsInstance(tickets, list) - self.assertGreater(len(tickets), 0, "Expected at least one ticket!") - - # Verify ticket structure - first_ticket = tickets[0] - self.assertIn("ticket_id", first_ticket) - self.assertIn("ticket_url", first_ticket) - self.assertIn("title", first_ticket) - self.assertIn("body", first_ticket) - self.assertIn("labels", first_ticket) - - print("\n Test Passed: extract_tickets() successfully retrieved ticket info!") - - @patch.object(GithubProvider, 'get_user_description', return_value="Fixes #1 and relates to #2") - @patch.object(GithubProvider, '_parse_issue_url', side_effect=lambda url: ("WonOfAKind/KimchiBot", int(url.split('#')[-1]))) - @patch.object(GithubProvider, 'repo_obj') - async def test_extract_and_cache_pr_tickets(self, mock_repo, mock_parse_issue_url, mock_user_desc): - """ - Test extract_and_cache_pr_tickets() to ensure tickets are extracted and cached correctly. - """ - github_provider = GithubProvider() - github_provider.repo = "WonOfAKind/KimchiBot" - github_provider.base_url_html = "https://github.com" - - vars = {} # Simulate the dictionary to store results - - # Mock issue retrieval - mock_issue = AsyncMock() - mock_issue.number = 1 - mock_issue.title = "Sample Issue" - mock_issue.body = "This is a test issue body." - mock_issue.labels = ["bug", "high priority"] - - # Mock repo object - mock_repo.get_issue.return_value = mock_issue - - # Run function - await extract_and_cache_pr_tickets(github_provider, vars) - - # Ensure tickets are cached - self.assertIn("related_tickets", vars) - self.assertIsInstance(vars["related_tickets"], list) - self.assertGreater(len(vars["related_tickets"]), 0, "Expected at least one cached ticket!") - - print("\n Test Passed: extract_and_cache_pr_tickets() successfully cached ticket data!") - - def test_fetch_sub_issues(self): - """ - Test fetch_sub_issues() to ensure sub-issues are correctly retrieved. - """ - github_provider = GithubProvider() - issue_url = "https://github.com/WonOfAKind/KimchiBot/issues/1" # Known issue with sub-issues - result = github_provider.fetch_sub_issues(issue_url) - - print("Fetched sub-issues:", result) - - self.assertIsInstance(result, set) # Ensure result is a set - self.assertGreater(len(result), 0, "Expected at least one sub-issue but found none!") - - print("\n Test Passed: fetch_sub_issues() retrieved sub-issues correctly!") - - def test_fetch_sub_issues_with_no_results(self): - """ - Test fetch_sub_issues() to ensure an empty set is returned for an issue with no sub-issues. - """ - github_provider = GithubProvider() - issue_url = "https://github.com/qodo-ai/pr-agent/issues/1499" # Likely non-existent issue - result = github_provider.fetch_sub_issues(issue_url) - - print("Fetched sub-issues for non-existent issue:", result) - - self.assertIsInstance(result, set) # Ensure result is a set - self.assertEqual(len(result), 0, "Expected no sub-issues but some were found!") - - print("\n Test Passed: fetch_sub_issues_with_no_results() correctly returned an empty set!") - - -if __name__ == "__main__": - asyncio.run(unittest.main()) - - - +# Currently doing API calls - wrong ! +# import unittest +# import asyncio +# from unittest.mock import AsyncMock, patch +# from pr_agent.tools.ticket_pr_compliance_check import extract_tickets, extract_and_cache_pr_tickets +# from pr_agent.git_providers.github_provider import GithubProvider +# +# +# class TestTicketCompliance(unittest.TestCase): +# +# @patch.object(GithubProvider, 'get_user_description', return_value="Fixes #1 and relates to #2") +# @patch.object(GithubProvider, '_parse_issue_url', side_effect=lambda url: ("WonOfAKind/KimchiBot", int(url.split('#')[-1]))) +# @patch.object(GithubProvider, 'repo_obj') +# async def test_extract_tickets(self, mock_repo, mock_parse_issue_url, mock_user_desc): +# """ +# Test extract_tickets() to ensure it extracts tickets correctly +# and fetches their content. +# """ +# github_provider = GithubProvider() +# github_provider.repo = "WonOfAKind/KimchiBot" +# github_provider.base_url_html = "https://github.com" +# +# # Mock issue retrieval +# mock_issue = AsyncMock() +# mock_issue.number = 1 +# mock_issue.title = "Sample Issue" +# mock_issue.body = "This is a test issue body." +# mock_issue.labels = ["bug", "high priority"] +# +# # Mock repo object +# mock_repo.get_issue.return_value = mock_issue +# +# tickets = await extract_tickets(github_provider) +# +# # Verify tickets were extracted correctly +# self.assertIsInstance(tickets, list) +# self.assertGreater(len(tickets), 0, "Expected at least one ticket!") +# +# # Verify ticket structure +# first_ticket = tickets[0] +# self.assertIn("ticket_id", first_ticket) +# self.assertIn("ticket_url", first_ticket) +# self.assertIn("title", first_ticket) +# self.assertIn("body", first_ticket) +# self.assertIn("labels", first_ticket) +# +# print("\n Test Passed: extract_tickets() successfully retrieved ticket info!") +# +# @patch.object(GithubProvider, 'get_user_description', return_value="Fixes #1 and relates to #2") +# @patch.object(GithubProvider, '_parse_issue_url', side_effect=lambda url: ("WonOfAKind/KimchiBot", int(url.split('#')[-1]))) +# @patch.object(GithubProvider, 'repo_obj') +# async def test_extract_and_cache_pr_tickets(self, mock_repo, mock_parse_issue_url, mock_user_desc): +# """ +# Test extract_and_cache_pr_tickets() to ensure tickets are extracted and cached correctly. +# """ +# github_provider = GithubProvider() +# github_provider.repo = "WonOfAKind/KimchiBot" +# github_provider.base_url_html = "https://github.com" +# +# vars = {} # Simulate the dictionary to store results +# +# # Mock issue retrieval +# mock_issue = AsyncMock() +# mock_issue.number = 1 +# mock_issue.title = "Sample Issue" +# mock_issue.body = "This is a test issue body." +# mock_issue.labels = ["bug", "high priority"] +# +# # Mock repo object +# mock_repo.get_issue.return_value = mock_issue +# +# # Run function +# await extract_and_cache_pr_tickets(github_provider, vars) +# +# # Ensure tickets are cached +# self.assertIn("related_tickets", vars) +# self.assertIsInstance(vars["related_tickets"], list) +# self.assertGreater(len(vars["related_tickets"]), 0, "Expected at least one cached ticket!") +# +# print("\n Test Passed: extract_and_cache_pr_tickets() successfully cached ticket data!") +# +# def test_fetch_sub_issues(self): +# """ +# Test fetch_sub_issues() to ensure sub-issues are correctly retrieved. +# """ +# github_provider = GithubProvider() +# issue_url = "https://github.com/WonOfAKind/KimchiBot/issues/1" # Known issue with sub-issues +# result = github_provider.fetch_sub_issues(issue_url) +# +# print("Fetched sub-issues:", result) +# +# self.assertIsInstance(result, set) # Ensure result is a set +# self.assertGreater(len(result), 0, "Expected at least one sub-issue but found none!") +# +# print("\n Test Passed: fetch_sub_issues() retrieved sub-issues correctly!") +# +# def test_fetch_sub_issues_with_no_results(self): +# """ +# Test fetch_sub_issues() to ensure an empty set is returned for an issue with no sub-issues. +# """ +# github_provider = GithubProvider() +# issue_url = "https://github.com/qodo-ai/pr-agent/issues/1499" # Likely non-existent issue +# result = github_provider.fetch_sub_issues(issue_url) +# +# print("Fetched sub-issues for non-existent issue:", result) +# +# self.assertIsInstance(result, set) # Ensure result is a set +# self.assertEqual(len(result), 0, "Expected no sub-issues but some were found!") +# +# print("\n Test Passed: fetch_sub_issues_with_no_results() correctly returned an empty set!") +# +# +# if __name__ == "__main__": +# asyncio.run(unittest.main()) +# +# +# +# +#