import json import logging from app.writer.tools.github import ( fetch_bug_fix_pulls, fetch_github_issue, extract_affect_versions_from_labels, ) from app.models.support_ticket import MentionGitHubIssueLink from packaging.version import Version logger = logging.getLogger(__name__) def test_fetch_github_issue(): link = MentionGitHubIssueLink( url="https://github.com/pingcap/tidb/issues/50012", owner="pingcap", repo="tidb", number=50012, ) mention_github_issue = fetch_github_issue(link) assert mention_github_issue.components == ["planner"] assert mention_github_issue.affect_versions == [ "6.5", "7.1", "7.2", "7.3", "7.4", "7.5", ] assert mention_github_issue.fixed_versions == ["6.5.8", "7.1.4", "7.5.1", "7.6.0"] def test_extract_affect_versions_from_labels(): """ Test extracting affected versions from GitHub issue labels """ # Test with various label formats labels = [ "affects-7.1", "affects-6.5", "component/planner", "affects-7.4", "severity/critical", ] versions = extract_affect_versions_from_labels(labels) assert versions == [Version("v6.5"), Version("v7.1"), Version("v7.4")] # Test with empty labels assert extract_affect_versions_from_labels([]) == [] # Test with no version labels assert ( extract_affect_versions_from_labels(["severity/critical", "component/planner"]) == [] ) def test_fetch_bug_fix_pulls(): owner = "pingcap" repo = "tidb" number = 50012 pulls = fetch_bug_fix_pulls(owner, repo, number) for p in pulls: logger.info(p.model_dump_json(indent=4)) def test_fetch_bug_information(): link = MentionGitHubIssueLink( url="https://github.com/pingcap/tidb/issues/50012", owner="pingcap", repo="tidb", number=50012, ) issue = fetch_github_issue(link) logger.info(issue.model_dump_json(indent=4))