private static void addFileDataPerModule(MultiModuleProjectRepository data, List<ComponentDto> moduleChildren, List<FilePathWithHashDto> files) { Map<String, String> moduleKeysByUuid = newHashMap(); for (ComponentDto module : moduleChildren) { moduleKeysByUuid.put(module.uuid(), module.getKey()); } for (FilePathWithHashDto file : files) { FileData fileData = new FileData(file.getSrcHash(), file.getRevision()); data.addFileDataToModule(moduleKeysByUuid.get(file.getModuleUuid()), file.getPath(), fileData); } }
@Test public void return_file_data_from_single_project() { OrganizationDto organizationDto = db.organizations().insert(); ComponentDto project = db.components().insertPrivateProject(organizationDto); userSession.logIn().addProjectPermission(SCAN_EXECUTION, project); ComponentDto file = db.components().insertComponent(newFileDto(project)); dbClient.fileSourceDao().insert(dbSession, newFileSourceDto(file).setSrcHash("123456")); db.commit(); ProjectRepositories ref = underTest.load(ProjectDataQuery.create().setProjectKey(project.getKey())); assertTrue(ref instanceof SingleProjectRepository); SingleProjectRepository singleProjectRepository = ((SingleProjectRepository) ref); assertThat(singleProjectRepository.fileData()).hasSize(1); FileData fileData = singleProjectRepository.fileDataByPath(file.path()); assertThat(fileData).isNotNull(); assertThat(fileData.hash()).isEqualTo("123456"); }
@Test public void return_file_data_from_multi_modules() { OrganizationDto organizationDto = db.organizations().insert(); ComponentDto project = db.components().insertPrivateProject(organizationDto); userSession.logIn().addProjectPermission(SCAN_EXECUTION, project); ComponentDto module = db.components().insertComponent(newModuleDto(project)); // File on project ComponentDto projectFile = db.components().insertComponent(newFileDto(project)); dbClient.fileSourceDao().insert(dbSession, newFileSourceDto(projectFile).setSrcHash("123456")); // File on module ComponentDto moduleFile = db.components().insertComponent(newFileDto(module)); dbClient.fileSourceDao().insert(dbSession, newFileSourceDto(moduleFile).setSrcHash("789456")); dbSession.commit(); ProjectRepositories ref = underTest.load(ProjectDataQuery.create().setProjectKey(project.getKey())); assertTrue(ref instanceof MultiModuleProjectRepository); MultiModuleProjectRepository repository = ((MultiModuleProjectRepository) ref); assertThat(repository.fileData(project.getKey(), projectFile.path()).hash()).isEqualTo("123456"); assertThat(repository.fileData(module.getKey(), moduleFile.path()).hash()).isEqualTo("789456"); }
private static WsProjectResponse.FileData toFileDataResponse(FileData fileData) { Builder fileDataBuilder = WsProjectResponse.FileData.newBuilder(); ofNullable(fileData.hash()).ifPresent(fileDataBuilder::setHash); ofNullable(fileData.revision()).ifPresent(fileDataBuilder::setRevision); return fileDataBuilder.build(); } }
private static void addFileData(SingleProjectRepository data, List<FilePathWithHashDto> files) { for (FilePathWithHashDto file : files) { FileData fileData = new FileData(file.getSrcHash(), file.getRevision()); data.addFileData(file.getPath(), fileData); } }
@Test public void return_file_data_from_branch() { OrganizationDto organizationDto = db.organizations().insert(); ComponentDto project = db.components().insertPrivateProject(organizationDto); ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey("my_branch")); userSession.logIn().addProjectPermission(SCAN_EXECUTION, project); ComponentDto moduleBranch = db.components().insertComponent(newModuleDto(branch)); // File on branch ComponentDto projectFile = db.components().insertComponent(newFileDto(branch)); dbClient.fileSourceDao().insert(dbSession, newFileSourceDto(projectFile).setSrcHash("123456")); // File on moduleBranch branch ComponentDto moduleFile = db.components().insertComponent(newFileDto(moduleBranch)); dbClient.fileSourceDao().insert(dbSession, newFileSourceDto(moduleFile).setSrcHash("789456")); dbSession.commit(); ProjectRepositories ref = underTest.load(ProjectDataQuery.create() .setProjectKey(project.getKey()) .setBranch("my_branch")); assertTrue(ref instanceof MultiModuleProjectRepository); MultiModuleProjectRepository repository = ((MultiModuleProjectRepository) ref); assertThat(repository.fileData(branch.getKey(), projectFile.path()).hash()).isEqualTo("123456"); assertThat(repository.fileData(moduleBranch.getKey(), moduleFile.path()).hash()).isEqualTo("789456"); }
public ProjectRepositories addFileDataToModule(String moduleKey, @Nullable String path, FileData fileData) { if (path == null || (fileData.hash() == null && fileData.revision() == null)) { return this; } SingleProjectRepository repository = repositoryPerModule.computeIfAbsent(moduleKey, k -> new SingleProjectRepository()); repository.addFileData(path, fileData); return this; }
@Test public void add_file_data_to_nodule() { FileData fileData1 = new FileData("123", "456"); FileData fileData2 = new FileData("153", "6432"); FileData fileData3 = new FileData("987", "6343"); repository.addFileDataToModule("Module1", "/Abc.java", fileData1); repository.addFileDataToModule("Module1", "/Xyz.java", fileData2); repository.addFileDataToModule("Module2", "/Def.java", fileData3); assertThat(repository.repositoriesByModule()).hasSize(2); assertThat(repository.fileData("Module1", "/Xyz.java")).isEqualTo(fileData2); assertThat(repository.fileData("Module2", "/Def.java")).isEqualTo(fileData3); }
@Test public void add_file_data() { FileData fileData = new FileData("123", "456"); repository.addFileData("/Abc.java", fileData); assertThat(repository.fileData()).hasSize(1); assertThat(repository.fileData()).contains(Maps.immutableEntry("/Abc.java", fileData)); assertThat(repository.fileDataByPath("/Abc.java")).isEqualTo(fileData); }
public ProjectRepositories addFileDataToModule(String moduleKey, @Nullable String path, FileData fileData) { if (path == null || (fileData.hash() == null && fileData.revision() == null)) { return this; } SingleProjectRepository repository = repositoryPerModule.computeIfAbsent(moduleKey, k -> new SingleProjectRepository()); repository.addFileData(path, fileData); return this; }
@Test public void add_file_does_not_add_the_file_without_path() { FileData fileData = new FileData("123", "456"); repository.addFileDataToModule("module1", null, fileData); assertThat(repository.repositoriesByModule()).hasSize(0); }
private static WsProjectResponse.FileData toFileDataResponse(FileData fileData) { Builder fileDataBuilder = WsProjectResponse.FileData.newBuilder(); setNullable(fileData.hash(), fileDataBuilder::setHash); setNullable(fileData.revision(), fileDataBuilder::setRevision); return fileDataBuilder.build(); } }
@Test public void add_file_data_doesnt_add_the_file_without_path() { FileData fileData = new FileData("123", "456"); repository.addFileData(null, fileData); assertThat(repository.fileData()).hasSize(0); }
@Test public void add_file_data_doesnt_add_the_file_without_revision_and_hash() { FileData fileData = new FileData(null, null); repository.addFileData("/Abc.java", fileData); assertThat(repository.fileData()).hasSize(0); } }
@Test public void add_file_does_not_add_the_file_without_revision_and_hash() { FileData fileData = new FileData(null, null); repository.addFileDataToModule("module2", "/Abc.java", fileData); assertThat(repository.repositoriesByModule()).hasSize(0); } }
@Test public void use_new_file_structure_for_projects_without_submodules() { String projectKey = "org.codehaus.sonar:sonar"; ProjectRepositories projectRepositories = new SingleProjectRepository() .addFileData("src/main/java/SomeClass.java", new FileData("789456", "123456789")); when(projectDataLoader.load(any(ProjectDataQuery.class))).thenReturn(projectRepositories); WsProjectResponse wsProjectResponse = ws.newRequest() .setParam("key", projectKey) .setParam("profile", "Default") .executeProtobuf(WsProjectResponse.class); assertThat(wsProjectResponse.getFileDataByModuleAndPathMap()).isEmpty(); assertThat(wsProjectResponse.getFileDataByPathCount()).isEqualTo(1); assertThat(wsProjectResponse.getFileDataByPathMap().get("src/main/java/SomeClass.java")).isNotNull(); }
@Test public void use_old_file_structure_for_projects_with_submodules() { String projectKey = "org.codehaus.sonar:sonar"; ProjectRepositories projectRepositories = new MultiModuleProjectRepository() .addFileDataToModule("module-1", "src/main/java/SomeClass.java", new FileData("789456", "123456789")); when(projectDataLoader.load(any(ProjectDataQuery.class))).thenReturn(projectRepositories); WsProjectResponse wsProjectResponse = ws.newRequest() .setParam("key", projectKey) .setParam("profile", "Default") .executeProtobuf(WsProjectResponse.class); assertThat(wsProjectResponse.getFileDataByPathMap()).isEmpty(); assertThat(wsProjectResponse.getFileDataByModuleAndPathCount()).isEqualTo(1); WsProjectResponse.FileDataByPath moduleData = wsProjectResponse.getFileDataByModuleAndPathMap().get("module-1"); assertThat(moduleData).isNotNull(); assertThat(moduleData.getFileDataByPathCount()).isEqualTo(1); WsProjectResponse.FileData fileData = moduleData.getFileDataByPathMap().get("src/main/java/SomeClass.java"); assertThat(fileData).isNotNull(); assertThat(fileData.getHash()).isEqualTo("789456"); assertThat(fileData.getRevision()).isEqualTo("123456789"); } }
/** * SONAR-7084 */ @Test public void do_not_fail_when_a_path_is_null() { String projectKey = "org.codehaus.sonar:sonar"; ProjectRepositories projectRepositories = new MultiModuleProjectRepository() .addFileDataToModule("module-1", null, new FileData(null, null)); when(projectDataLoader.load(any(ProjectDataQuery.class))).thenReturn(projectRepositories); WsProjectResponse wsProjectResponse = ws.newRequest() .setParam("key", projectKey) .setParam("profile", "Default") .executeProtobuf(WsProjectResponse.class); assertThat(wsProjectResponse.getFileDataByModuleAndPathMap()).isEmpty(); }