private void verifyOrganizationFilter(String organizationUuid, String... expectedIssueKeys) { IssueQuery.Builder query = IssueQuery.builder().organizationUuid(organizationUuid); assertThatSearchReturnsOnly(query, expectedIssueKeys); }
@Test public void filter_by_statuses() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setStatus(Issue.STATUS_CLOSED), newDoc("I2", file).setStatus(Issue.STATUS_OPEN)); assertThatSearchReturnsOnly(IssueQuery.builder().statuses(asList(Issue.STATUS_CLOSED, Issue.STATUS_OPEN)), "I1", "I2"); assertThatSearchReturnsOnly(IssueQuery.builder().statuses(singletonList(Issue.STATUS_CLOSED)), "I1"); assertThatSearchReturnsEmpty(IssueQuery.builder().statuses(singletonList(Issue.STATUS_CONFIRMED))); }
@Test public void filter_by_keys() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); indexIssues( newDoc("I1", newFileDto(project, null)), newDoc("I2", newFileDto(project, null))); assertThatSearchReturnsOnly(IssueQuery.builder().issueKeys(asList("I1", "I2")), "I1", "I2"); assertThatSearchReturnsOnly(IssueQuery.builder().issueKeys(singletonList("I1")), "I1"); assertThatSearchReturnsEmpty(IssueQuery.builder().issueKeys(asList("I3", "I4"))); }
@Test public void filter_by_portfolios_not_having_projects() { OrganizationDto organizationDto = newOrganizationDto(); ComponentDto project1 = newPrivateProjectDto(organizationDto); ComponentDto file1 = newFileDto(project1, null); indexIssues(newDoc("I2", file1)); String view1 = "ABCD"; indexView(view1, emptyList()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(view1))); }
@Test public void filter_by_severities() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setSeverity(Severity.INFO), newDoc("I2", file).setSeverity(Severity.MAJOR)); assertThatSearchReturnsOnly(IssueQuery.builder().severities(asList(Severity.INFO, Severity.MAJOR)), "I1", "I2"); assertThatSearchReturnsOnly(IssueQuery.builder().severities(singletonList(Severity.INFO)), "I1"); assertThatSearchReturnsEmpty(IssueQuery.builder().severities(singletonList(Severity.BLOCKER))); }
@Test public void filter_by_resolutions() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setResolution(Issue.RESOLUTION_FALSE_POSITIVE), newDoc("I2", file).setResolution(Issue.RESOLUTION_FIXED)); assertThatSearchReturnsOnly(IssueQuery.builder().resolutions(asList(Issue.RESOLUTION_FALSE_POSITIVE, Issue.RESOLUTION_FIXED)), "I1", "I2"); assertThatSearchReturnsOnly(IssueQuery.builder().resolutions(singletonList(Issue.RESOLUTION_FALSE_POSITIVE)), "I1"); assertThatSearchReturnsEmpty(IssueQuery.builder().resolutions(singletonList(Issue.RESOLUTION_REMOVED))); }
@Test public void filter_by_authors() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setAuthorLogin("steph"), newDoc("I2", file).setAuthorLogin("marcel"), newDoc("I3", file).setAssigneeUuid(null)); assertThatSearchReturnsOnly(IssueQuery.builder().authors(singletonList("steph")), "I1"); assertThatSearchReturnsOnly(IssueQuery.builder().authors(asList("steph", "marcel")), "I1", "I2"); assertThatSearchReturnsEmpty(IssueQuery.builder().authors(singletonList("unknown"))); }
@Test public void filter_by_directories() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file1 = newFileDto(project, null).setPath("src/main/xoo/F1.xoo"); ComponentDto file2 = newFileDto(project, null).setPath("F2.xoo"); indexIssues( newDoc("I1", file1).setDirectoryPath("/src/main/xoo"), newDoc("I2", file2).setDirectoryPath("/")); assertThatSearchReturnsOnly(IssueQuery.builder().directories(singletonList("/src/main/xoo")), "I1"); assertThatSearchReturnsOnly(IssueQuery.builder().directories(singletonList("/")), "I2"); assertThatSearchReturnsEmpty(IssueQuery.builder().directories(singletonList("unknown"))); }
@Test public void filter_by_assignees() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setAssigneeUuid("steph-uuid"), newDoc("I2", file).setAssigneeUuid("marcel-uuid"), newDoc("I3", file).setAssigneeUuid(null)); assertThatSearchReturnsOnly(IssueQuery.builder().assigneeUuids(singletonList("steph-uuid")), "I1"); assertThatSearchReturnsOnly(IssueQuery.builder().assigneeUuids(asList("steph-uuid", "marcel-uuid")), "I1", "I2"); assertThatSearchReturnsEmpty(IssueQuery.builder().assigneeUuids(singletonList("unknown"))); }
@Test public void filter_by_assigned() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setAssigneeUuid("steph-uuid"), newDoc("I2", file).setAssigneeUuid(null), newDoc("I3", file).setAssigneeUuid(null)); assertThatSearchReturnsOnly(IssueQuery.builder().assigned(true), "I1"); assertThatSearchReturnsOnly(IssueQuery.builder().assigned(false), "I2", "I3"); assertThatSearchReturnsOnly(IssueQuery.builder().assigned(null), "I1", "I2", "I3"); }
@Test public void filter_by_resolved() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setStatus(Issue.STATUS_CLOSED).setResolution(Issue.RESOLUTION_FIXED), newDoc("I2", file).setStatus(Issue.STATUS_OPEN).setResolution(null), newDoc("I3", file).setStatus(Issue.STATUS_OPEN).setResolution(null)); assertThatSearchReturnsOnly(IssueQuery.builder().resolved(true), "I1"); assertThatSearchReturnsOnly(IssueQuery.builder().resolved(false), "I2", "I3"); assertThatSearchReturnsOnly(IssueQuery.builder().resolved(null), "I1", "I2", "I3"); }
@Test public void filter_by_created_after() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setFuncCreationDate(parseDate("2014-09-20")), newDoc("I2", file).setFuncCreationDate(parseDate("2014-09-23"))); assertThatSearchReturnsOnly(IssueQuery.builder().createdAfter(parseDate("2014-09-19")), "I1", "I2"); // Lower bound is included assertThatSearchReturnsOnly(IssueQuery.builder().createdAfter(parseDate("2014-09-20")), "I1", "I2"); assertThatSearchReturnsOnly(IssueQuery.builder().createdAfter(parseDate("2014-09-21")), "I2"); assertThatSearchReturnsEmpty(IssueQuery.builder().createdAfter(parseDate("2014-09-25"))); }
@Test public void do_not_return_issues_from_project_branch_when_filtering_by_portfolios() { ComponentDto portfolio = db.components().insertPrivateApplication(db.getDefaultOrganization()); ComponentDto project = db.components().insertMainBranch(); ComponentDto projectBranch = db.components().insertProjectBranch(project); ComponentDto fileOnProjectBranch = db.components().insertComponent(newFileDto(projectBranch)); indexView(portfolio.uuid(), singletonList(project.uuid())); IssueDoc issueOnProject = newDoc(project); IssueDoc issueOnProjectBranch = newDoc(projectBranch); IssueDoc issueOnFileOnProjectBranch = newDoc(fileOnProjectBranch); indexIssues(issueOnProject, issueOnFileOnProjectBranch, issueOnProjectBranch); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(portfolio.uuid())), issueOnProject.key()); assertThatSearchReturnsOnly(IssueQuery.builder().viewUuids(singletonList(portfolio.uuid())).projectUuids(singletonList(project.uuid())), issueOnProject.key()); assertThatSearchReturnsEmpty(IssueQuery.builder().viewUuids(singletonList(portfolio.uuid())).projectUuids(singletonList(projectBranch.uuid()))); }
@Test public void filter_by_languages() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); RuleDefinitionDto ruleDefinitionDto = newRule(); db.rules().insert(ruleDefinitionDto); indexIssues(newDoc("I1", file).setRuleId(ruleDefinitionDto.getId()).setLanguage("xoo")); assertThatSearchReturnsOnly(IssueQuery.builder().languages(singletonList("xoo")), "I1"); assertThatSearchReturnsEmpty(IssueQuery.builder().languages(singletonList("unknown"))); }
@Test public void filter_by_rules() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); RuleDefinitionDto ruleDefinitionDto = newRule(); db.rules().insert(ruleDefinitionDto); indexIssues(newDoc("I1", file).setRuleId(ruleDefinitionDto.getId())); assertThatSearchReturnsOnly(IssueQuery.builder().rules(singletonList(ruleDefinitionDto)), "I1"); assertThatSearchReturnsEmpty(IssueQuery.builder().rules(singletonList(new RuleDefinitionDto().setId(-1)))); }
@Test public void branch_issues_are_ignored_when_no_branch_param() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey("my_branch")); IssueDoc projectIssue = newDoc(project); IssueDoc branchIssue = newDoc(branch); indexIssues(projectIssue, branchIssue); assertThatSearchReturnsOnly(IssueQuery.builder(), projectIssue.key()); }
@Test public void filter_by_projects() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto module = newModuleDto(project); ComponentDto subModule = newModuleDto(module); indexIssues( newDoc("I1", project), newDoc("I2", newFileDto(project, null)), newDoc("I3", module), newDoc("I4", newFileDto(module, null)), newDoc("I5", subModule), newDoc("I6", newFileDto(subModule, null))); assertThatSearchReturnsOnly(IssueQuery.builder().projectUuids(singletonList(project.uuid())), "I1", "I2", "I3", "I4", "I5", "I6"); assertThatSearchReturnsEmpty(IssueQuery.builder().projectUuids(singletonList("unknown"))); }
@Test public void filter_by_created_before() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setFuncCreationDate(parseDate("2014-09-20")), newDoc("I2", file).setFuncCreationDate(parseDate("2014-09-23"))); assertThatSearchReturnsEmpty(IssueQuery.builder().createdBefore(parseDate("2014-09-19"))); // Upper bound is excluded assertThatSearchReturnsEmpty(IssueQuery.builder().createdBefore(parseDate("2014-09-20"))); assertThatSearchReturnsOnly(IssueQuery.builder().createdBefore(parseDate("2014-09-21")), "I1"); assertThatSearchReturnsOnly(IssueQuery.builder().createdBefore(parseDate("2014-09-25")), "I1", "I2"); }
@Test public void filter_by_created_at() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues(newDoc("I1", file).setFuncCreationDate(parseDate("2014-09-20"))); assertThatSearchReturnsOnly(IssueQuery.builder().createdAt(parseDate("2014-09-20")), "I1"); assertThatSearchReturnsEmpty(IssueQuery.builder().createdAt(parseDate("2014-09-21"))); }
@Test public void filter_by_created_after_and_before_take_into_account_timezone() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setFuncCreationDate(parseDateTime("2014-09-20T00:00:00+0100")), newDoc("I2", file).setFuncCreationDate(parseDateTime("2014-09-23T00:00:00+0100"))); assertThatSearchReturnsOnly(IssueQuery.builder().createdAfter(parseDateTime("2014-09-19T23:00:00+0000")).createdBefore(parseDateTime("2014-09-22T23:00:01+0000")), "I1", "I2"); assertThatSearchReturnsEmpty(IssueQuery.builder().createdAfter(parseDateTime("2014-09-19T23:00:01+0000")).createdBefore(parseDateTime("2014-09-22T23:00:00+0000"))); }