@Test public void prefer_older_issues() { Instant now = Instant.now(); db.issues().insertIssue(IssueTesting.newIssue(rule, branch1Dto, fileOnBranch1Dto).setKee("issue1").setStatus(Issue.STATUS_REOPENED).setLine(1).setChecksum("checksum") .setIssueCreationDate(Date.from(now.plus(2, ChronoUnit.SECONDS)))); db.issues().insertIssue(IssueTesting.newIssue(rule, branch2Dto, fileOnBranch2Dto).setKee("issue2").setStatus(Issue.STATUS_OPEN).setLine(1).setChecksum("checksum") .setIssueCreationDate(Date.from(now.plus(1, ChronoUnit.SECONDS)))); db.issues().insertIssue(IssueTesting.newIssue(rule, branch3Dto, fileOnBranch3Dto).setKee("issue3").setStatus(Issue.STATUS_OPEN).setLine(1).setChecksum("checksum") .setIssueCreationDate(Date.from(now))); DefaultIssue newIssue = createIssue("newIssue", rule.getKey(), Issue.STATUS_OPEN, null, new Date()); copier.tryMerge(FILE_1, Collections.singleton(newIssue)); ArgumentCaptor<DefaultIssue> issueToMerge = ArgumentCaptor.forClass(DefaultIssue.class); verify(issueLifecycle).mergeConfirmedOrResolvedFromShortLivingBranch(eq(newIssue), issueToMerge.capture(), eq("myBranch3")); assertThat(issueToMerge.getValue().key()).isEqualTo("issue3"); }
@Test public void should_sort_by_creation_date() { Date date = new Date(); Date date1 = DateUtils.addDays(date, -3); Date date2 = DateUtils.addDays(date, -2); Date date3 = DateUtils.addDays(date, -1); IssueDto issue1 = new IssueDto().setId(1L).setIssueCreationDate(date1); IssueDto issue2 = new IssueDto().setId(2L).setIssueCreationDate(date3); IssueDto issue3 = new IssueDto().setId(3L).setIssueCreationDate(date2); List<IssueDto> dtoList = newArrayList(issue1, issue2, issue3); IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CREATION_DATE).asc(false).build(); IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query); List<IssueDto> result = newArrayList(issuesFinderSort.sort()); assertThat(result).hasSize(3); assertThat(result.get(0).getIssueCreationDate()).isEqualTo(date3); assertThat(result.get(1).getIssueCreationDate()).isEqualTo(date2); assertThat(result.get(2).getIssueCreationDate()).isEqualTo(date1); }
.setIssueAttributes("key=value") .setAuthorLogin("pierre") .setIssueCreationDate(createdAt) .setIssueUpdateDate(updatedAt) .setIssueCloseDate(closedAt);
@Test public void search_by_application_and_by_leak() { Date now = new Date(); RuleDefinitionDto rule = db.rules().insert(); ComponentDto application = db.components().insertApplication(db.getDefaultOrganization()); // Project 1 ComponentDto project1 = db.components().insertPublicProject(); db.components().insertSnapshot(project1, s -> s.setPeriodDate(addDays(now, -14).getTime())); db.components().insertComponents(newProjectCopy("PC1", project1, application)); IssueDto project1Issue1 = db.issues().insert(rule, project1, project1, i -> i.setIssueCreationDate(addDays(now, -10))); IssueDto project1Issue2 = db.issues().insert(rule, project1, project1, i -> i.setIssueCreationDate(addDays(now, -20))); // Project 2 ComponentDto project2 = db.components().insertPublicProject(); db.components().insertSnapshot(project2, s -> s.setPeriodDate(addDays(now, -25).getTime())); db.components().insertComponents(newProjectCopy("PC2", project2, application)); IssueDto project2Issue1 = db.issues().insert(rule, project2, project2, i -> i.setIssueCreationDate(addDays(now, -15))); IssueDto project2Issue2 = db.issues().insert(rule, project2, project2, i -> i.setIssueCreationDate(addDays(now, -30))); // Permissions and index allowAnyoneOnProjects(project1, project2, application); indexIssuesAndViews(); SearchWsResponse result = ws.newRequest() .setParam(PARAM_COMPONENT_KEYS, application.getDbKey()) .setParam(PARAM_SINCE_LEAK_PERIOD, "true") .executeProtobuf(SearchWsResponse.class); assertThat(result.getIssuesList()).extracting(Issue::getKey) .containsExactlyInAnyOrder(project1Issue1.getKey(), project2Issue1.getKey()) .doesNotContain(project1Issue2.getKey(), project2Issue2.getKey()); }
@Test public void search_by_application_and_by_leak_when_one_project_has_no_leak() { Date now = new Date(); RuleDefinitionDto rule = db.rules().insert(); ComponentDto application = db.components().insertApplication(db.getDefaultOrganization()); // Project 1 ComponentDto project1 = db.components().insertPublicProject(); db.components().insertSnapshot(project1, s -> s.setPeriodDate(addDays(now, -14).getTime())); db.components().insertComponents(newProjectCopy("PC1", project1, application)); IssueDto project1Issue1 = db.issues().insert(rule, project1, project1, i -> i.setIssueCreationDate(addDays(now, -10))); IssueDto project1Issue2 = db.issues().insert(rule, project1, project1, i -> i.setIssueCreationDate(addDays(now, -20))); // Project 2, without leak => no issue form it should be returned ComponentDto project2 = db.components().insertPublicProject(); db.components().insertSnapshot(project2, s -> s.setPeriodDate(null)); db.components().insertComponents(newProjectCopy("PC2", project2, application)); IssueDto project2Issue1 = db.issues().insert(rule, project2, project2, i -> i.setIssueCreationDate(addDays(now, -15))); IssueDto project2Issue2 = db.issues().insert(rule, project2, project2, i -> i.setIssueCreationDate(addDays(now, -30))); // Permissions and index allowAnyoneOnProjects(project1, project2, application); indexIssuesAndViews(); SearchWsResponse result = ws.newRequest() .setParam(PARAM_COMPONENT_KEYS, application.getDbKey()) .setParam(PARAM_SINCE_LEAK_PERIOD, "true") .executeProtobuf(SearchWsResponse.class); assertThat(result.getIssuesList()).extracting(Issue::getKey) .containsExactlyInAnyOrder(project1Issue1.getKey()) .doesNotContain(project1Issue2.getKey(), project2Issue1.getKey(), project2Issue2.getKey()); }
@Test public void search_by_application_and_project_and_leak() { Date now = new Date(); RuleDefinitionDto rule = db.rules().insert(); ComponentDto application = db.components().insertApplication(db.getDefaultOrganization()); // Project 1 ComponentDto project1 = db.components().insertPublicProject(); db.components().insertSnapshot(project1, s -> s.setPeriodDate(addDays(now, -14).getTime())); db.components().insertComponents(newProjectCopy("PC1", project1, application)); IssueDto project1Issue1 = db.issues().insert(rule, project1, project1, i -> i.setIssueCreationDate(addDays(now, -10))); IssueDto project1Issue2 = db.issues().insert(rule, project1, project1, i -> i.setIssueCreationDate(addDays(now, -20))); // Project 2 ComponentDto project2 = db.components().insertPublicProject(); db.components().insertSnapshot(project2, s -> s.setPeriodDate(addDays(now, -25).getTime())); db.components().insertComponents(newProjectCopy("PC2", project2, application)); IssueDto project2Issue1 = db.issues().insert(rule, project2, project2, i -> i.setIssueCreationDate(addDays(now, -15))); IssueDto project2Issue2 = db.issues().insert(rule, project2, project2, i -> i.setIssueCreationDate(addDays(now, -30))); // Permissions and index allowAnyoneOnProjects(project1, project2, application); indexIssuesAndViews(); SearchWsResponse result = ws.newRequest() .setParam(PARAM_COMPONENT_KEYS, application.getDbKey()) .setParam(PARAM_PROJECT_KEYS, project1.getDbKey()) .setParam(PARAM_SINCE_LEAK_PERIOD, "true") .executeProtobuf(SearchWsResponse.class); assertThat(result.getIssuesList()).extracting(Issue::getKey) .containsExactlyInAnyOrder(project1Issue1.getKey()) .doesNotContain(project1Issue2.getKey(), project2Issue1.getKey(), project2Issue2.getKey()); }
@Test public void search_since_leak_period_on_project() { ComponentDto project = db.components().insertPublicProject(p -> p.setDbKey("PK1")); ComponentDto file = db.components().insertComponent(newFileDto(project, null, "F1").setDbKey("FK1")); db.components().insertSnapshot(project, a -> a.setPeriodDate(parseDateTime("2015-09-03T00:00:00+0100").getTime())); RuleDefinitionDto rule = db.rules().insert(r -> r.setRuleKey(RuleKey.of("xoo", "x1"))); IssueDto issueAfterLeak = db.issues().insert(rule, project, file, i -> i.setKee(UUID_EXAMPLE_01) .setIssueCreationDate(parseDateTime("2015-09-04T00:00:00+0100")) .setIssueUpdateDate(parseDateTime("2015-10-04T00:00:00+0100"))); IssueDto issueBeforeLeak = db.issues().insert(rule, project, file, i -> i.setKee(UUID_EXAMPLE_02) .setIssueCreationDate(parseDateTime("2014-09-04T00:00:00+0100")) .setIssueUpdateDate(parseDateTime("2015-10-04T00:00:00+0100"))); allowAnyoneOnProjects(project); indexIssues(); ws.newRequest() .setParam(PARAM_COMPONENT_UUIDS, project.uuid()) .setParam(PARAM_SINCE_LEAK_PERIOD, "true") .execute() .assertJson(this.getClass(), "search_since_leak_period.json"); }
@Test public void search_since_leak_period_on_file_in_module_project() { ComponentDto project = db.components().insertPublicProject(p -> p.setDbKey("PK1")); ComponentDto module = db.components().insertComponent(newModuleDto(project)); ComponentDto file = db.components().insertComponent(newFileDto(module, null, "F1").setDbKey("FK1")); db.components().insertSnapshot(project, a -> a.setPeriodDate(parseDateTime("2015-09-03T00:00:00+0100").getTime())); RuleDefinitionDto rule = db.rules().insert(r -> r.setRuleKey(RuleKey.of("xoo", "x1"))); IssueDto issueAfterLeak = db.issues().insert(rule, project, file, i -> i.setKee(UUID_EXAMPLE_01) .setIssueCreationDate(parseDateTime("2015-09-04T00:00:00+0100")) .setIssueUpdateDate(parseDateTime("2015-10-04T00:00:00+0100"))); IssueDto issueBeforeLeak = db.issues().insert(rule, project, file, i -> i.setKee(UUID_EXAMPLE_02) .setIssueCreationDate(parseDateTime("2014-09-04T00:00:00+0100")) .setIssueUpdateDate(parseDateTime("2015-10-04T00:00:00+0100"))); allowAnyoneOnProjects(project); indexIssues(); ws.newRequest() .setParam(PARAM_COMPONENT_UUIDS, project.uuid()) .setParam(PARAM_FILE_UUIDS, file.uuid()) .setParam(PARAM_SINCE_LEAK_PERIOD, "true") .execute() .assertJson(this.getClass(), "search_since_leak_period.json"); }
RuleDto rule = newRule(); IssueDto issue1 = newDto(rule, file, project) .setIssueCreationDate(parseDate("2014-09-04")) .setIssueUpdateDate(parseDate("2017-12-04")) .setEffort(10L) .setAssigneeUuid(john.getUuid()); IssueDto issue2 = newDto(rule, file, project) .setIssueCreationDate(parseDate("2014-09-04")) .setIssueUpdateDate(parseDate("2017-12-04")) .setEffort(10L) .setAssigneeUuid(alice.getUuid()); IssueDto issue3 = newDto(rule, file, project) .setIssueCreationDate(parseDate("2014-09-04")) .setIssueUpdateDate(parseDate("2017-12-04")) .setEffort(10L)
RuleDto rule = newRule(); IssueDto issue1 = newDto(rule, file, project) .setIssueCreationDate(parseDate("2014-09-04")) .setIssueUpdateDate(parseDate("2017-12-04")) .setEffort(10L) .setAssigneeUuid(john.getUuid()); IssueDto issue2 = newDto(rule, file, project) .setIssueCreationDate(parseDate("2014-09-04")) .setIssueUpdateDate(parseDate("2017-12-04")) .setEffort(10L) .setAssigneeUuid(alice.getUuid()); IssueDto issue3 = newDto(rule, file, project) .setIssueCreationDate(parseDate("2014-09-04")) .setIssueUpdateDate(parseDate("2017-12-04")) .setEffort(10L)
@Test public void issue_on_removed_file() { RuleDto rule = newRule(); OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org-2")); ComponentDto project = db.components().insertComponent(ComponentTesting.newPublicProjectDto(organization, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); ComponentDto removedFile = db.components().insertComponent(newFileDto(project, null).setUuid("REMOVED_FILE_ID") .setDbKey("REMOVED_FILE_KEY") .setEnabled(false)); IssueDto issue = newDto(rule, removedFile, project) .setKee("82fd47d4-b650-4037-80bc-7b112bd4eac2") .setComponent(removedFile) .setStatus("OPEN").setResolution("OPEN") .setSeverity("MAJOR") .setIssueCreationDate(parseDateTime("2014-09-04T00:00:00+0100")) .setIssueUpdateDate(parseDateTime("2017-12-04T00:00:00+0100")); dbClient.issueDao().insert(session, issue); session.commit(); indexIssues(); ws.newRequest() .execute() .assertJson(this.getClass(), "issue_on_removed_file.json"); }
.setAssigneeUuid(simon.getUuid()) .setTags(asList("bug", "owasp")) .setIssueCreationDate(parseDate("2014-09-03")) .setIssueUpdateDate(parseDate("2017-12-04"))); indexIssues();
.setProjectUuid(issue.projectUuid()) .setProjectKey(issue.projectKey()) .setIssueCreationDate(issue.creationDate()) .setIssueCloseDate(issue.closeDate()) .setIssueUpdateDate(issue.updateDate())
.setIssueAttributes(KeyValueFormat.format(issue.attributes())) .setAuthorLogin(issue.authorLogin()) .setIssueCreationDate(issue.creationDate()) .setIssueCloseDate(issue.closeDate()) .setIssueUpdateDate(issue.updateDate())
.setProjectUuid(issue.projectUuid()) .setProjectKey(issue.projectKey()) .setIssueCreationDate(issue.creationDate()) .setIssueCloseDate(issue.closeDate()) .setIssueUpdateDate(issue.updateDate())
.setIssueAttributes(KeyValueFormat.format(issue.attributes())) .setAuthorLogin(issue.authorLogin()) .setIssueCreationDate(issue.creationDate()) .setIssueCloseDate(issue.closeDate()) .setIssueUpdateDate(issue.updateDate())