2
from unittest import main, mock, TestCase
4
from label_utils import (
5
get_last_page_num_from_header,
9
from test_trymerge import mocked_gh_graphql
10
from trymerge import GitHubPR
13
release_notes_labels = [
18
class TestLabelUtils(TestCase):
19
MOCK_HEADER_LINKS_TO_PAGE_NUMS = {
21
"link": "<https://api.github.com/dummy/labels?per_page=10&page=1>; rel='last'"
23
2: {"link": "<https://api.github.com/dummy/labels?per_page=1&page=2>;"},
24
3: {"link": "<https://api.github.com/dummy/labels?per_page=1&page=2&page=3>;"},
27
def test_get_last_page_num_from_header(self) -> None:
31
) in self.MOCK_HEADER_LINKS_TO_PAGE_NUMS.items():
33
get_last_page_num_from_header(mock_header), expected_page_num
36
MOCK_LABEL_INFO = '[{"name": "foo"}]'
38
@mock.patch("label_utils.get_last_page_num_from_header", return_value=3)
39
@mock.patch("label_utils.request_for_labels", return_value=(None, MOCK_LABEL_INFO))
40
def test_gh_get_labels(
42
mock_request_for_labels: Any,
43
mock_get_last_page_num_from_header: Any,
45
res = gh_get_labels("mock_org", "mock_repo")
46
mock_get_last_page_num_from_header.assert_called_once()
47
self.assertEqual(res, ["foo"] * 3)
49
@mock.patch("label_utils.get_last_page_num_from_header", return_value=0)
50
@mock.patch("label_utils.request_for_labels", return_value=(None, MOCK_LABEL_INFO))
51
def test_gh_get_labels_raises_with_no_pages(
53
mock_request_for_labels: Any,
54
get_last_page_num_from_header: Any,
56
with self.assertRaises(AssertionError) as err:
57
gh_get_labels("foo", "bar")
58
self.assertIn("number of pages of labels", str(err.exception))
60
@mock.patch("trymerge.gh_graphql", side_effect=mocked_gh_graphql)
62
"label_utils.get_release_notes_labels", return_value=release_notes_labels
64
def test_pr_with_missing_labels(
65
self, mocked_rn_labels: Any, mocked_gql: Any
67
"Test PR with no 'release notes:' label or 'topic: not user facing' label"
68
pr = GitHubPR("pytorch", "pytorch", 82169)
69
self.assertFalse(has_required_labels(pr))
71
@mock.patch("trymerge.gh_graphql", side_effect=mocked_gh_graphql)
73
"label_utils.get_release_notes_labels", return_value=release_notes_labels
75
def test_pr_with_release_notes_label(
76
self, mocked_rn_labels: Any, mocked_gql: Any
78
"Test PR with 'release notes: nn' label"
79
pr = GitHubPR("pytorch", "pytorch", 71759)
80
self.assertTrue(has_required_labels(pr))
82
@mock.patch("trymerge.gh_graphql", side_effect=mocked_gh_graphql)
84
"label_utils.get_release_notes_labels", return_value=release_notes_labels
86
def test_pr_with_not_user_facing_label(
87
self, mocked_rn_labels: Any, mocked_gql: Any
89
"Test PR with 'topic: not user facing' label"
90
pr = GitHubPR("pytorch", "pytorch", 75095)
91
self.assertTrue(has_required_labels(pr))
94
if __name__ == "__main__":