@Test public void updateKey_changes_the_key_of_tree_of_components() { db.prepareDbUnit(getClass(), "shared.xml"); underTest.updateKey(dbSession, "B", "struts:core"); dbSession.commit(); db.assertDbUnit(getClass(), "shouldUpdateKey-result.xml", "projects"); }
@Test public void updateKey_throws_IAE_if_component_with_specified_key_does_not_exist() { db.prepareDbUnit(getClass(), "shared.xml"); thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Impossible to update key: a component with key \"org.struts:struts-ui\" already exists."); underTest.updateKey(dbSession, "B", "org.struts:struts-ui"); }
public void updateKey(DbSession dbSession, ComponentDto projectOrModule, String newKey) { userSession.checkComponentPermission(UserRole.ADMIN, projectOrModule); checkIsProjectOrModule(projectOrModule); checkProjectOrModuleKeyFormat(newKey); dbClient.componentKeyUpdaterDao().updateKey(dbSession, projectOrModule.uuid(), newKey); projectIndexers.commitAndIndex(dbSession, singletonList(projectOrModule), ProjectIndexer.Cause.PROJECT_KEY_UPDATE); if (isMainProject(projectOrModule)) { Project newProject = new Project(projectOrModule.uuid(), newKey, projectOrModule.name(), projectOrModule.description(), projectOrModule.getTags()); projectLifeCycleListeners.onProjectsRekeyed(singleton(new RekeyedProject(newProject, projectOrModule.getDbKey()))); } }
@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 updateKey_throws_IAE_when_sub_component_key_is_too_long() { OrganizationDto organizationDto = db.organizations().insert(); ComponentDto project = newPrivateProjectDto(organizationDto, "project-uuid").setDbKey("old-project-key"); db.components().insertComponent(project); db.components().insertComponent(newFileDto(project, null).setDbKey("old-project-key:file")); String newLongProjectKey = Strings.repeat("a", 400); thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Component key length (405) is longer than the maximum authorized (400). '" + newLongProjectKey + ":file' was provided."); underTest.updateKey(dbSession, project.uuid(), newLongProjectKey); }
@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"); }
public void updateKey(DbSession dbSession, ComponentDto projectOrModule, String newKey) { userSession.checkComponentPermission(UserRole.ADMIN, projectOrModule); checkIsProjectOrModule(projectOrModule); checkProjectOrModuleKeyFormat(newKey); dbClient.componentKeyUpdaterDao().updateKey(dbSession, projectOrModule.uuid(), newKey); projectIndexers.commitAndIndex(dbSession, singletonList(projectOrModule), ProjectIndexer.Cause.PROJECT_KEY_UPDATE); if (isMainProject(projectOrModule)) { Project newProject = new Project(projectOrModule.uuid(), newKey, projectOrModule.name(), projectOrModule.description()); projectLifeCycleListeners.onProjectsRekeyed(singleton(new RekeyedProject(newProject, projectOrModule.getDbKey()))); } }