import unittest import unittest.mock import requests import json from nixprstatus.pr import commit_in_branch, pr_merge_status, commits_since def mocked_requests_get(*args, **kwargs): class MockedResponse: def __init__(self, json_data, status_code): self.json_data = json_data self.status_code = status_code def json(self): return json.loads(self.json_data) def raise_for_status(self): if self.status_code not in [200, 201]: raise requests.exceptions.HTTPError() if "pulls" in args[0]: pr = args[0].split("/")[-1] with open(f"tests/fixtures/pulls_{pr}.json") as f: data = f.read() return MockedResponse(data, 200) elif "compare" in args[0]: branch, commit_sha = args[0].split("/")[-1].split("...") with open(f"tests/fixtures/compare_{branch}_{commit_sha}.json") as f: data = f.read() return MockedResponse(data, 200) elif "comments" in args[0]: pr = args[0].split("/")[-2] with open(f"tests/fixtures/comments_{pr}.json") as f: data = f.read() return MockedResponse(data, 200) class TestPRMergeStatus(unittest.TestCase): @unittest.mock.patch("requests.get", side_effect=mocked_requests_get) def test_pr_merge_status_345583(self, mock_get): pr = 345583 branches = ["master", "nixos-unstable", "nixos-24.05"] res = pr_merge_status(pr, branches, check_backport=False) self.assertTrue(res.merged) self.assertTrue(res.branches["master"]) self.assertTrue(res.branches["nixos-unstable"]) self.assertFalse(res.branches["nixos-24.05"]) @unittest.mock.patch("requests.get", side_effect=mocked_requests_get) def test_pr_merge_status_backport_345769(self, mock_get): pr = 345769 branches = ["nixos-24.05"] res = pr_merge_status(pr, branches, check_backport=True) self.assertTrue(res.merged) self.assertTrue(res.branches["nixos-24.05 (#346022)"]) @unittest.mock.patch("requests.get", side_effect=mocked_requests_get) def test_pr_merge_status_title_345769(self, mock_get): pr = 345769 branches = ["nixos-24.05"] expected_title = "Firefox: 130.0.1 -> 131.0; 128.2.0esr -> 128.3.0esr; 115.15.0esr -> 115.16.0esr" res = pr_merge_status(pr, branches, check_backport=True) self.assertEqual(res.title, expected_title) @unittest.mock.patch("requests.get", side_effect=mocked_requests_get) def test_pr_merge_status_no_check_master_345583(self, mock_get): pr = 345583 branches = ["master", "nixos-unstable", "nixos-24.05"] master_compare_url = "https://api.github.com/repos/NixOS/nixpkgs/compare/master...2c5fac3edf2d00d948253e392ec1604b29b38f14" res = pr_merge_status(pr, branches, check_backport=False) self.assertTrue(res.merged) self.assertTrue(res.branches["master"]) urls_called = [call[0][0] for call in mock_get.call_args_list] self.assertFalse(master_compare_url in urls_called) class TestCommitInBranch(unittest.TestCase): @unittest.mock.patch("requests.get", side_effect=mocked_requests_get) def test_commit_in_branch_2c5fac3e(self, mock_get): commit_sha = "2c5fac3edf2d00d948253e392ec1604b29b38f14" res = commit_in_branch(commit_sha, "master") self.assertTrue(res) res = commit_in_branch(commit_sha, "nixos-24.05") self.assertFalse(res) class TestCommitsSince(unittest.TestCase): @unittest.mock.patch("requests.get", side_effect=mocked_requests_get) def test_commits_since_27e30d17(self, mock_get): commit_sha = "27e30d177e57d912d614c88c622dcfdb2e6e6515" res = commits_since("nixos-unstable", commit_sha) self.assertEqual(res, 795)