@Test public void throw_exception_if_sort_is_not_valid() { try { IssueQuery.builder() .sort("UNKNOWN") .build(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("Bad sort field: UNKNOWN"); } }
@Test public void filter_by_created_after_must_not_be_in_future() { try { underTest.search(IssueQuery.builder().createdAfter(new Date(Long.MAX_VALUE)).build(), new SearchOptions()); Fail.failBecauseExceptionWasNotThrown(IllegalArgumentException.class); } catch (IllegalArgumentException exception) { assertThat(exception.getMessage()).isEqualTo("Start bound cannot be in the future"); } }
@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_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_created_before_must_be_lower_than_after() { try { underTest.search(IssueQuery.builder().createdAfter(parseDate("2014-09-20")).createdBefore(parseDate("2014-09-19")).build(), new SearchOptions()); Fail.failBecauseExceptionWasNotThrown(IllegalArgumentException.class); } catch (IllegalArgumentException exception) { assertThat(exception.getMessage()).isEqualTo("Start bound cannot be larger or equal to end bound"); } }
@Test public void facet_on_projectUuids_return_100_entries_plus_selected_values() { OrganizationDto organizationDto = newOrganizationDto(); indexIssues(rangeClosed(1, 110).mapToObj(i -> newDoc(newPrivateProjectDto(organizationDto, "a" + i))).toArray(IssueDoc[]::new)); IssueDoc issue1 = newDoc(newPrivateProjectDto(organizationDto, "project1")); IssueDoc issue2 = newDoc(newPrivateProjectDto(organizationDto, "project2")); indexIssues(issue1, issue2); assertThatFacetHasSize(IssueQuery.builder().build(), "projects", 100); assertThatFacetHasSize(IssueQuery.builder().projectUuids(asList(issue1.projectUuid(), issue2.projectUuid())).build(), "projects", 102); }
@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 facets_on_languages_return_100_entries_plus_selected_values() { OrganizationDto organizationDto = newOrganizationDto(); ComponentDto project = newPrivateProjectDto(organizationDto); indexIssues(rangeClosed(1, 100).mapToObj(i -> newDoc(newFileDto(project, null)).setLanguage("a" + i)).toArray(IssueDoc[]::new)); IssueDoc issue1 = newDoc(newFileDto(project, null)).setLanguage("language1"); IssueDoc issue2 = newDoc(newFileDto(project, null)).setLanguage("language2"); indexIssues(issue1, issue2); assertThatFacetHasSize(IssueQuery.builder().build(), "languages", 100); assertThatFacetHasSize(IssueQuery.builder().languages(asList(issue1.language(), issue2.language())).build(), "languages", 102); }
@Test public void facets_on_authors_return_100_entries_plus_selected_values() { OrganizationDto organizationDto = newOrganizationDto(); ComponentDto project = newPrivateProjectDto(organizationDto); indexIssues(rangeClosed(1, 110).mapToObj(i -> newDoc(newFileDto(project, null)).setAuthorLogin("a" + i)).toArray(IssueDoc[]::new)); IssueDoc issue1 = newDoc(newFileDto(project, null)).setAuthorLogin("user1"); IssueDoc issue2 = newDoc(newFileDto(project, null)).setAuthorLogin("user2"); indexIssues(issue1, issue2); assertThatFacetHasSize(IssueQuery.builder().build(), "authors", 100); assertThatFacetHasSize(IssueQuery.builder().authors(asList(issue1.authorLogin(), issue2.authorLogin())).build(), "authors", 102); }
@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 facet_on_directories_return_100_entries_plus_selected_values() { OrganizationDto organizationDto = newOrganizationDto(); ComponentDto project = newPrivateProjectDto(organizationDto); indexIssues(rangeClosed(1, 110).mapToObj(i -> newDoc(newFileDto(project, newDirectory(project, "dir" + i))).setDirectoryPath("a" + i)).toArray(IssueDoc[]::new)); IssueDoc issue1 = newDoc(newFileDto(project, newDirectory(project, "path1"))).setDirectoryPath("directory1"); IssueDoc issue2 = newDoc(newFileDto(project, newDirectory(project, "path2"))).setDirectoryPath("directory2"); indexIssues(issue1, issue2); assertThatFacetHasSize(IssueQuery.builder().build(), "directories", 100); assertThatFacetHasSize(IssueQuery.builder().directories(asList(issue1.directoryPath(), issue2.directoryPath())).build(), "directories", 102); }
@Test public void facet_on_created_at_without_issues() { SearchOptions searchOptions = new SearchOptions().addFacets("createdAt"); SearchResponse result = underTest.search(IssueQuery.builder().build(), searchOptions); Map<String, Long> createdAt = new Facets(result, system2.getDefaultTimeZone()).get("createdAt"); assertThat(createdAt).isNull(); }
@Test public void root_user_is_authorized_to_access_all_issues() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); indexIssue(newDoc("I1", project)); userSessionRule.logIn().setRoot(); assertThatSearchReturnsOnly(IssueQuery.builder(), "I1"); }
@Test public void facet_on_created_at_with_one_day() { SearchOptions options = fixtureForCreatedAtFacet(); SearchResponse result = underTest.search(IssueQuery.builder() .createdAfter(parseDateTime("2014-09-01T00:00:00-0100")) .createdBefore(parseDateTime("2014-09-02T00:00:00-0100")).build(), options); Map<String, Long> createdAt = new Facets(result, system2.getDefaultTimeZone()).get("createdAt"); assertThat(createdAt).containsOnly( entry("2014-09-01", 2L)); }
@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"))); }
@Test public void facet_on_projectUuids() { OrganizationDto organizationDto = newOrganizationDto(); ComponentDto project = newPrivateProjectDto(organizationDto, "ABCD"); ComponentDto project2 = newPrivateProjectDto(organizationDto, "EFGH"); indexIssues( newDoc("I1", newFileDto(project, null)), newDoc("I2", newFileDto(project, null)), newDoc("I3", newFileDto(project2, null))); assertThatFacetHasExactly(IssueQuery.builder(), "projects", entry("ABCD", 2L), entry("EFGH", 1L)); }
@Test public void facets_on_severities() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setSeverity(Severity.INFO), newDoc("I2", file).setSeverity(Severity.INFO), newDoc("I3", file).setSeverity(Severity.MAJOR)); assertThatFacetHasOnly(IssueQuery.builder(), "severities", entry("INFO", 2L), entry("MAJOR", 1L)); }
@Test public void facets_on_authors() { ComponentDto project = newPrivateProjectDto(newOrganizationDto()); ComponentDto file = newFileDto(project, null); indexIssues( newDoc("I1", file).setAuthorLogin("steph"), newDoc("I2", file).setAuthorLogin("marcel"), newDoc("I3", file).setAuthorLogin("marcel"), newDoc("I4", file).setAuthorLogin(null)); assertThatFacetHasOnly(IssueQuery.builder(), "authors", entry("steph", 1L), entry("marcel", 2L)); }
@Test public void facets_on_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("marcel-uuid"), newDoc("I4", file).setAssigneeUuid(null)); assertThatFacetHasOnly(IssueQuery.builder(), "assignees", entry("steph-uuid", 1L), entry("marcel-uuid", 2L), entry("", 1L)); }