@Test public void update_sources_when_src_hash_is_missing() { dbClient.fileSourceDao().insert(dbTester.getSession(), createDto(dto -> dto.setSrcHash(null))); dbTester.getSession().commit(); DbFileSources.Data sourceData = DbFileSources.Data.newBuilder().build(); setComputedData(sourceData, Collections.singletonList("lineHash"), "newSourceHash", null); underTest.execute(new TestComputationStepContext()); assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectByFileUuid(session, FILE1_UUID); assertThat(fileSourceDto.getCreatedAt()).isEqualTo(PAST); assertThat(fileSourceDto.getUpdatedAt()).isEqualTo(NOW); assertThat(fileSourceDto.getSrcHash()).isEqualTo("newSourceHash"); verify(fileSourceDataWarnings).commitWarnings(); }
@Test public void selectSourceByFileUuid_reads_source_without_line_hashes() { FileSourceDto fileSourceDto = new FileSourceDto() .setProjectUuid("Foo") .setFileUuid("Bar") .setCreatedAt(1500000000000L) .setUpdatedAt(1500000000001L); underTest.insert(dbSession, fileSourceDto); dbSession.commit(); FileSourceDto res = underTest.selectByFileUuid(dbSession, fileSourceDto.getFileUuid()); assertThat(res.getLineCount()).isEqualTo(0); assertThat(res.getLineHashes()).isEmpty(); }
@SafeVarargs public final FileSourceDto insertFileSource(ComponentDto file, Consumer<FileSourceDto>... dtoPopulators) { FileSourceDto dto = new FileSourceDto() .setProjectUuid(file.projectUuid()) .setFileUuid(file.uuid()) .setSrcHash(randomAlphanumeric(50)) .setDataHash(randomAlphanumeric(50)) .setLineHashes(IntStream.range(0, new Random().nextInt(21)).mapToObj(String::valueOf).collect(MoreCollectors.toList())) .setRevision(randomAlphanumeric(100)) .setSourceData(newRandomData(3).build()) .setCreatedAt(new Date().getTime()) .setUpdatedAt(new Date().getTime()); Arrays.stream(dtoPopulators).forEach(c -> c.accept(dto)); db.getDbClient().fileSourceDao().insert(db.getSession(), dto); db.commit(); return dto; }
@Test public void not_update_sources_when_nothing_has_changed() { dbClient.fileSourceDao().insert(dbTester.getSession(), createDto()); dbTester.getSession().commit(); Changeset changeset = Changeset.newChangesetBuilder().setDate(1L).setRevision("rev-1").build(); setComputedData(DbFileSources.Data.newBuilder().build(), Collections.singletonList("lineHash"), "sourceHash", changeset); underTest.execute(new TestComputationStepContext()); assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectByFileUuid(session, FILE1_UUID); assertThat(fileSourceDto.getSrcHash()).isEqualTo("sourceHash"); assertThat(fileSourceDto.getLineHashes()).isEqualTo(Collections.singletonList("lineHash")); assertThat(fileSourceDto.getCreatedAt()).isEqualTo(PAST); assertThat(fileSourceDto.getUpdatedAt()).isEqualTo(PAST); verify(fileSourceDataWarnings).commitWarnings(); }
@Test public void selectLineHashesVersion_returns_without_significant_code_by_default() { underTest.insert(dbSession, new FileSourceDto() .setProjectUuid("PRJ_UUID") .setFileUuid("FILE2_UUID") .setBinaryData("FILE2_BINARY_DATA".getBytes()) .setDataHash("FILE2_DATA_HASH") .setLineHashes(singletonList("hashes")) .setSrcHash("FILE2_HASH") .setCreatedAt(1500000000000L) .setUpdatedAt(1500000000001L) .setRevision("123456789")); dbSession.commit(); assertThat(underTest.selectLineHashesVersion(dbSession, "FILE2_UUID")).isEqualTo(LineHashVersion.WITHOUT_SIGNIFICANT_CODE); }
@Test public void selectLineHashes_does_not_fail_when_lineshashes_is_null() { dbTester.prepareDbUnit(getClass(), "shared.xml"); underTest.insert(dbSession, new FileSourceDto() .setProjectUuid("PRJ_UUID") .setFileUuid("FILE2_UUID") .setBinaryData("FILE2_BINARY_DATA".getBytes()) .setDataHash("FILE2_DATA_HASH") .setSrcHash("FILE2_HASH") .setCreatedAt(1500000000000L) .setUpdatedAt(1500000000001L) .setRevision("123456789")); dbSession.commit(); assertThat(underTest.selectLineHashes(dbSession, "FILE2_UUID")).isEmpty(); }
@CheckForNull private FileSourceDto insertContentOfFileInDb(String uuid, @Nullable String[] content) { return dbTester.getDbClient().componentDao().selectByUuid(dbTester.getSession(), uuid) .map(file -> { SourceLineHashesComputer linesHashesComputer = new SourceLineHashesComputer(); if (content != null) { stream(content).forEach(linesHashesComputer::addLine); } FileSourceDto fileSourceDto = new FileSourceDto() .setFileUuid(file.uuid()) .setProjectUuid(file.projectUuid()) .setLineHashes(linesHashesComputer.getLineHashes()); dbTester.getDbClient().fileSourceDao().insert(dbTester.getSession(), fileSourceDto); dbTester.commit(); return fileSourceDto; }).orElse(null); }
@Test public void selectLineHashesVersion_succeeds() { underTest.insert(dbSession, new FileSourceDto() .setProjectUuid("PRJ_UUID") .setFileUuid("FILE2_UUID") .setBinaryData("FILE2_BINARY_DATA".getBytes()) .setDataHash("FILE2_DATA_HASH") .setLineHashes(singletonList("hashes")) .setSrcHash("FILE2_HASH") .setCreatedAt(1500000000000L) .setUpdatedAt(1500000000001L) .setLineHashesVersion(1) .setRevision("123456789")); dbSession.commit(); assertThat(underTest.selectLineHashesVersion(dbSession, "FILE2_UUID")).isEqualTo(LineHashVersion.WITH_SIGNIFICANT_CODE); }
@Test public void insert_does_not_fail_on_FileSourceDto_with_only_non_nullable_data() { FileSourceDto fileSourceDto = new FileSourceDto() .setProjectUuid("Foo") .setFileUuid("Bar") .setCreatedAt(1500000000000L) .setUpdatedAt(1500000000001L); underTest.insert(dbSession, fileSourceDto); dbSession.commit(); }
@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"); }
private void insertFileWithData(ComponentDto file, DbFileSources.Data fileData) { db.getDbClient().fileSourceDao().insert(db.getSession(), new FileSourceDto() .setProjectUuid(file.projectUuid()) .setFileUuid(file.uuid()) .setSourceData(fileData)); db.commit(); }
@Test public void return_empty_value_when_no_scm() throws Exception { userSessionRule.addProjectPermission(UserRole.CODEVIEWER, project, file); dbTester.getDbClient().fileSourceDao().insert(dbSession, new FileSourceDto() .setProjectUuid(PROJECT_UUID) .setFileUuid(FILE_UUID) .setSourceData(DbFileSources.Data.newBuilder().build())); dbSession.commit(); WsTester.TestRequest request = tester.newGetRequest("api/sources", "scm").setParam("key", FILE_KEY); request.execute().assertJson(getClass(), "return_empty_value_when_no_scm.json"); }
@Before public void injectFakeLines() throws IOException { FileSourceDto dto = new FileSourceDto(); dto.setFileUuid(FILE_UUID).setProjectUuid("PROJECT_UUID"); dto.setSourceData(FileSourceTesting.newFakeData(10).build()); dbTester.getDbClient().fileSourceDao().insert(dbTester.getSession(), dto); dbTester.commit(); }
private ComponentDto insertFileWithData(DbFileSources.Data fileData, ComponentDto project) { ComponentDto file = insertFile(project); db.getDbClient().fileSourceDao().insert(db.getSession(), new FileSourceDto() .setProjectUuid(project.projectUuid()) .setFileUuid(file.uuid()) .setSourceData(fileData)); db.commit(); return file; }
@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"); }
@Test public void show_scm() throws Exception { userSessionRule.addProjectPermission(UserRole.CODEVIEWER, project, file); dbTester.getDbClient().fileSourceDao().insert(dbSession, new FileSourceDto() .setProjectUuid(PROJECT_UUID) .setFileUuid(FILE_UUID) .setSourceData(DbFileSources.Data.newBuilder().addLines( newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 1)).build())); dbSession.commit(); WsTester.TestRequest request = tester.newGetRequest("api/sources", "scm").setParam("key", FILE_KEY); request.execute().assertJson(getClass(), "show_scm.json"); }
@Test public void show_scm_from_given_range_lines() throws Exception { userSessionRule.addProjectPermission(UserRole.CODEVIEWER, project, file); dbTester.getDbClient().fileSourceDao().insert(dbSession, new FileSourceDto() .setProjectUuid(PROJECT_UUID) .setFileUuid(FILE_UUID) .setSourceData(DbFileSources.Data.newBuilder() .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 1)) .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 2)) .addLines(newSourceLine("julien", "456-789-101", DateUtils.parseDateTime("2015-03-27T12:34:56+0000"), 3)) .addLines(newSourceLine("simon", "789-101-112", DateUtils.parseDateTime("2015-03-31T12:34:56+0000"), 4)) .build())); dbSession.commit(); WsTester.TestRequest request = tester.newGetRequest("api/sources", "scm").setParam("key", FILE_KEY).setParam("from", "2").setParam("to", "3"); request.execute().assertJson(getClass(), "show_scm_from_given_range_lines.json"); }
@Test public void accept_negative_value_in_from_parameter() throws Exception { userSessionRule.addProjectPermission(UserRole.CODEVIEWER, project, file); dbTester.getDbClient().fileSourceDao().insert(dbSession, new FileSourceDto() .setProjectUuid(PROJECT_UUID) .setFileUuid(FILE_UUID) .setSourceData(DbFileSources.Data.newBuilder() .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 1)) .addLines(newSourceLine("julien", "123-456-710", DateUtils.parseDateTime("2015-03-29T12:34:56+0000"), 2)) .addLines(newSourceLine("julien", "456-789-101", DateUtils.parseDateTime("2015-03-27T12:34:56+0000"), 3)) .addLines(newSourceLine("simon", "789-101-112", DateUtils.parseDateTime("2015-03-31T12:34:56+0000"), 4)) .build())); dbSession.commit(); WsTester.TestRequest request = tester.newGetRequest("api/sources", "scm").setParam("key", FILE_KEY).setParam("from", "-2").setParam("to", "3"); request.execute().assertJson(getClass(), "accept_negative_value_in_from_parameter.json"); }
@Test public void group_lines_by_commit() throws Exception { userSessionRule.addProjectPermission(UserRole.CODEVIEWER, project, file); // lines 1 and 2 are the same commit, but not 3 (different date) dbTester.getDbClient().fileSourceDao().insert(dbSession, new FileSourceDto() .setProjectUuid(PROJECT_UUID) .setFileUuid(FILE_UUID) .setSourceData(DbFileSources.Data.newBuilder() .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 1)) .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 2)) .addLines(newSourceLine("julien", "456-789-101", DateUtils.parseDateTime("2015-03-27T12:34:56+0000"), 3)) .addLines(newSourceLine("simon", "789-101-112", DateUtils.parseDateTime("2015-03-31T12:34:56+0000"), 4)) .build())); dbSession.commit(); WsTester.TestRequest request = tester.newGetRequest("api/sources", "scm").setParam("key", FILE_KEY).setParam("commits_by_line", "false"); request.execute().assertJson(getClass(), "group_lines_by_commit.json"); }
@Test public void not_group_lines_by_commit() throws Exception { userSessionRule.addProjectPermission(UserRole.CODEVIEWER, project, file); // lines 1 and 2 are the same commit, but not 3 (different date) dbTester.getDbClient().fileSourceDao().insert(dbSession, new FileSourceDto() .setProjectUuid(PROJECT_UUID) .setFileUuid(FILE_UUID) .setSourceData(DbFileSources.Data.newBuilder() .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 1)) .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 2)) .addLines(newSourceLine("julien", "456-789-101", DateUtils.parseDateTime("2015-03-27T12:34:56+0000"), 3)) .addLines(newSourceLine("simon", "789-101-112", DateUtils.parseDateTime("2015-03-31T12:34:56+0000"), 4)) .build())); dbSession.commit(); WsTester.TestRequest request = tester.newGetRequest("api/sources", "scm").setParam("key", FILE_KEY).setParam("commits_by_line", "true"); request.execute().assertJson(getClass(), "not_group_lines_by_commit.json"); }