diff options
author | Benjamin Campomenosi <109955405+benjamin-campomenosi-sonarsource@users.noreply.github.com> | 2023-06-28 11:12:04 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2023-06-28 20:03:01 +0000 |
commit | a6088983a2146ab1ef8bc1f942127ec1b203309e (patch) | |
tree | 67bd05506ae08b16d2488774a24d3c538b74e658 /server/sonar-ce-task-projectanalysis | |
parent | cb1d5a94c220a335f43b7eda501f31ab723c9a0b (diff) | |
download | sonarqube-a6088983a2146ab1ef8bc1f942127ec1b203309e.tar.gz sonarqube-a6088983a2146ab1ef8bc1f942127ec1b203309e.zip |
SONAR-19256 refactor project links to use entity
Diffstat (limited to 'server/sonar-ce-task-projectanalysis')
3 files changed, 48 insertions, 58 deletions
diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStepIT.java index 5f35be87610..c0469bda4b8 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStepIT.java @@ -19,6 +19,7 @@ */ package org.sonar.ce.task.projectanalysis.step; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockito.Mockito; @@ -37,10 +38,11 @@ import org.sonar.core.util.UuidFactory; import org.sonar.core.util.UuidFactoryFast; import org.sonar.db.DbClient; import org.sonar.db.DbTester; -import org.sonar.db.component.ComponentDto; +import org.sonar.db.component.ProjectData; import org.sonar.db.component.ProjectLinkDto; import org.sonar.scanner.protocol.output.ScannerReport; import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType; +import org.sonar.server.project.Project; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -64,6 +66,8 @@ public class PersistProjectLinksStepIT extends BaseStepTest { @Rule public BatchReportReaderRule reportReader = new BatchReportReaderRule(); + private ProjectData project; + private PersistProjectLinksStep underTest = new PersistProjectLinksStep(analysisMetadataHolder, db.getDbClient(), treeRootHolder, reportReader, UuidFactoryFast.getInstance()); @Override @@ -71,6 +75,12 @@ public class PersistProjectLinksStepIT extends BaseStepTest { return underTest; } + @Before + public void setup(){ + this.project = db.components().insertPrivateProject(); + analysisMetadataHolder.setProject(Project.fromProjectDtoWithTags(project.getProjectDto())); + } + @Test public void no_effect_if_branch_is_not_main() { DbClient dbClient = mock(DbClient.class); @@ -88,8 +98,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest { @Test public void add_links_on_project() { mockBranch(true); - treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build()); - + treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build()); // project reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(1) @@ -103,7 +112,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest { underTest.execute(new TestComputationStepContext()); - assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), "ABCD")) + assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), project.projectUuid())) .extracting(ProjectLinkDto::getType, ProjectLinkDto::getHref, ProjectLinkDto::getName) .containsExactlyInAnyOrder( tuple("homepage", "http://www.sonarqube.org", null), @@ -115,10 +124,9 @@ public class PersistProjectLinksStepIT extends BaseStepTest { @Test public void nothing_to_do_when_link_already_exists() { mockBranch(true); - ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD")).getMainBranchComponent(); - db.componentLinks().insertProvidedLink(project, l -> l.setType("homepage").setName("Home").setHref("http://www.sonarqube.org")); + db.projectLinks().insertProvidedLink(project.getProjectDto(), l -> l.setType("homepage").setName("Home").setHref("http://www.sonarqube.org")); - treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build()); + treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build()); reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(1) @@ -128,7 +136,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest { underTest.execute(new TestComputationStepContext()); - assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), "ABCD")) + assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), project.projectUuid())) .extracting(ProjectLinkDto::getType, ProjectLinkDto::getHref) .containsExactlyInAnyOrder(tuple("homepage", "http://www.sonarqube.org")); } @@ -136,7 +144,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest { @Test public void do_not_add_links_on_module() { mockBranch(true); - treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build()); + treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build()); reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(1) .setType(ComponentType.PROJECT) @@ -156,7 +164,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest { @Test public void do_not_add_links_on_file() { mockBranch(true); - treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").addChildren( + treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).addChildren( ReportComponent.builder(Component.Type.FILE, 2).setUuid("BCDE").build()) .build()); @@ -179,10 +187,8 @@ public class PersistProjectLinksStepIT extends BaseStepTest { @Test public void update_link() { mockBranch(true); - ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD")).getMainBranchComponent(); - 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()); + analysisMetadataHolder.setProject(Project.fromProjectDtoWithTags(project.getProjectDto())); + treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build()); reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(1) @@ -192,7 +198,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest { underTest.execute(new TestComputationStepContext()); - assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), "ABCD")) + assertThat(db.getDbClient().projectLinkDao().selectByProjectUuid(db.getSession(), project.getProjectDto().getUuid())) .extracting(ProjectLinkDto::getType, ProjectLinkDto::getHref) .containsExactlyInAnyOrder(tuple("homepage", "http://www.sonarqube.org")); } @@ -200,10 +206,9 @@ public class PersistProjectLinksStepIT extends BaseStepTest { @Test public void delete_link() { mockBranch(true); - ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD")).getMainBranchComponent(); - db.componentLinks().insertProvidedLink(project, l -> l.setType("homepage").setName("Home").setHref("http://www.sonar.org")); + db.projectLinks().insertProvidedLink(project.getProjectDto(), l -> l.setType("homepage").setName("Home").setHref("http://www.sonar.org")); - treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build()); + treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build()); reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(1) @@ -218,10 +223,9 @@ public class PersistProjectLinksStepIT extends BaseStepTest { @Test public void not_delete_custom_link() { mockBranch(true); - ComponentDto project = db.components().insertPrivateProject(p -> p.setUuid("ABCD")).getMainBranchComponent(); - db.componentLinks().insertCustomLink(project); + db.projectLinks().insertCustomLink(project.getProjectDto()); - treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").build()); + treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build()); reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(1) @@ -236,7 +240,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest { @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()); + treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid(project.getMainBranchComponent().uuid()).build()); reportReader.putComponent(ScannerReport.Component.newBuilder() .setRef(1) @@ -247,7 +251,7 @@ public class PersistProjectLinksStepIT extends BaseStepTest { assertThatThrownBy(() -> underTest.execute(new TestComputationStepContext())) .isInstanceOf(IllegalArgumentException.class) - .hasMessage("Link of type 'homepage' has already been declared on component 'ABCD'"); + .hasMessage("Link of type 'homepage' has already been declared on component '%s'".formatted(project.projectUuid())); } private void mockBranch(boolean isMain) { diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportLinksStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportLinksStepIT.java index 117e24e288b..693621a22ff 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportLinksStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportLinksStepIT.java @@ -24,14 +24,11 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.slf4j.event.Level; -import org.sonar.api.resources.Qualifiers; -import org.sonar.api.resources.Scopes; import org.sonar.api.testfixtures.log.LogTester; import org.sonar.api.utils.System2; -import org.sonar.ce.task.projectexport.component.ComponentRepository; import org.sonar.ce.task.step.TestComputationStepContext; import org.sonar.db.DbTester; -import org.sonar.db.component.ComponentDto; +import org.sonar.db.component.ProjectData; import org.sonar.db.component.ProjectLinkDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.project.ProjectExportMapper; @@ -41,40 +38,29 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.groups.Tuple.tuple; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.sonar.db.component.ComponentDto.UUID_PATH_OF_ROOT; public class ExportLinksStepIT { private static final String PROJECT_UUID = "project_uuid"; - private static final ComponentDto PROJECT = new ComponentDto() - // no id yet - .setScope(Scopes.PROJECT) - .setQualifier(Qualifiers.PROJECT) - .setKey("the_project") - .setName("The Project") - .setDescription("The project description") - .setEnabled(true) - .setUuid(PROJECT_UUID) - .setUuidPath(UUID_PATH_OF_ROOT) - .setBranchUuid(PROJECT_UUID); + + private ProjectDto projectDto; @Rule public DbTester db = DbTester.createWithExtensionMappers(System2.INSTANCE, true, ProjectExportMapper.class); - @Rule public LogTester logTester = new LogTester(); private final FakeDumpWriter dumpWriter = new FakeDumpWriter(); private final ProjectHolder projectHolder = mock(ProjectHolder.class); private final ExportLinksStep underTest = new ExportLinksStep(db.getDbClient(), projectHolder, dumpWriter); - private ProjectDto project; @Before public void setUp() { logTester.setLevel(Level.DEBUG); - project = db.components().insertPublicProject(PROJECT).getProjectDto(); - when(projectHolder.projectDto()).thenReturn(project); + ProjectData project = db.components().insertPublicProject(PROJECT_UUID); + this.projectDto = project.getProjectDto(); + when(projectHolder.projectDto()).thenReturn(projectDto); } @Test @@ -87,9 +73,9 @@ public class ExportLinksStepIT { @Test public void export_links() { - ProjectLinkDto link1 = db.componentLinks().insertCustomLink(project); - ProjectLinkDto link2 = db.componentLinks().insertProvidedLink(project); - db.componentLinks().insertCustomLink(db.components().insertPrivateProject().getProjectDto()); + ProjectLinkDto link1 = db.projectLinks().insertCustomLink(projectDto); + ProjectLinkDto link2 = db.projectLinks().insertProvidedLink(projectDto); + db.projectLinks().insertCustomLink(db.components().insertPrivateProject().getProjectDto()); underTest.execute(new TestComputationStepContext()); @@ -103,10 +89,10 @@ public class ExportLinksStepIT { @Test public void throws_ISE_if_error() { - db.componentLinks().insertCustomLink(project); - db.componentLinks().insertProvidedLink(project); - db.componentLinks().insertProvidedLink(project); - db.componentLinks().insertCustomLink(db.components().insertPrivateProject().getProjectDto()); + db.projectLinks().insertCustomLink(projectDto); + db.projectLinks().insertProvidedLink(projectDto); + db.projectLinks().insertProvidedLink(projectDto); + db.projectLinks().insertCustomLink(db.components().insertPrivateProject().getProjectDto()); dumpWriter.failIfMoreThan(2, DumpElement.LINKS); @@ -117,7 +103,7 @@ public class ExportLinksStepIT { @Test public void test_all_fields() { - ProjectLinkDto link = db.componentLinks().insertCustomLink(project, l -> l.setName("name").setHref("href").setType("type")); + ProjectLinkDto link = db.projectLinks().insertCustomLink(projectDto, l -> l.setName("name").setHref("href").setType("type")); underTest.execute(new TestComputationStepContext()); diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStep.java index 9b9d055f0f1..a0f9c71c3cb 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistProjectLinksStep.java @@ -67,20 +67,20 @@ public class PersistProjectLinksStep implements ComputationStep { } try (DbSession session = dbClient.openSession(false)) { - Component project = treeRootHolder.getRoot(); - ScannerReport.Component batchComponent = reportReader.readComponent(project.getReportAttributes().getRef()); - List<ProjectLinkDto> previousLinks = dbClient.projectLinkDao().selectByProjectUuid(session, project.getUuid()); - mergeLinks(session, project.getUuid(), batchComponent.getLinkList(), previousLinks); + Component rootComponent = treeRootHolder.getRoot(); + ScannerReport.Component batchComponent = reportReader.readComponent(rootComponent.getReportAttributes().getRef()); + List<ProjectLinkDto> previousLinks = dbClient.projectLinkDao().selectByProjectUuid(session, analysisMetadataHolder.getProject().getUuid()); + mergeLinks(session, analysisMetadataHolder.getProject().getUuid(), batchComponent.getLinkList(), previousLinks); session.commit(); } } - private void mergeLinks(DbSession session, String componentUuid, List<ScannerReport.ComponentLink> links, List<ProjectLinkDto> previousLinks) { + private void mergeLinks(DbSession session, String projectUuid, List<ScannerReport.ComponentLink> links, List<ProjectLinkDto> previousLinks) { Set<String> linkType = new HashSet<>(); links.forEach( link -> { String type = convertType(link.getType()); - checkArgument(!linkType.contains(type), "Link of type '%s' has already been declared on component '%s'", type, componentUuid); + checkArgument(!linkType.contains(type), "Link of type '%s' has already been declared on component '%s'", type, projectUuid); linkType.add(type); Optional<ProjectLinkDto> previousLink = previousLinks.stream() @@ -93,7 +93,7 @@ public class PersistProjectLinksStep implements ComputationStep { dbClient.projectLinkDao().insert(session, new ProjectLinkDto() .setUuid(uuidFactory.create()) - .setProjectUuid(componentUuid) + .setProjectUuid(projectUuid) .setType(type) .setHref(link.getHref())); } |