@Test public void aggregate_new_characteristic_measures_of_children() { periodsHolder.setPeriods(PERIOD); DefaultIssue codeSmellIssue = newCodeSmellIssue(10); when(calculator.calculate(same(codeSmellIssue), anyList(), same(PERIOD))).thenReturn(4L); DefaultIssue bugIssue = newBugIssue(8); when(calculator.calculate(same(bugIssue), anyList(), same(PERIOD))).thenReturn(3L); DefaultIssue vulnerabilityIssue = newVulnerabilityIssue(12); when(calculator.calculate(same(vulnerabilityIssue), anyList(), same(PERIOD))).thenReturn(6L); DefaultIssue codeSmellProjectIssue = newCodeSmellIssue(30); when(calculator.calculate(same(codeSmellProjectIssue), anyList(), same(PERIOD))).thenReturn(1L); DefaultIssue bugProjectIssue = newBugIssue(28); when(calculator.calculate(same(bugProjectIssue), anyList(), same(PERIOD))).thenReturn(2L); DefaultIssue vulnerabilityProjectIssue = newVulnerabilityIssue(32); when(calculator.calculate(same(vulnerabilityProjectIssue), anyList(), same(PERIOD))) .thenReturn(4L); underTest.beforeComponent(FILE); underTest.onIssue(FILE, codeSmellIssue); underTest.onIssue(FILE, bugIssue); underTest.onIssue(FILE, vulnerabilityIssue); underTest.afterComponent(FILE); underTest.beforeComponent(PROJECT); underTest.onIssue(PROJECT, codeSmellProjectIssue); underTest.onIssue(PROJECT, bugProjectIssue); underTest.onIssue(PROJECT, vulnerabilityProjectIssue); underTest.afterComponent(PROJECT); assertVariation(PROJECT, NEW_TECHNICAL_DEBT_KEY, 4 + 1); assertVariation(PROJECT, NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, 3 + 2); assertVariation(PROJECT, NEW_SECURITY_REMEDIATION_EFFORT_KEY, 6 + 4); }
@Test public void no_measures_if_no_periods() { periodsHolder.setPeriods(); DefaultIssue unresolved = new DefaultIssue().setEffort(Duration.create(10)); verifyZeroInteractions(calculator); underTest.beforeComponent(FILE); underTest.onIssue(FILE, unresolved); underTest.afterComponent(FILE); assertThat(measureRepository.getRawMeasures(FILE)).isEmpty(); }
@Test public void sum_new_maintainability_effort_of_issues() { periodsHolder.setPeriods(PERIOD); DefaultIssue unresolved1 = newCodeSmellIssue(10L); DefaultIssue unresolved2 = newCodeSmellIssue(30L); DefaultIssue unresolvedWithoutDebt = newCodeSmellIssueWithoutEffort(); DefaultIssue resolved = newCodeSmellIssue(50L).setResolution(RESOLUTION_FIXED); when(calculator.calculate(same(unresolved1), anyList(), same(PERIOD))).thenReturn(4L); when(calculator.calculate(same(unresolved2), anyList(), same(PERIOD))).thenReturn(3L); verifyNoMoreInteractions(calculator); underTest.beforeComponent(FILE); underTest.onIssue(FILE, unresolved1); underTest.onIssue(FILE, unresolved2); underTest.onIssue(FILE, unresolvedWithoutDebt); underTest.onIssue(FILE, resolved); underTest.afterComponent(FILE); assertVariation(FILE, NEW_TECHNICAL_DEBT_KEY, 3 + 4); }
@Test public void new_security_effort_is_only_computed_using_vulnerability_issues() { periodsHolder.setPeriods(PERIOD); DefaultIssue vulnerabilityIssue = newVulnerabilityIssue(12); // Issues of type CODE SMELL and BUG should be ignored DefaultIssue codeSmellIssue = newCodeSmellIssue(10); DefaultIssue bugIssue = newBugIssue(15); when(calculator.calculate(same(vulnerabilityIssue), anyList(), same(PERIOD))).thenReturn(5L); when(calculator.calculate(same(codeSmellIssue), anyList(), same(PERIOD))).thenReturn(4L); when(calculator.calculate(same(bugIssue), anyList(), same(PERIOD))).thenReturn(3L); underTest.beforeComponent(FILE); underTest.onIssue(FILE, codeSmellIssue); underTest.onIssue(FILE, bugIssue); underTest.onIssue(FILE, vulnerabilityIssue); underTest.afterComponent(FILE); // Only effort of VULNERABILITY issue is used assertVariation(FILE, NEW_SECURITY_REMEDIATION_EFFORT_KEY, 5); }
@Test public void new_maintainability_effort_is_only_computed_using_code_smell_issues() { periodsHolder.setPeriods(PERIOD); DefaultIssue codeSmellIssue = newCodeSmellIssue(10); // Issues of type BUG and VULNERABILITY should be ignored DefaultIssue bugIssue = newBugIssue(15); DefaultIssue vulnerabilityIssue = newVulnerabilityIssue(12); when(calculator.calculate(same(codeSmellIssue), anyList(), same(PERIOD))).thenReturn(4L); when(calculator.calculate(same(bugIssue), anyList(), same(PERIOD))).thenReturn(3L); when(calculator.calculate(same(vulnerabilityIssue), anyList(), same(PERIOD))).thenReturn(5L); underTest.beforeComponent(FILE); underTest.onIssue(FILE, codeSmellIssue); underTest.onIssue(FILE, bugIssue); underTest.onIssue(FILE, vulnerabilityIssue); underTest.afterComponent(FILE); // Only effort of CODE SMELL issue is used assertVariation(FILE, NEW_TECHNICAL_DEBT_KEY, 4); }