/** * Returns a mutable map of the components currently persisted in database for the project, including * disabled components. */ private Map<String, ComponentDto> indexExistingDtosByUuids(DbSession session) { return dbClient.componentDao().selectAllComponentsFromProjectKey(session, treeRootHolder.getRoot().getDbKey()) .stream() .collect(Collectors.toMap(ComponentDto::uuid, Function.identity())); }
@Test public void should_fail_if_project_is_not_stored_in_database_yet() { TreeRootHolder treeRootHolder = mock(TreeRootHolder.class); Component component = mock(Component.class); DbClient dbClient = mock(DbClient.class); ComponentDao componentDao = mock(ComponentDao.class); String projectKey = randomAlphabetic(20); doReturn(component).when(treeRootHolder).getRoot(); doReturn(projectKey).when(component).getDbKey(); doReturn(componentDao).when(dbClient).componentDao(); doReturn(emptyList()).when(componentDao).selectAllComponentsFromProjectKey(any(DbSession.class), eq(projectKey)); thrown.expect(IllegalStateException.class); thrown.expectMessage("The project '" + projectKey + "' is not stored in the database, during a project analysis"); new PersistComponentsStep( dbClient, treeRootHolder, mock(MutableDbIdsRepository.class), System2.INSTANCE, mock(MutableDisabledComponentsHolder.class), mock(AnalysisMetadataHolder.class), mock(BranchPersister.class)).execute(new TestComputationStepContext()); } }
@Test public void updateKey_updates_branches_too() { ComponentDto project = db.components().insertMainBranch(); ComponentDto branch = db.components().insertProjectBranch(project); db.components().insertComponent(newFileDto(branch)); db.components().insertComponent(newFileDto(branch)); int branchComponentCount = 3; String oldProjectKey = project.getKey(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldProjectKey)).hasSize(1); String oldBranchKey = branch.getDbKey(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldBranchKey)).hasSize(branchComponentCount); String newProjectKey = "newKey"; String newBranchKey = ComponentDto.generateBranchKey(newProjectKey, branch.getBranch()); underTest.updateKey(dbSession, project.uuid(), newProjectKey); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldProjectKey)).isEmpty(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldBranchKey)).isEmpty(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, newProjectKey)).hasSize(1); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, newBranchKey)).hasSize(branchComponentCount); db.select(dbSession, "select kee from projects") .forEach(map -> map.values().forEach(k -> assertThat(k.toString()).startsWith(newProjectKey))); }
@Test public void updateKey_updates_pull_requests_too() { ComponentDto project = db.components().insertMainBranch(); ComponentDto pullRequest = db.components().insertProjectBranch(project, b -> b.setBranchType(PULL_REQUEST)); db.components().insertComponent(newFileDto(pullRequest)); db.components().insertComponent(newFileDto(pullRequest)); int branchComponentCount = 3; String oldProjectKey = project.getKey(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldProjectKey)).hasSize(1); String oldBranchKey = pullRequest.getDbKey(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldBranchKey)).hasSize(branchComponentCount); String newProjectKey = "newKey"; String newBranchKey = ComponentDto.generatePullRequestKey(newProjectKey, pullRequest.getPullRequest()); underTest.updateKey(dbSession, project.uuid(), newProjectKey); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldProjectKey)).isEmpty(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldBranchKey)).isEmpty(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, newProjectKey)).hasSize(1); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, newBranchKey)).hasSize(branchComponentCount); db.select(dbSession, "select kee from projects") .forEach(map -> map.values().forEach(k -> assertThat(k.toString()).startsWith(newProjectKey))); }
@Test public void bulk_updateKey_on_branch_containing_slash() { ComponentDto project = db.components().insertMainBranch(); ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey("branch/with/slash")); String newKey = "newKey"; underTest.bulkUpdateKey(dbSession, project.uuid(), project.getKey(), newKey, t -> true); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, newKey)).hasSize(1); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, ComponentDto.generateBranchKey(newKey, branch.getBranch()))).hasSize(1); }
assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldProjectKey)).hasSize(1); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldBranchKey)).hasSize(branchComponentCount); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldProjectKey)).isEmpty(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldBranchKey)).isEmpty(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, newProjectKey)).hasSize(1); String newBranchKey = ComponentDto.generateBranchKey(newProjectKey, branch.getBranch()); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, newBranchKey)).hasSize(branchComponentCount); db.select(dbSession, "select kee from projects") .forEach(map -> map.values().forEach(k -> assertThat(k.toString()).startsWith(newProjectKey)));
assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldProjectKey)).hasSize(1); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldPullRequestKey)).hasSize(branchComponentCount); Set<RekeyedResource> rekeyedResources = underTest.bulkUpdateKey(dbSession, project.uuid(), oldProjectKey, newProjectKey, t -> true); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldProjectKey)).isEmpty(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, oldPullRequestKey)).isEmpty(); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, newProjectKey)).hasSize(1); assertThat(dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, newPullRequestKey)).hasSize(branchComponentCount); db.select(dbSession, "select kee from projects") .forEach(map -> map.values().forEach(k -> assertThat(k.toString()).startsWith(newProjectKey)));
@Test public void bulk_update_key_updates_disabled_components() { ComponentDto project = db.components().insertComponent(newPrivateProjectDto(db.getDefaultOrganization(), "A").setDbKey("my_project")); db.components().insertComponent(newModuleDto(project).setDbKey("my_project:module")); db.components().insertComponent(newModuleDto(project).setDbKey("my_project:inactive_module").setEnabled(false)); Set<RekeyedResource> rekeyedResources = underTest.bulkUpdateKey(dbSession, "A", "my_", "your_", doNotReturnAnyRekeyedResource()); List<ComponentDto> result = dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, "your_project"); assertThat(result) .hasSize(3) .extracting(ComponentDto::getDbKey) .containsOnlyOnce("your_project", "your_project:module", "your_project:inactive_module"); }
@Test public void updateKey_updates_disabled_components() { OrganizationDto organizationDto = db.organizations().insert(); ComponentDto project = db.components().insertComponent(newPrivateProjectDto(organizationDto, "A").setDbKey("my_project")); ComponentDto directory = db.components().insertComponent(newDirectory(project, "/directory").setDbKey("my_project:directory")); db.components().insertComponent(newFileDto(project, directory).setDbKey("my_project:directory/file")); ComponentDto inactiveDirectory = db.components().insertComponent(newDirectory(project, "/inactive_directory").setDbKey("my_project:inactive_directory").setEnabled(false)); db.components().insertComponent(newFileDto(project, inactiveDirectory).setDbKey("my_project:inactive_directory/file").setEnabled(false)); underTest.updateKey(dbSession, "A", "your_project"); dbSession.commit(); List<ComponentDto> result = dbClient.componentDao().selectAllComponentsFromProjectKey(dbSession, "your_project"); assertThat(result) .hasSize(5) .extracting(ComponentDto::getDbKey) .containsOnlyOnce("your_project", "your_project:directory", "your_project:directory/file", "your_project:inactive_directory", "your_project:inactive_directory/file"); }
@Test public void select_all_components_from_project() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto removedProject = db.components().insertPrivateProject(p -> p.setEnabled(false)); ComponentDto module = db.components().insertComponent(newModuleDto(project)); ComponentDto removedModule = db.components().insertComponent(newModuleDto(project).setEnabled(false)); ComponentDto subModule = db.components().insertComponent(newModuleDto(module)); ComponentDto removedSubModule = db.components().insertComponent(newModuleDto(module).setEnabled(false)); ComponentDto directory = db.components().insertComponent(newDirectory(subModule, "src")); ComponentDto removedDirectory = db.components().insertComponent(newDirectory(subModule, "src2").setEnabled(false)); ComponentDto file = db.components().insertComponent(newFileDto(subModule, directory)); ComponentDto removedFile = db.components().insertComponent(newFileDto(subModule, directory).setEnabled(false)); // Removed components are included assertThat(underTest.selectAllComponentsFromProjectKey(dbSession, project.getDbKey())) .extracting(ComponentDto::getDbKey) .containsExactlyInAnyOrder(project.getDbKey(), module.getDbKey(), removedModule.getDbKey(), subModule.getDbKey(), removedSubModule.getDbKey(), directory.getDbKey(), removedDirectory.getDbKey(), file.getDbKey(), removedFile.getDbKey()); assertThat(underTest.selectAllComponentsFromProjectKey(dbSession, "UNKNOWN")).isEmpty(); }
/** * Returns a mutable map of the components currently persisted in database for the project, including * disabled components. */ private Map<String, ComponentDto> indexExistingDtosByKey(DbSession session) { return dbClient.componentDao().selectAllComponentsFromProjectKey(session, treeRootHolder.getRoot().getKey()) .stream() .collect(Collectors.toMap(ComponentDto::getDbKey, Function.identity())); }