1
"""test_check_labels.py"""
3
from typing import Any, List
4
from unittest import main, mock, TestCase
6
from check_labels import (
8
delete_all_label_err_comments,
9
main as check_labels_main,
11
from github_utils import GitHubComment
12
from label_utils import BOT_AUTHORS, LABEL_ERR_MSG_TITLE
13
from test_trymerge import mock_gh_get_info, mocked_gh_graphql
14
from trymerge import GitHubPR
17
def mock_parse_args() -> object:
19
def __init__(self) -> None:
21
self.exit_non_zero = False
26
def mock_add_label_err_comment(pr: "GitHubPR") -> None:
30
def mock_delete_all_label_err_comments(pr: "GitHubPR") -> None:
34
def mock_get_comments() -> List[GitHubComment]:
38
body_text="mock_body_text",
41
author_association="",
48
body_text=" #" + LABEL_ERR_MSG_TITLE.replace("`", ""),
50
author_login=BOT_AUTHORS[1],
51
author_association="",
59
class TestCheckLabels(TestCase):
60
@mock.patch("trymerge.gh_graphql", side_effect=mocked_gh_graphql)
61
@mock.patch("trymerge.GitHubPR.get_comments", return_value=[mock_get_comments()[0]])
62
@mock.patch("check_labels.gh_post_pr_comment")
63
def test_correctly_add_label_err_comment(
64
self, mock_gh_post_pr_comment: Any, mock_get_comments: Any, mock_gh_grphql: Any
66
"Test add label err comment when similar comments don't exist."
67
pr = GitHubPR("pytorch", "pytorch", 75095)
68
add_label_err_comment(pr)
69
mock_gh_post_pr_comment.assert_called_once()
71
@mock.patch("trymerge.gh_graphql", side_effect=mocked_gh_graphql)
72
@mock.patch("trymerge.GitHubPR.get_comments", return_value=[mock_get_comments()[1]])
73
@mock.patch("check_labels.gh_post_pr_comment")
74
def test_not_add_label_err_comment(
75
self, mock_gh_post_pr_comment: Any, mock_get_comments: Any, mock_gh_grphql: Any
77
"Test not add label err comment when similar comments exist."
78
pr = GitHubPR("pytorch", "pytorch", 75095)
79
add_label_err_comment(pr)
80
mock_gh_post_pr_comment.assert_not_called()
82
@mock.patch("trymerge.gh_graphql", side_effect=mocked_gh_graphql)
83
@mock.patch("trymerge.GitHubPR.get_comments", return_value=mock_get_comments())
84
@mock.patch("check_labels.gh_delete_comment")
85
def test_correctly_delete_all_label_err_comments(
86
self, mock_gh_delete_comment: Any, mock_get_comments: Any, mock_gh_grphql: Any
88
"Test only delete label err comment."
89
pr = GitHubPR("pytorch", "pytorch", 75095)
90
delete_all_label_err_comments(pr)
91
mock_gh_delete_comment.assert_called_once_with("pytorch", "pytorch", 2)
93
@mock.patch("trymerge.gh_get_pr_info", return_value=mock_gh_get_info())
94
@mock.patch("check_labels.parse_args", return_value=mock_parse_args())
95
@mock.patch("check_labels.has_required_labels", return_value=False)
97
"check_labels.delete_all_label_err_comments",
98
side_effect=mock_delete_all_label_err_comments,
101
"check_labels.add_label_err_comment", side_effect=mock_add_label_err_comment
103
def test_ci_comments_and_exit0_without_required_labels(
105
mock_add_label_err_comment: Any,
106
mock_delete_all_label_err_comments: Any,
107
mock_has_required_labels: Any,
108
mock_parse_args: Any,
109
mock_gh_get_info: Any,
111
with self.assertRaises(SystemExit) as sys_exit:
113
self.assertEqual(str(sys_exit.exception), "0")
114
mock_add_label_err_comment.assert_called_once()
115
mock_delete_all_label_err_comments.assert_not_called()
117
@mock.patch("trymerge.gh_get_pr_info", return_value=mock_gh_get_info())
118
@mock.patch("check_labels.parse_args", return_value=mock_parse_args())
119
@mock.patch("check_labels.has_required_labels", return_value=True)
121
"check_labels.delete_all_label_err_comments",
122
side_effect=mock_delete_all_label_err_comments,
125
"check_labels.add_label_err_comment", side_effect=mock_add_label_err_comment
127
def test_ci_exit0_with_required_labels(
129
mock_add_label_err_comment: Any,
130
mock_delete_all_label_err_comments: Any,
131
mock_has_required_labels: Any,
132
mock_parse_args: Any,
133
mock_gh_get_info: Any,
135
with self.assertRaises(SystemExit) as sys_exit:
137
self.assertEqual(str(sys_exit.exception), "0")
138
mock_add_label_err_comment.assert_not_called()
139
mock_delete_all_label_err_comments.assert_called_once()
142
if __name__ == "__main__":