@Before public void setUp() { repository = new MultiModuleProjectRepository(); }
@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_does_not_add_the_file_without_path() { FileData fileData = new FileData("123", "456"); repository.addFileDataToModule("module1", null, fileData); assertThat(repository.repositoriesByModule()).hasSize(0); }
@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"); } }
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_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 Map<String, WsProjectResponse.FileDataByPath> buildFileDataByModuleAndPath(MultiModuleProjectRepository data) { return data.repositoriesByModule().entrySet() .stream() .map(entry -> Maps.immutableEntry(entry.getKey(), buildFileDataByPath(entry.getValue().fileData()))) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); }
/** * 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(); }
@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 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"); }
MultiModuleProjectRepository repository = new MultiModuleProjectRepository(); addFileDataPerModule(repository, modulesTree, files); data = repository;