private ScannerReport.Component addComponent(int ref, String key, ScannerReport.Component.ComponentType type, @Nullable String path, Integer... children) { ScannerReport.Component.Builder builder = ScannerReport.Component.newBuilder() .setRef(ref) .setKey(key) .addAllChildRef(Arrays.asList(children)) .setType(type); if (path != null) { builder.setProjectRelativePath(path); } ScannerReport.Component component = builder.build(); when(reader.readComponent(ref)).thenReturn(component); return component; } }
@Test public void project_description_is_loaded_from_db_if_absent_from_report() { Component root = call(newBuilder() .setType(PROJECT) .build()); assertThat(root.getDescription()).isEqualTo(projectInDb.getDescription()); }
@Test public void project_name_is_loaded_from_db_if_absent_from_report() { Component root = call(newBuilder() .setType(PROJECT) .build()); assertThat(root.getName()).isEqualTo(projectInDb.getName()); }
@Test public void throw_IAE_if_lines_is_zero_in_report() { ScannerReport.Component project = newBuilder() .setType(PROJECT) .setRef(1) .addChildRef(2) .build(); scannerComponentProvider.add(newBuilder() .setRef(2) .setType(FILE) .setProjectRelativePath("src/js/Foo.js") .setLines(0)); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("File 'src/js/Foo.js' has no line"); call(project); }
private static ScannerReport.Component component(int componentRef, ComponentType componentType, String key, @Nullable String path, int... children) { ScannerReport.Component.Builder builder = ScannerReport.Component.newBuilder() .setType(componentType) .setRef(componentRef) .setStatus(FileStatus.UNAVAILABLE) .setLines(1) .setKey(key); if (path != null) { builder.setProjectRelativePath(path); } for (int child : children) { builder.addChildRef(child); } return builder.build(); }
@Test public void throw_IAE_if_lines_is_absent_from_report() { ScannerReport.Component project = newBuilder() .setType(PROJECT) .setRef(1) .addChildRef(2) .build(); scannerComponentProvider.add(newBuilder() .setRef(2) .setType(FILE) .setProjectRelativePath("src/js/Foo.js")); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("File 'src/js/Foo.js' has no line"); call(project); }
@Test public void fail_when_trying_to_add_same_link_type_multiple_times() { mockBranch(true); treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build()); reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(1) .setType(ComponentType.PROJECT) .addLink(ScannerReport.ComponentLink.newBuilder().setType(HOME).setHref("http://www.sonarqube.org").build()) .addLink(ScannerReport.ComponentLink.newBuilder().setType(HOME).setHref("http://www.sonarqube.org").build()) .build()); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Link of type 'homepage' has already been declared on component 'ABCD'"); underTest.execute(new TestComputationStepContext()); }
private ScannerReport.Component createProject() { ScannerReport.Component project = newBuilder() .setType(PROJECT) .setKey(projectInDb.getKey()) .setRef(1) .addChildRef(2) .build(); scannerComponentProvider.add(newBuilder() .setRef(2) .setType(FILE) .setProjectRelativePath("src/js/Foo.js") .setLines(1)); return project; }
@Test public void delete_link() { mockBranch(true); ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD")); db.componentLinks().insertProvidedLink(project, l -> l.setType("homepage").setName("Home").setHref("http://www.sonar.org")); treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build()); reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(1) .setType(ComponentType.PROJECT) .build()); underTest.execute(new TestComputationStepContext()); assertThat(db.countRowsOfTable("project_links")).isZero(); }
@Test public void not_delete_custom_link() { mockBranch(true); ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD")); db.componentLinks().insertCustomLink(project); treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build()); reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(1) .setType(ComponentType.PROJECT) .build()); underTest.execute(new TestComputationStepContext()); assertThat(db.countRowsOfTable("project_links")).isEqualTo(1); }
@Test public void project_scmPath_is_empty_if_scmBasePath_is_empty() { Component root = call(newBuilder() .setType(PROJECT) .build(), NO_SCM_BASE_PATH); assertThat(root.getReportAttributes().getScmPath()).isEmpty(); }
@Test public void project_description_is_loaded_from_db_if_not_on_main_branch() { String reportDescription = randomAlphabetic(5); ScannerReport.Component reportProject = newBuilder() .setType(PROJECT) .setDescription(reportDescription) .build(); Component root = newUnderTest(null, false).buildProject(reportProject, NO_SCM_BASE_PATH); assertThat(root.getDescription()).isEqualTo(projectInDb.getDescription()); }
@Test public void project_version_is_hardcoded_if_absent_from_report_and_db() { Component root = call(newBuilder() .setType(PROJECT) .build()); assertThat(root.getProjectAttributes().getVersion()).isEqualTo("not provided"); }
@Test public void project_name_is_loaded_from_report_if_present_and_on_main_branch() { String reportName = randomAlphabetic(5); ScannerReport.Component reportProject = newBuilder() .setType(PROJECT) .setName(reportName) .build(); Component root = newUnderTest(null, true).buildProject(reportProject, NO_SCM_BASE_PATH); assertThat(root.getName()).isEqualTo(reportName); }
@Test public void project_version_is_loaded_from_db_if_empty_report() { SnapshotDto baseAnalysis = new SnapshotDto().setVersion("6.5"); Component root = call(newBuilder() .setType(PROJECT) .setVersion("") .build(), baseAnalysis); assertThat(root.getProjectAttributes().getVersion()).isEqualTo("6.5"); }
@Test public void project_version_is_loaded_from_db_if_absent_from_report() { SnapshotDto baseAnalysis = new SnapshotDto().setVersion("6.5"); Component root = call(newBuilder() .setType(PROJECT) .build(), baseAnalysis); assertThat(root.getProjectAttributes().getVersion()).isEqualTo("6.5"); }
@Test public void project_name_is_loaded_from_db_if_not_on_main_branch() { String reportName = randomAlphabetic(5); ScannerReport.Component reportProject = newBuilder() .setType(PROJECT) .setName(reportName) .build(); Component root = newUnderTest(null, false).buildProject(reportProject, NO_SCM_BASE_PATH); assertThat(root.getName()).isEqualTo(projectInDb.getName()); }
@Test public void read_components() { ScannerReportWriter writer = new ScannerReportWriter(dir); ScannerReport.Component.Builder component = ScannerReport.Component.newBuilder() .setRef(1) .setProjectRelativePath("src/main/java/Foo.java"); writer.writeComponent(component.build()); assertThat(underTest.readComponent(1).getProjectRelativePath()).isEqualTo("src/main/java/Foo.java"); }
private void addFileSourceInReport(int lineCount) { reportReader.putFileSourceLines(FILE_REF, generateLines(lineCount)); reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(FILE_REF) .setLines(lineCount) .build()); }
@Test public void project_description_is_loaded_from_report_if_present_and_on_main_branch() { String reportDescription = randomAlphabetic(5); ScannerReport.Component reportProject = newBuilder() .setType(PROJECT) .setDescription(reportDescription) .build(); Component root = newUnderTest(null, true).buildProject(reportProject, NO_SCM_BASE_PATH); assertThat(root.getDescription()).isEqualTo(reportDescription); }