1717from unittest import mock
1818
1919from clusterfuzz ._internal .cron import external_testcase_reader
20+ from clusterfuzz ._internal .issue_management .google_issue_tracker import \
21+ issue_tracker
2022
2123BASIC_ATTACHMENT = {
2224 'attachmentId' : '60127668' ,
@@ -34,90 +36,107 @@ class ExternalTestcaseReaderTest(unittest.TestCase):
3436 """external_testcase_reader tests."""
3537
3638 def setUp (self ):
37- self .issue_tracker = mock .MagicMock ()
38- self .mock_submit_testcase = mock .MagicMock ()
39- self .mock_close_invalid_issue = mock .MagicMock ()
39+ self .mock_basic_issue = mock .MagicMock ()
40+ self .mock_basic_issue .created_time = '2024-06-25T01:29:30.021Z'
41+ self .mock_basic_issue .status = 'NEW'
42+ external_testcase_reader .submit_testcase = mock .MagicMock ()
4043
4144 def test_handle_testcases (self ):
42- """Test a basic handle_testcases where issue is valid."""
43- mock_iter = mock .MagicMock ()
44- mock_iter .__iter__ .return_value = [mock .MagicMock ()]
45- self .issue_tracker .find_issues .return_value = mock_iter
46- self .mock_close_invalid_issue .return_value = False
47- external_testcase_reader .close_invalid_issue = self .mock_close_invalid_issue
48- external_testcase_reader .submit_testcase = self .mock_submit_testcase
49-
50- external_testcase_reader .handle_testcases (self .issue_tracker )
51- self .mock_close_invalid_issue .assert_called_once ()
52- self .issue_tracker .get_attachment .assert_called_once ()
53- self .mock_submit_testcase .assert_called_once ()
45+ """Test a basic handle_testcases where issue is fit for submission."""
46+ mock_it = mock .create_autospec (issue_tracker .IssueTracker )
47+ mock_it .find_issues_with_filters .return_value = [self .mock_basic_issue ]
48+ external_testcase_reader .close_issue_if_invalid = mock .MagicMock ()
49+ external_testcase_reader .close_issue_if_invalid .return_value = False
50+
51+ external_testcase_reader .handle_testcases (mock_it )
52+ external_testcase_reader .close_issue_if_invalid .assert_called_once ()
53+ mock_it .get_attachment .assert_called_once ()
54+ external_testcase_reader .submit_testcase .assert_called_once ()
5455
5556 def test_handle_testcases_invalid (self ):
5657 """Test a basic handle_testcases where issue is invalid."""
57- mock_iter = mock .MagicMock ()
58- mock_iter .__iter__ .return_value = [mock .MagicMock ()]
59- self .issue_tracker .find_issues .return_value = mock_iter
60- self .mock_close_invalid_issue .return_value = True
61- external_testcase_reader .close_invalid_issue = self .mock_close_invalid_issue
62- external_testcase_reader .submit_testcase = self .mock_submit_testcase
63-
64- external_testcase_reader .handle_testcases (self .issue_tracker )
65- self .mock_close_invalid_issue .assert_called_once ()
66- self .issue_tracker .get_attachment .assert_not_called ()
67- self .mock_submit_testcase .assert_not_called ()
58+ mock_it = mock .create_autospec (issue_tracker .IssueTracker )
59+ mock_it .find_issues_with_filters .return_value = [self .mock_basic_issue ]
60+ external_testcase_reader .close_issue_if_invalid = mock .MagicMock ()
61+ external_testcase_reader .close_issue_if_invalid .return_value = True
62+
63+ external_testcase_reader .handle_testcases (mock_it )
64+ external_testcase_reader .close_issue_if_invalid .assert_called_once ()
65+ mock_it .get_attachment .assert_not_called ()
66+ external_testcase_reader .submit_testcase .assert_not_called ()
67+
68+ def test_handle_testcases_not_reproducible (self ):
69+ """Test a basic handle_testcases where issue is not reprodiclbe."""
70+ mock_it = mock .create_autospec (issue_tracker .IssueTracker )
71+ mock_it .find_issues_with_filters .return_value = [self .mock_basic_issue ]
72+ external_testcase_reader .close_issue_if_not_reproducible = mock .MagicMock ()
73+ external_testcase_reader .close_issue_if_not_reproducible .return_value = True
74+ external_testcase_reader .close_issue_if_invalid = mock .MagicMock ()
75+
76+ external_testcase_reader .handle_testcases (mock_it )
77+ external_testcase_reader .close_issue_if_invalid .assert_not_called ()
78+ mock_it .get_attachment .assert_not_called ()
79+ external_testcase_reader .submit_testcase .assert_not_called ()
6880
6981 def test_handle_testcases_no_issues (self ):
7082 """Test a basic handle_testcases that returns no issues."""
71- self .issue_tracker .find_issues .return_value = None
72-
73- external_testcase_reader .handle_testcases (self .issue_tracker )
74- self .mock_close_invalid_issue .assert_not_called ()
75- self .issue_tracker .get_attachment .assert_not_called ()
76- self .mock_submit_testcase .assert_not_called ()
83+ mock_it = mock .create_autospec (issue_tracker .IssueTracker )
84+ mock_it .find_issues_with_filters .return_value = []
85+ external_testcase_reader .close_issue_if_invalid = mock .MagicMock ()
86+
87+ external_testcase_reader .handle_testcases (mock_it )
88+ external_testcase_reader .close_issue_if_invalid .assert_not_called ()
89+ mock_it .get_attachment .assert_not_called ()
90+ external_testcase_reader .submit_testcase .assert_not_called ()
91+
92+ def test_close_issue_if_not_reproducible_true (self ):
93+ """Test a basic close_issue_if_invalid with valid flags."""
94+ external_testcase_reader .filed_one_day_ago = mock .MagicMock ()
95+ external_testcase_reader .filed_one_day_ago .return_value = True
96+ self .mock_basic_issue .status = 'ACCEPTED'
97+ self .assertEqual (
98+ True ,
99+ external_testcase_reader .close_issue_if_not_reproducible (
100+ self .mock_basic_issue ))
77101
78- def test_close_invalid_issue_basic (self ):
79- """Test a basic _close_invalid_issue with valid flags."""
80- upload_request = mock .Mock ()
102+ def test_close_issue_if_invalid_basic (self ):
103+ """Test a basic close_issue_if_invalid with valid flags."""
81104 attachment_info = [BASIC_ATTACHMENT ]
82105 description = '--flag-one --flag_two'
83106 self .assertEqual (
84107 False ,
85- external_testcase_reader .close_invalid_issue (
86- upload_request , attachment_info , description ))
108+ external_testcase_reader .close_issue_if_invalid (
109+ self . mock_basic_issue , attachment_info , description ))
87110
88- def test_close_invalid_issue_no_flag (self ):
89- """Test a basic _close_invalid_issue with no flags."""
90- upload_request = mock .Mock ()
111+ def test_close_issue_if_invalid_no_flag (self ):
112+ """Test a basic close_issue_if_invalid with no flags."""
91113 attachment_info = [BASIC_ATTACHMENT ]
92114 description = ''
93115 self .assertEqual (
94116 False ,
95- external_testcase_reader .close_invalid_issue (
96- upload_request , attachment_info , description ))
117+ external_testcase_reader .close_issue_if_invalid (
118+ self . mock_basic_issue , attachment_info , description ))
97119
98- def test_close_invalid_issue_too_many_attachments (self ):
99- """Test _close_invalid_issue with too many attachments."""
100- upload_request = mock .Mock ()
120+ def test_close_issue_if_invalid_too_many_attachments (self ):
121+ """Test close_issue_if_invalid with too many attachments."""
101122 attachment_info = [BASIC_ATTACHMENT , BASIC_ATTACHMENT ]
102123 description = ''
103124 self .assertEqual (
104125 True ,
105- external_testcase_reader .close_invalid_issue (
106- upload_request , attachment_info , description ))
126+ external_testcase_reader .close_issue_if_invalid (
127+ self . mock_basic_issue , attachment_info , description ))
107128
108- def test_close_invalid_issue_no_attachments (self ):
109- """Test _close_invalid_issue with no attachments."""
110- upload_request = mock .Mock ()
129+ def test_close_issue_if_invalid_no_attachments (self ):
130+ """Test close_issue_if_invalid with no attachments."""
111131 attachment_info = []
112132 description = ''
113133 self .assertEqual (
114134 True ,
115- external_testcase_reader .close_invalid_issue (
116- upload_request , attachment_info , description ))
135+ external_testcase_reader .close_issue_if_invalid (
136+ self . mock_basic_issue , attachment_info , description ))
117137
118- def test_close_invalid_issue_invalid_upload (self ):
119- """Test _close_invalid_issue with an invalid upload."""
120- upload_request = mock .Mock ()
138+ def test_close_issue_if_invalid_invalid_upload (self ):
139+ """Test close_issue_if_invalid with an invalid upload."""
121140 attachment_info = [{
122141 'attachmentId' : '60127668' ,
123142 'contentType' : 'application/octet-stream' ,
@@ -129,12 +148,11 @@ def test_close_invalid_issue_invalid_upload(self):
129148 description = ''
130149 self .assertEqual (
131150 True ,
132- external_testcase_reader .close_invalid_issue (
133- upload_request , attachment_info , description ))
151+ external_testcase_reader .close_issue_if_invalid (
152+ self . mock_basic_issue , attachment_info , description ))
134153
135- def test_close_invalid_issue_invalid_content_type (self ):
136- """Test _close_invalid_issue with an invalid content type."""
137- upload_request = mock .Mock ()
154+ def test_close_issue_if_invalid_invalid_content_type (self ):
155+ """Test close_issue_if_invalid with an invalid content type."""
138156 attachment_info = [{
139157 'attachmentId' : '60127668' ,
140158 'contentType' : 'application/octet-stream' ,
@@ -148,5 +166,5 @@ def test_close_invalid_issue_invalid_content_type(self):
148166 description = ''
149167 self .assertEqual (
150168 True ,
151- external_testcase_reader .close_invalid_issue (
152- upload_request , attachment_info , description ))
169+ external_testcase_reader .close_issue_if_invalid (
170+ self . mock_basic_issue , attachment_info , description ))
0 commit comments