예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
 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)
예제 #5
0
    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)
예제 #6
0
 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)
예제 #7
0
    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)
예제 #8
0
 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+$')
예제 #9
0
 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+$')
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
    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)
예제 #13
0
 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')
예제 #14
0
    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',
        })
예제 #15
0
    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)
예제 #16
0
    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)
예제 #17
0
    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)
예제 #18
0
    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',
        })
예제 #19
0
    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)
예제 #20
0
    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)
예제 #21
0
 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)
예제 #22
0
 def setUpTestData(cls):
     super().setUpTestData()
     cls.issue_tracker = f.IssueTrackerFactory()
     cls.issue_tracker_1 = f.IssueTrackerFactory()
예제 #23
0
 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)
예제 #24
0
 def test_user_pwd_credential_not_set(self):
     issue_tracker = f.IssueTrackerFactory(
         credential_type=CredentialTypes.UserPwd.name)
     self.assert_property_credential(issue_tracker)
예제 #25
0
 def test_token_credential_not_set(self):
     issue_tracker = f.IssueTrackerFactory(
         credential_type=CredentialTypes.Token.name)
     self.assert_property_credential(issue_tracker)
예제 #26
0
 def setUpTestData(cls):
     cls.issue_tracker_1 = f.IssueTrackerFactory()
     cls.issue_tracker_2 = f.IssueTrackerFactory()
예제 #27
0
 def test_get_noneed_credential(self):
     issue_tracker = f.IssueTrackerFactory(
         credential_type=CredentialTypes.NoNeed.name)
     self.assertEqual({}, issue_tracker.credential)