def setUpTestData(cls): cls.admin = f.UserFactory() cls.staff = f.UserFactory() cls.admin_request = make_http_request(user=cls.admin, user_perm='issuetracker.delete_issue') cls.staff_request = make_http_request(user=cls.staff, user_perm='issuetracker.add_issue') cls.case_run = f.TestCaseRunFactory() cls.tracker_product = f.IssueTrackerProductFactory(name='MyBZ') cls.bz_tracker = f.IssueTrackerFactory( service_url='http://localhost/', issue_report_endpoint='/enter_bug.cgi', tracker_product=cls.tracker_product, validate_regex=r'^\d+$') cls.jira_tracker = f.IssueTrackerFactory( service_url='http://localhost/', issue_report_endpoint='/enter_bug.cgi', tracker_product=cls.tracker_product, validate_regex=r'^[A-Z]+-\d+$') product = cls.case_run.run.plan.product f.ProductIssueTrackerRelationshipFactory(product=product, issue_tracker=cls.bz_tracker) f.ProductIssueTrackerRelationshipFactory(product=product, issue_tracker=cls.jira_tracker)
def test_invalid_issue_report_params(self): st = f.IssueTrackerFactory(tracker_product=self.tracker_product) st.issue_report_params = 'product=name' self.assertValidationError( 'issue_report_params', r"Line .+ is not a pair of key/value separated by ':'", st.full_clean) st = f.IssueTrackerFactory(tracker_product=self.tracker_product) st.issue_report_params = 'product: name\ncustom_field: a:b:c' self.assertValidationError('issue_report_params', r"Line .+ contains multiple ':'", st.full_clean)
def setUpTestData(cls): super().setUpTestData() cls.run_1 = f.TestRunFactory() cls.case_1 = f.TestCaseFactory(plan=[cls.run_1.plan]) cls.case_2 = f.TestCaseFactory(plan=[cls.run_1.plan]) cls.case_run_1 = f.TestCaseRunFactory(case=cls.case_1, run=cls.run_1) cls.case_run_2 = f.TestCaseRunFactory(case=cls.case_2, run=cls.run_1) cls.run_2 = f.TestRunFactory() cls.case_3 = f.TestCaseFactory(plan=[cls.run_2.plan]) cls.case_4 = f.TestCaseFactory(plan=[cls.run_2.plan]) cls.case_run_3 = f.TestCaseRunFactory(case=cls.case_3, run=cls.run_2) cls.case_run_4 = f.TestCaseRunFactory(case=cls.case_4, run=cls.run_2) cls.tracker = f.IssueTrackerFactory( name='coolbz', service_url='http://localhost/', issue_report_endpoint='/enter_bug.cgi', validate_regex=r'^\d+$') cls.case_run_1.add_issue('1', cls.tracker) cls.case_run_1.add_issue('2', cls.tracker) cls.case_run_2.add_issue('3', cls.tracker) cls.case_run_3.add_issue('4', cls.tracker) cls.case_run_4.add_issue('5', cls.tracker) cls.case_run_4.add_issue('6', cls.tracker)
def test_invalid_class_path(self): tracker = f.IssueTrackerFactory( tracker_product=self.tracker_product, class_path='a.b.c', issues_display_url_fmt='http://localhost/{issue_keys}') self.assertValidationError('class_path', r"Cannot import a\.b", tracker.full_clean)
def setUpTestData(cls): super().setUpTestData() cls.log_links = { cls.case_run_1.pk: [ ['todo', 'https://localhost/todo'], ['issues', 'https://localhost/issues'], ], cls.case_run_2.pk: [ ['todo', 'https://localhost/todo'], ['issues', 'https://localhost/issues'], ['results', 'https://localhost/results'], ] } for case_run_id, links in cls.log_links.items(): case_run = TestCaseRun.objects.get(pk=case_run_id) for name, url in links: create_link(name, url, case_run) tracker = f.IssueTrackerFactory( service_url='http://localhost/', issue_report_endpoint='/enter_bug.cgi', validate_regex=r'^\d+$') cls.case_run_1.add_issue('1000', tracker) cls.case_run_1.add_issue('2000', tracker)
def test_get_issue_report_url(self): tracker = f.IssueTrackerFactory(service_url='http://localhost/', issue_report_endpoint='/enter_bug.cgi', tracker_product=self.tracker_product) s = IssueTrackerService(tracker) url = s.make_issue_report_url(self.case_run_1) self.assertEqual('http://localhost/enter_bug.cgi', url)
def test_invalid_regex_for_validating_issue_id(self): tracker = f.IssueTrackerFactory( tracker_product=self.tracker_product, issues_display_url_fmt='http://localhost/{issue_keys}', validate_regex='[0-9}+') self.assertValidationError('validate_regex', 'cannot be compiled', tracker.full_clean)
def create_bz_tracker(cls): """Helper function to create a Bugzilla issue tracker""" return f.IssueTrackerFactory( name='bz', service_url='http://bugs.example.com/', issue_report_endpoint='/enter_bug.cgi', issue_url_fmt='http://bugs.example.com/?id={issue_key}', issues_display_url_fmt='http://bugs.example.com/?bug_id={issue_keys}', validate_regex=r'^\d+$')
def create_jira_tracker(cls): """Helper function to create a Bugzilla issue tracker""" return f.IssueTrackerFactory( name='jira', service_url='http://jira.example.com/', issue_report_endpoint='/enter_bug.cgi', issue_url_fmt='http://jira.example.com/browse/{issue_key}', issues_display_url_fmt='http://jira.example.com/?jql=issuekey in ({issue_keys})', validate_regex=r'^[A-Z]+-\d+$')
def test_get_user_pwd_credential_from_secret_file(self): issue_tracker = f.IssueTrackerFactory( credential_type=CredentialTypes.UserPwd.name) f.UserPwdCredentialFactory(secret_file=self.user_pwd_secret_file, issue_tracker=issue_tracker) self.assertEqual({ 'username': '******', 'password': '******' }, issue_tracker.credential)
def test_get_user_pwd_credential_from_database(self): issue_tracker = f.IssueTrackerFactory( credential_type=CredentialTypes.UserPwd.name) f.UserPwdCredentialFactory(username='******', password='******', issue_tracker=issue_tracker) self.assertEqual({ 'username': '******', 'password': '******' }, issue_tracker.credential)
def test_member_name_does_not_exist_in_imported_module(self): tracker = f.IssueTrackerFactory( tracker_product=self.tracker_product, class_path='tracker.klass', issues_display_url_fmt='http://localhost/{issue_keys}') with patch('importlib.import_module') as import_module: # A magic mock to fail function hasattr to find out attribute name klass import_module.return_value = MagicMock(spec=object()) self.assertValidationError( 'class_path', 'Module tracker does not have class klass', tracker.full_clean)
def setUpTestData(cls): super().setUpTestData() cls.build = f.TestBuildFactory(product=cls.product) cls.test_run = f.TestRunFactory(product_version=cls.version, plan=cls.plan, manager=cls.tester, default_tester=cls.tester) cls.case_run = f.TestCaseRunFactory(assignee=cls.tester, tested_by=cls.tester, case=cls.case, run=cls.test_run, build=cls.build) cls.bz_tracker = f.IssueTrackerFactory(name='TestBZ')
def setUpTestData(cls): cls.admin = f.UserFactory() cls.admin_request = make_http_request(user=cls.admin, user_perm='issuetracker.add_issue') cls.case_run = f.TestCaseRunFactory() cls.bz_tracker = f.IssueTrackerFactory(name='MyBZ') testcaserun.attach_issue(cls.admin_request, { 'case_run': [cls.case_run.pk], 'issue_key': '67890', 'tracker': cls.bz_tracker.pk, 'summary': 'Testing TCMS', 'description': 'Just foo and bar', })
def setUpTestData(cls): cls.admin = f.UserFactory( username='******', email='*****@*****.**') cls.staff = f.UserFactory( username='******', email='*****@*****.**') cls.admin_request = make_http_request(user=cls.admin, user_perm='issuetracker.add_issue') cls.staff_request = make_http_request(user=cls.staff) cls.case_run = f.TestCaseRunFactory() cls.tracker_product = f.IssueTrackerProductFactory(name='MyBugzilla') cls.tracker = f.IssueTrackerFactory( service_url='http://localhost/', issue_report_endpoint='/enter_bug.cgi', tracker_product=cls.tracker_product)
def test_subclass_could_provide_extra_issue_report_url_args(self): class CoolService(IssueTrackerService): def get_extra_issue_report_url_args(self, case_run): return {'body': 'content'} fake_tracker = f.IssueTrackerFactory( service_url='http://localhost/', tracker_product=self.tracker_product, issue_report_endpoint='/new_issue', issue_report_params='subject: hello') service = CoolService(fake_tracker) url = service.make_issue_report_url(self.case_run_1) expected_url = 'http://localhost/new_issue?subject=hello&body=content' self.assert_url(expected_url, url)
def test_extra_arg_is_overwritten_by_predefined_service_supported_arg( self): class CoolService(IssueTrackerService): def get_extra_issue_report_url_args(self, case_run): return {'body': 'content'} fake_tracker = f.IssueTrackerFactory( service_url='http://localhost/', tracker_product=self.tracker_product, issue_report_endpoint='/new_issue', # body listed here will overwrite that body above issue_report_params='subject: hello\nbody: write content here') service = CoolService(fake_tracker) url = service.make_issue_report_url(self.case_run_1) expected_url = 'http://localhost/new_issue?subject=hello&body=write%20content%20here' self.assert_url(expected_url, url)
def setUpTestData(cls): cls.admin = f.UserFactory( username='******', email='*****@*****.**') cls.admin_request = make_http_request(user=cls.admin, user_perm='issuetracker.add_issue') cls.case_run = f.TestCaseRunFactory() cls.bz_tracker = f.IssueTrackerFactory(name='MyBugzilla') f.ProductIssueTrackerRelationshipFactory( product=cls.case_run.run.plan.product, issue_tracker=cls.bz_tracker, ) testcaserun.attach_issue(cls.admin_request, { 'case_run': [cls.case_run.pk], 'issue_key': '67890', 'tracker': cls.bz_tracker.pk, 'summary': 'Testing TCMS', 'description': 'Just foo and bar', })
def setUpTestData(cls): super().setUpTestData() cls.cp_db = f.ComponentFactory(name='db') cls.cp_docs = f.ComponentFactory(name='docs') f.TestCaseComponentFactory(case=cls.case_1, component=cls.cp_db) f.TestCaseComponentFactory(case=cls.case_1, component=cls.cp_docs) cls.tracker = f.IssueTrackerProductFactory(name='myissuetracker') cls.issue_tracker_bz = f.IssueTrackerFactory( service_url='http://bugs.example.com', tracker_product=cls.tracker, issue_report_endpoint='/enter_bug.cgi', issue_report_params='product:\ncomponent:\n', issue_report_templ='content:') PITRF = f.ProductIssueTrackerRelationshipFactory cls.rel_bz_product = PITRF(product=cls.product, issue_tracker=cls.issue_tracker_bz)
def test_use_service_supported_args(self): """ Ensure supported args listed in issue_report_params are filled with correct value. """ class CoolService(IssueTrackerService): def get_stock_issue_report_args(self, case_run): return { 'case_summary': 'test case 1', 'verbose': True, } fake_tracker = f.IssueTrackerFactory( service_url='http://localhost/', tracker_product=self.tracker_product, issue_report_endpoint='/new_issue', # case_summary should be in the final URL with supported value. issue_report_params='subject: hello\ncase_summary:') service = CoolService(fake_tracker) url = service.make_issue_report_url(self.case_run_1) expected_url = 'http://localhost/new_issue?subject=hello&case_summary=test%20case%201' self.assert_url(expected_url, url)
def test_get_token_credential_from_secret_file(self): issue_tracker = f.IssueTrackerFactory( credential_type=CredentialTypes.Token.name) f.TokenCredentialFactory(secret_file=self.token_secret_file, issue_tracker=issue_tracker) self.assertEqual({'token': 'abcde'}, issue_tracker.credential)
def setUpTestData(cls): super().setUpTestData() cls.issue_tracker = f.IssueTrackerFactory() cls.issue_tracker_1 = f.IssueTrackerFactory()
def test_get_token_credential_from_database(self): issue_tracker = f.IssueTrackerFactory( credential_type=CredentialTypes.Token.name) f.TokenCredentialFactory(token='234wer', issue_tracker=issue_tracker) self.assertEqual({'token': '234wer'}, issue_tracker.credential)
def test_user_pwd_credential_not_set(self): issue_tracker = f.IssueTrackerFactory( credential_type=CredentialTypes.UserPwd.name) self.assert_property_credential(issue_tracker)
def test_token_credential_not_set(self): issue_tracker = f.IssueTrackerFactory( credential_type=CredentialTypes.Token.name) self.assert_property_credential(issue_tracker)
def setUpTestData(cls): cls.issue_tracker_1 = f.IssueTrackerFactory() cls.issue_tracker_2 = f.IssueTrackerFactory()
def test_get_noneed_credential(self): issue_tracker = f.IssueTrackerFactory( credential_type=CredentialTypes.NoNeed.name) self.assertEqual({}, issue_tracker.credential)