pytorch

Форк
0
/
test_label_utils.py 
95 строк · 3.3 Кб
1
from typing import Any
2
from unittest import main, mock, TestCase
3

4
from label_utils import (
5
    get_last_page_num_from_header,
6
    gh_get_labels,
7
    has_required_labels,
8
)
9
from test_trymerge import mocked_gh_graphql
10
from trymerge import GitHubPR
11

12

13
release_notes_labels = [
14
    "release notes: nn",
15
]
16

17

18
class TestLabelUtils(TestCase):
19
    MOCK_HEADER_LINKS_TO_PAGE_NUMS = {
20
        1: {
21
            "link": "<https://api.github.com/dummy/labels?per_page=10&page=1>; rel='last'"
22
        },
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>;"},
25
    }
26

27
    def test_get_last_page_num_from_header(self) -> None:
28
        for (
29
            expected_page_num,
30
            mock_header,
31
        ) in self.MOCK_HEADER_LINKS_TO_PAGE_NUMS.items():
32
            self.assertEqual(
33
                get_last_page_num_from_header(mock_header), expected_page_num
34
            )
35

36
    MOCK_LABEL_INFO = '[{"name": "foo"}]'
37

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(
41
        self,
42
        mock_request_for_labels: Any,
43
        mock_get_last_page_num_from_header: Any,
44
    ) -> None:
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)
48

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(
52
        self,
53
        mock_request_for_labels: Any,
54
        get_last_page_num_from_header: Any,
55
    ) -> None:
56
        with self.assertRaises(AssertionError) as err:
57
            gh_get_labels("foo", "bar")
58
        self.assertIn("number of pages of labels", str(err.exception))
59

60
    @mock.patch("trymerge.gh_graphql", side_effect=mocked_gh_graphql)
61
    @mock.patch(
62
        "label_utils.get_release_notes_labels", return_value=release_notes_labels
63
    )
64
    def test_pr_with_missing_labels(
65
        self, mocked_rn_labels: Any, mocked_gql: Any
66
    ) -> None:
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))
70

71
    @mock.patch("trymerge.gh_graphql", side_effect=mocked_gh_graphql)
72
    @mock.patch(
73
        "label_utils.get_release_notes_labels", return_value=release_notes_labels
74
    )
75
    def test_pr_with_release_notes_label(
76
        self, mocked_rn_labels: Any, mocked_gql: Any
77
    ) -> None:
78
        "Test PR with 'release notes: nn' label"
79
        pr = GitHubPR("pytorch", "pytorch", 71759)
80
        self.assertTrue(has_required_labels(pr))
81

82
    @mock.patch("trymerge.gh_graphql", side_effect=mocked_gh_graphql)
83
    @mock.patch(
84
        "label_utils.get_release_notes_labels", return_value=release_notes_labels
85
    )
86
    def test_pr_with_not_user_facing_label(
87
        self, mocked_rn_labels: Any, mocked_gql: Any
88
    ) -> None:
89
        "Test PR with 'topic: not user facing' label"
90
        pr = GitHubPR("pytorch", "pytorch", 75095)
91
        self.assertTrue(has_required_labels(pr))
92

93

94
if __name__ == "__main__":
95
    main()
96

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.