private static ComponentQuery buildDbQuery(@Nullable String nameOrKeyQuery) { ComponentQuery.Builder dbQuery = ComponentQuery.builder() .setQualifiers(Qualifiers.PROJECT) .setOnProvisionedOnly(true); ofNullable(nameOrKeyQuery).ifPresent(q -> { dbQuery.setPartialMatchOnKey(true); dbQuery.setNameOrKeyQuery(q); }); return dbQuery.build(); }
@VisibleForTesting ProjectsResult searchProjects(DbSession dbSession, SearchMyProjectsRequest request) { int userId = requireNonNull(userSession.getUserId(), "Current user must be authenticated"); List<Long> componentIds = dbClient.roleDao().selectComponentIdsByPermissionAndUserId(dbSession, UserRole.ADMIN, userId); ComponentQuery dbQuery = ComponentQuery.builder() .setQualifiers(Qualifiers.PROJECT) .setComponentIds(ImmutableSet.copyOf(componentIds.subList(0, Math.min(componentIds.size(), DatabaseUtils.PARTITION_SIZE_FOR_ORACLE)))) .build(); return new ProjectsResult( dbClient.componentDao().selectByQuery(dbSession, dbQuery, offset(request.getPage(), request.getPageSize()), request.getPageSize()), dbClient.componentDao().countByQuery(dbSession, dbQuery)); }
private List<String> selectProjectUuidsByQuery(Consumer<ComponentQuery.Builder> query) { ComponentQuery.Builder builder = ComponentQuery.builder().setQualifiers(PROJECT); query.accept(builder); return underTest.selectByQuery(dbSession, builder.build(), 0, 5) .stream() .map(ComponentDto::uuid) .collect(Collectors.toList()); }
private ComponentQuery toDbQuery(SearchProjectPermissionsRequest wsRequest) { return ComponentQuery.builder() .setQualifiers(qualifiers(wsRequest.getQualifier())) .setNameOrKeyQuery(wsRequest.getQuery()) .build(); }
@Test public void fail_if_partial_match_on_key_without_a_query() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("A query must be provided if a partial match on key is specified."); ComponentQuery.builder().setQualifiers(PROJECT).setPartialMatchOnKey(false).build(); } }
@Test public void fail_if_no_qualifier_provided() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("At least one qualifier must be provided"); ComponentQuery.builder().build(); }
@Test public void selectByQuery_on_empty_list_of_component_key() { db.components().insertPrivateProject(); ComponentQuery dbQuery = ComponentQuery.builder().setQualifiers(PROJECT).setComponentKeys(emptySet()).build(); List<ComponentDto> result = underTest.selectByQuery(dbSession, dbQuery, 0, 10); int count = underTest.countByQuery(dbSession, dbQuery); assertThat(result).isEmpty(); assertThat(count).isEqualTo(0); }
@Test public void build_query_minimal_properties() { ComponentQuery underTest = ComponentQuery.builder() .setQualifiers(PROJECT) .build(); assertThat(underTest.getNameOrKeyQuery()).isNull(); assertThat(underTest.getQualifiers()).containsOnly(PROJECT); }
@Test public void selectByQuery_on_empty_list_of_component_id() { db.components().insertPrivateProject(); ComponentQuery dbQuery = ComponentQuery.builder().setQualifiers(PROJECT).setComponentIds(emptySet()).build(); List<ComponentDto> result = underTest.selectByQuery(dbSession, dbQuery, 0, 10); int count = underTest.countByQuery(dbSession, dbQuery); assertThat(result).isEmpty(); assertThat(count).isEqualTo(0); }
@Test public void selectByQuery_key_with_special_characters() { db.components().insertProjectAndSnapshot(newPrivateProjectDto(db.organizations().insert()).setDbKey("project-_%-key")); db.components().insertProjectAndSnapshot(newPrivateProjectDto(db.organizations().insert()).setDbKey("project-key-that-does-not-match")); ComponentQuery query = ComponentQuery.builder().setNameOrKeyQuery("project-_%-key").setQualifiers(PROJECT).build(); List<ComponentDto> result = underTest.selectByQuery(dbSession, query, 0, 10); assertThat(result).hasSize(1); assertThat(result.get(0).getDbKey()).isEqualTo("project-_%-key"); }
@Test public void count_provisioned() { OrganizationDto organization = db.organizations().insert(); db.components().insertPrivateProject(organization); db.components().insertProjectAndSnapshot(newPrivateProjectDto(organization)); db.components().insertProjectAndSnapshot(ComponentTesting.newView(organization)); Supplier<ComponentQuery.Builder> query = () -> ComponentQuery.builder().setOnProvisionedOnly(true); assertThat(underTest.countByQuery(dbSession, organization.getUuid(), query.get().setQualifiers(PROJECT).build())).isEqualTo(1); assertThat(underTest.countByQuery(dbSession, organization.getUuid(), query.get().setQualifiers(Qualifiers.VIEW).build())).isEqualTo(0); assertThat(underTest.countByQuery(dbSession, organization.getUuid(), query.get().setQualifiers(PROJECT, Qualifiers.VIEW).build())).isEqualTo(1); }
@Test public void empty_list_of_components() { Supplier<ComponentQuery.Builder> query = () -> ComponentQuery.builder().setQualifiers(PROJECT); assertThat(query.get().setComponentIds(emptySet()).build().hasEmptySetOfComponents()).isTrue(); assertThat(query.get().setComponentKeys(emptySet()).build().hasEmptySetOfComponents()).isTrue(); assertThat(query.get().setComponentUuids(emptySet()).build().hasEmptySetOfComponents()).isTrue(); assertThat(query.get().setComponentIds(singleton(404L)).build().hasEmptySetOfComponents()).isFalse(); assertThat(query.get().setComponentKeys(singleton("P1")).build().hasEmptySetOfComponents()).isFalse(); assertThat(query.get().setComponentUuids(singleton("U1")).build().hasEmptySetOfComponents()).isFalse(); }
@Test public void test_getNameOrKeyUpperLikeQuery() { ComponentQuery underTest = ComponentQuery.builder() .setNameOrKeyQuery("NAME/key") .setQualifiers(PROJECT) .build(); assertThat(underTest.getNameOrKeyUpperLikeQuery()).isEqualTo("%NAME//KEY%"); }
@Test public void selectByQuery_on_empty_list_of_component_uuids() { db.components().insertPrivateProject(); ComponentQuery dbQuery = ComponentQuery.builder().setQualifiers(PROJECT).setComponentUuids(emptySet()).build(); List<ComponentDto> result = underTest.selectByQuery(dbSession, dbQuery, 0, 10); int count = underTest.countByQuery(dbSession, dbQuery); assertThat(result).isEmpty(); assertThat(count).isEqualTo(0); }
@Test public void selectByQuery_filter_on_visibility() { db.components().insertComponent(newPrivateProjectDto(db.getDefaultOrganization()).setDbKey("private-key")); db.components().insertComponent(ComponentTesting.newPublicProjectDto(db.getDefaultOrganization()).setDbKey("public-key")); ComponentQuery privateProjectsQuery = ComponentQuery.builder().setPrivate(true).setQualifiers(PROJECT).build(); ComponentQuery publicProjectsQuery = ComponentQuery.builder().setPrivate(false).setQualifiers(PROJECT).build(); ComponentQuery allProjectsQuery = ComponentQuery.builder().setPrivate(null).setQualifiers(PROJECT).build(); assertThat(underTest.selectByQuery(dbSession, privateProjectsQuery, 0, 10)).extracting(ComponentDto::getDbKey).containsExactly("private-key"); assertThat(underTest.selectByQuery(dbSession, publicProjectsQuery, 0, 10)).extracting(ComponentDto::getDbKey).containsExactly("public-key"); assertThat(underTest.selectByQuery(dbSession, allProjectsQuery, 0, 10)).extracting(ComponentDto::getDbKey).containsOnly("public-key", "private-key"); }
@Test public void selectByQuery_on_key_partial_match_case_insensitive() { db.components().insertProjectAndSnapshot(newPrivateProjectDto(db.organizations().insert()).setDbKey("project-key")); ComponentQuery query = ComponentQuery.builder() .setNameOrKeyQuery("JECT-K") .setPartialMatchOnKey(true) .setQualifiers(PROJECT).build(); List<ComponentDto> result = underTest.selectByQuery(dbSession, query, 0, 10); assertThat(result).hasSize(1); assertThat(result.get(0).getDbKey()).isEqualTo("project-key"); }
@Test public void selectByQuery_name_with_special_characters() { db.components().insertProjectAndSnapshot(newPrivateProjectDto(db.getDefaultOrganization()).setName("project-\\_%/-name")); ComponentQuery query = ComponentQuery.builder().setNameOrKeyQuery("-\\_%/-").setQualifiers(PROJECT).build(); List<ComponentDto> result = underTest.selectByQuery(dbSession, query, 0, 10); assertThat(result).hasSize(1); assertThat(result.get(0).name()).isEqualTo("project-\\_%/-name"); }
private void assertThatSelectByQueryThrowsIAE(ComponentQuery.Builder query, String expectedMessage) { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage(expectedMessage); underTest.selectByQuery(dbSession, query.build(), 0, Integer.MAX_VALUE); }
private void assertThatCountByQueryThrowsIAE(ComponentQuery.Builder query, String expectedMessage) { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage(expectedMessage); underTest.countByQuery(dbSession, query.build()); }
private List<ComponentDto> loadComponents(DbSession dbSession, String componentQuery) { ComponentQuery componentDtoQuery = ComponentQuery.builder() .setNameOrKeyQuery(componentQuery) .setQualifiers(POSSIBLE_QUALIFIERS) .build(); return dbClient.componentDao().selectByQuery(dbSession, componentDtoQuery, 0, CeTaskQuery.MAX_COMPONENT_UUIDS); }