def __create_product(product_kwargs):
     """ Create a product according to the provided arguments. """
     art_kwargs = product_kwargs.pop("art", dict())
     if art_kwargs:
         component = domain.Product(**art_kwargs)
         product_kwargs["art"] = component
     return domain.Product(**product_kwargs)
 def test_sonar_id_empty(self):
     """ Test that the Sonar id of a product can be retrieved. """
     sonar = 'Sonar'
     project = domain.Project('organization', metric_sources={metric_source.Sonar: sonar})
     product = domain.Product(metric_source_ids={sonar: ''})
     quality_report = report.QualityReport(project)
     self.assertEqual((None, ''), quality_report.sonar_id(product))
 def setUp(self):
     sonar = FakeSonar()
     project = domain.Project(metric_sources={metric_source.Sonar: sonar})
     product = domain.Product(short_name='PR',
                              name='FakeSubject',
                              metric_source_ids={sonar: 'sonar id'})
     self._metric = metric.JavaDuplication(subject=product, project=project)
 def setUp(self):
     sonar = FakeSonar()
     subject = domain.Product(short_name='PR',
                              name='FakeSubject',
                              metric_source_ids={sonar: "sonar id"})
     project = domain.Project(metric_sources={metric_source.Sonar: sonar})
     self._metric = metric.NoSonar(subject=subject, project=project)
 def test_prefix_product(self):
     """ Test that the prefix contains the version of the products that not have been released
         (i.e. the version of the trunk). """
     report = fake_report.Report([domain.Product()])
     self.assertEqual(
         '{"Product-version": "2", "date": "2012-01-01 12:00:00", ',
         self.__formatter.prefix(report))
    def test_extra_info(self):
        """ Test that correct extra info is returned."""
        subversion = MagicMock()
        subversion.unmerged_branches.return_value = [
            metric_source.Branch("some_branch", 22,
                                 datetime.datetime(2018, 1, 1))
        ]
        subversion.branch_folder_for_branch.return_value = "http://some_branch"

        project = domain.Project(
            metric_sources={metric_source.VersionControlSystem: subversion})
        subject = domain.Product(metric_source_ids={subversion: '_'})

        expected_result = domain.ExtraInfo(
            link="Branch",
            comment="Aantal ongemergde revisies__detail-column-number",
            date_last_change="Datum laatste wijziging__detail-column-number")
        expected_result.data = \
            [{"link": {"href": "http://some_branch", "text": "some_branch"}, "comment": 22,
              "date_last_change": "01-01-2018"}]
        obj = metric.UnmergedBranches(project=project, subject=subject)

        result = obj.extra_info()

        self.assertDictEqual(expected_result.headers, result.headers)
        self.assertEqual(expected_result.data, result.data)
        self.assertEqual('Niet gemergde branches', result.title)
Example #7
0
 def setUp(self):
     with patch.object(metric_source.Sonar, 'version_number') as mock_version_number:
         mock_version_number.return_value = '6.3'
         sonar = metric_source.Sonar('unimportant')
     project = domain.Project(metric_sources={metric_source.Sonar: sonar})
     subject = domain.Product(short_name='PR', name='FakeSubject', metric_source_ids={sonar: 'sonar id'})
     self._metric = metric.ProductLOC(subject=subject, project=project)
Example #8
0
 def test_is_perfect(self):
     """ Test that the metric is perfect when the number of violations is zero. """
     sonar = FakeSonar()
     project = domain.Project(metric_sources={metric_source.Sonar: sonar})
     product = domain.Product(metric_source_ids={sonar: "sonar id"})
     violations = self.metric_class(subject=product, project=project)
     self.assertEqual('perfect', violations.status())
 def test_vcs_id_when_no_metric_source_id(self):
     """ Test that the empty VCS id is retrieved when there is no metric source id """
     vcs = 'VCS'
     project = domain.Project('organization', metric_sources={metric_source.VersionControlSystem: vcs})
     product = domain.Product(metric_source_ids={})
     quality_report = report.QualityReport(project)
     self.assertEqual((None, ''), quality_report.vcs_id(product))
 def test_vcs_id(self):
     """ Test that the VCS id can be retrieved. """
     vcs = 'VCS'
     project = domain.Project('organization', metric_sources={metric_source.VersionControlSystem: vcs})
     product = domain.Product(metric_source_ids={vcs: 'vcs_id'})
     quality_report = report.QualityReport(project)
     self.assertEqual(('VCS', 'vcs_id'), quality_report.vcs_id(product))
 def test_report_without_metric_source(self):
     """ Test the report without a metric source. """
     self.assertEqual(
         'De hoeveelheid ongemergde branches van <no name> kon niet gemeten worden omdat de bron '
         'VersionControlSystem niet is geconfigureerd.',
         metric.UnmergedBranches(subject=domain.Product(),
                                 project=domain.Project()).report())
 def test_multiple_metric_sources(self):
     """ Test that the correct metric source id is returned when there are multiple metric source instances. """
     MetricUnderTest.metric_source_class = metric_source.Birt
     project = domain.Project(metric_sources={metric_source.Birt: ['Birt1', 'Birt2']})
     product = domain.Product(metric_source_ids={'Birt2': 'birt id'})
     # pylint: disable=protected-access
     self.assertEqual('birt id', MetricUnderTest(project=project, subject=product)._metric_source_id)
     MetricUnderTest.metric_source_class = None
 def test_no_matching_metric_source(self):
     """ Test that no metric source id is returned when there is no metric source instance for the product. """
     MetricUnderTest.metric_source_class = metric_source.Birt
     project = domain.Project(metric_sources={metric_source.Birt: ['Birt1']})
     product = domain.Product(metric_source_ids={'Birt2': 'birt id'})
     # pylint: disable=protected-access
     self.assertFalse(MetricUnderTest(project=project, subject=product)._metric_source_id)
     MetricUnderTest.metric_source_class = None
 def test_product(self):
     """ Test that the report has two sections when we add a product:
         one for the product itself, and one for meta metrics. """
     project = domain.Project()
     project.add_product(
         domain.Product(short_name='FP',
                        requirements=[requirement.CodeQuality]))
     self.assertEqual(2, len(report.QualityReport(project).sections()))
 def test_comment_urls_no_ignored_branches(self):
     """ Test the comment urls when there are no ignored branches. """
     product = domain.Product(
         short_name='Product',
         metric_source_ids={self.__subversion: 'http://svn/trunk/foo/'})
     unmerged_branches = metric.UnmergedBranches(subject=product,
                                                 project=self.__project)
     self.assertEqual({}, unmerged_branches.comment_urls())
Example #16
0
 def setUp(self):  # pylint: disable=invalid-name,missing-docstring
     self.__nr_violations = 51
     self.__sonar = FakeSonar(blocker_violations=self.__nr_violations,
                              critical_violations=self.__nr_violations,
                              major_violations=self.__nr_violations)
     project = domain.Project(metric_sources={metric_source.Sonar: self.__sonar})
     self.__subject = domain.Product(short_name='PR', name='FakeSubject',
                                     metric_source_ids={self.__sonar: "sonar id"})
     self._metric = self.metric_class(subject=self.__subject, project=project)
Example #17
0
 def setUp(self):
     self.__metric_source = domain.MetricSource()
     self.__subject = domain.Product(
         name='Product',
         metric_source_ids={self.__metric_source: 'http://url'})
     self.__project = domain.Project(
         metric_sources={domain.MetricSource: self.__metric_source})
     self.__metric = MetricSourceAgeMetricUnderTest(self.__subject,
                                                    project=self.__project)
Example #18
0
 def setUp(self):
     with patch.object(metric_source.Sonar, 'version_number') as mock_version_number:
         mock_version_number.return_value = '6.3'
         self.__sonar = metric_source.Sonar('unimportant')
     project = domain.Project(
         metric_sources={metric_source.Sonar: self.__sonar, metric_source.History: metric_source.CompactHistory('')},
         metric_options={metric.TotalLOC: dict(target=1000000, low_target=2000000)},
         metric_source_ids={self.__sonar: 'dummy'})
     product1 = domain.Product(short_name='PR1', name='FakeSubject1', metric_source_ids={self.__sonar: 'sonar id1'})
     product2 = domain.Product(short_name='PR2', name='FakeSubject2', metric_source_ids={self.__sonar: 'sonar id2'})
     product_without_sonar_id = domain.Product(short_name='PW', name='ProductWithoutSonarId')
     test_product = domain.Product(short_name='TP', is_main=False, metric_source_ids={self.__sonar: 'sonar id'})
     project.add_product(product1)
     project.add_product(product2)
     # Add products that should be ignored:
     project.add_product(product_without_sonar_id)
     project.add_product(test_product)
     self.__metric = metric.TotalLOC(subject=project, project=project)
Example #19
0
 def setUp(self):
     self.__metric_source = self.metric_source_class_mock()
     project = domain.Project(
         metric_sources={self.metric_source_class: self.__metric_source})
     subject = domain.Product(
         short_name='PR',
         name='FakeSubject',
         metric_source_ids={self.__metric_source: 'id'})
     self.__metric = self.metric_class(subject=subject, project=project)
 def test_one_metric_source(self):
     """ Test that the correct metric source id is returned when there is one metric source instance. """
     MetricUnderTest.metric_source_class = metric_source.Birt
     metric_source_instance = metric_source.Birt(birt_url='http://birt')
     project = domain.Project(metric_sources={metric_source.Birt: metric_source_instance})
     product = domain.Product(metric_source_ids={metric_source_instance: 'birt id'})
     # pylint: disable=protected-access
     self.assertEqual('birt id', MetricUnderTest(project=project, subject=product)._metric_source_id)
     MetricUnderTest.metric_source_class = None
 def test_url_without_sonar_id(self):
     """ Test that the metric has a url when the product has no Sonar id configured. """
     with patch.object(metric_source.Sonar,
                       'version_number') as mock_version_number:
         mock_version_number.return_value = '6.3'
         sonar = metric_source.Sonar('http://sonar/')
     project = domain.Project(metric_sources={metric_source.Sonar: sonar})
     product = domain.Product()
     self.assertEqual(dict(), SonarMetric(product, project).url())
Example #22
0
 def setUp(self):
     jira = FakeJiraFilter()
     self.__project = domain.Project(
         metric_sources={metric_source.BugTracker: jira})
     self.__product = domain.Product(
         metric_source_ids={jira: '1234'},
         added_requirements=[requirement.TrackBugs])
     self.__metric = metric.OpenBugs(project=self.__project,
                                     subject=self.__product)
 def test_url(self):
     """ Test the url. """
     with patch.object(metric_source.Sonar,
                       'version_number') as mock_version_number:
         mock_version_number.return_value = '6.3'
         sonar = metric_source.Sonar('http://sonar/')
     project = domain.Project(metric_sources={metric_source.Sonar: sonar})
     product = domain.Product(metric_source_ids={sonar: 'sonar id'})
     self.assertEqual({sonar.metric_source_name: sonar.url()},
                      SonarMetric(product, project).url())
 def test_comment_urls_without_metric_source(self):
     """ Test the comment urls when the metric source is missing """
     subject = domain.Product(metric_options={
         metric.UnmergedBranches:
         dict(branches_to_ignore=['ignored branch'])
     })
     self.assertEqual(
         {'ignored branch': ''},
         metric.UnmergedBranches(subject=subject,
                                 project=domain.Project()).comment_urls())
 def test_comment_with_re_only(self):
     """ Test that comment for regular expression. """
     subject = domain.Product(
         metric_options={
             metric.UnmergedBranches: dict(
                 branches_to_ignore_re='feature.*')
         })
     unmerged_branches = metric.UnmergedBranches(subject=subject,
                                                 project=self.__project)
     self.assertEqual(
         "Branches die voldoen aan de reguliere expressie feature.* zijn genegeerd.",
         unmerged_branches.comment())
 def test_combined_comment(self):
     """ Test that the metric comment is combined with the branch comment. """
     subject = domain.Product(
         metric_options={
             metric.UnmergedBranches:
             dict(comment="Comment.", branches_to_include=['branch'])
         })
     unmerged_branches = metric.UnmergedBranches(subject=subject,
                                                 project=self.__project)
     self.assertEqual(
         "Comment. Alleen deze branches worden bewaakt: branch.",
         unmerged_branches.comment())
    def test_last_product_change_date(self):
        """ Test that the report can retrieve the last changed date of a product. """
        class FakeVCS(object):  # pylint: disable=too-few-public-methods
            """ Fake VCS metric source with a fixed changed date. """
            @staticmethod
            def last_changed_date(vcs_id):  # pylint: disable=unused-argument
                """ Return the date the product was last changed. """
                return datetime.datetime(2017, 1, 1)

        vcs = FakeVCS()
        project = domain.Project('organization', metric_sources={metric_source.VersionControlSystem: vcs})
        product = domain.Product(metric_source_ids={vcs: 'vcs_id'})
        quality_report = report.QualityReport(project)
        self.assertEqual(datetime.datetime(2017, 1, 1), quality_report.latest_product_change_date(product))
Example #28
0
    def test_technical_debt(self, mock_ncloc):
        """ Test that technical debt can be specified via the project. """

        project = domain.Project(
            metric_sources={metric_source.Sonar: self.__sonar, metric_source.History: MagicMock()},
            metric_source_ids={self.__sonar: "dummy"},
            metric_options={metric.TotalLOC: dict(target=100, low_target=110,
                                                  debt_target=domain.TechnicalDebtTarget(150))})
        product = domain.Product(short_name='PR', name='FakeSubject', metric_source_ids={self.__sonar: 'sonar id'})
        project.add_product(product)
        total_loc = metric.TotalLOC(subject=project, project=project)

        mock_ncloc.return_value = 111
        self.assertEqual('grey', total_loc.status())
    def test_extra_info_no_unmerged_branches(self):
        """ Test that None is returned as extra info when there are no unmerged branches."""
        subversion = MagicMock()
        subversion.unmerged_branches.return_value = {}
        subversion.branch_folder_for_branch.return_value = "unimportant"

        project = domain.Project(
            metric_sources={metric_source.VersionControlSystem: subversion})
        subject = domain.Product(metric_source_ids={subversion: '_'})

        obj = metric.UnmergedBranches(project=project, subject=subject)

        result = obj.extra_info()

        self.assertIsNone(result)
 def setUp(self):
     self.__subversion = FakeSubversion()
     self.__project = domain.Project(
         metric_sources={
             metric_source.VersionControlSystem: self.__subversion
         })
     self.__subject = domain.Product(
         name='Product',
         short_name='PR',
         metric_source_ids={self.__subversion: 'http://svn/trunk/foo/'},
         metric_options={
             metric.UnmergedBranches:
             dict(branches_to_include=['branch', 'ignored branch'],
                  branches_to_ignore=['ignored branch'],
                  branches_to_ignore_re='feature.*')
         })
     self.__metric = metric.UnmergedBranches(subject=self.__subject,
                                             project=self.__project)