@Override protected void configureModule() { add( FavouritesWs.class, FavoriteFinder.class, FavoriteUpdater.class, FavoritesWs.class, AddAction.class, RemoveAction.class, SearchAction.class); }
private List<ComponentDto> getAuthorizedFavorites() { List<ComponentDto> componentDtos = favoriteFinder.list(); return userSession.keepAuthorizedComponents(UserRole.USER, componentDtos); }
@Test public void put_favorite() { assertNoFavorite(); underTest.add(dbSession, COMPONENT, USER_ID); assertFavorite(); }
@Test public void do_nothing_when_no_user() { underTest.add(dbSession, COMPONENT, null); assertNoFavorite(); }
private void handlePermissionTemplate(DbSession dbSession, ComponentDto componentDto, String organizationUuid, @Nullable Integer userId) { permissionTemplateService.applyDefault(dbSession, organizationUuid, componentDto, userId); if (componentDto.qualifier().equals(PROJECT) && permissionTemplateService.hasDefaultTemplateWithPermissionOnProjectCreator(dbSession, organizationUuid, componentDto)) { favoriteUpdater.add(dbSession, componentDto, userId); } }
@Test public void fail_when_adding_existing_favorite() { underTest.add(dbSession, COMPONENT, USER_ID); assertFavorite(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Component 'K1' is already a favorite"); underTest.add(dbSession, COMPONENT, USER_ID); }
@Test public void verify_count_of_added_components() { ComponentContainer container = new ComponentContainer(); new FavoriteModule().configure(container); assertThat(container.size()).isEqualTo(7 + 2); } }
private Consumer<Request> removeFavorite() { return request -> { try (DbSession dbSession = dbClient.openSession(false)) { ComponentDto component = componentFinder.getByKey(dbSession, request.mandatoryParam(PARAM_COMPONENT)); userSession .checkLoggedIn(); favoriteUpdater.remove(dbSession, component, userSession.isLoggedIn() ? userSession.getUserId() : null); dbSession.commit(); } }; } }
List<ComponentDto> favoriteDtos = favoriteFinder.list(); if (favoriteDtos.isEmpty() && recentlyBrowsedKeys.isEmpty()) { return newBuilder().build();
private Consumer<Request> addFavorite() { return request -> { try (DbSession dbSession = dbClient.openSession(false)) { ComponentDto componentDto = componentFinder.getByKey(dbSession, request.mandatoryParam(PARAM_COMPONENT)); userSession .checkLoggedIn() .checkComponentPermission(UserRole.USER, componentDto); favoriteUpdater.add(dbSession, componentDto, userSession.isLoggedIn() ? userSession.getUserId() : null); dbSession.commit(); } }; } }
@Override protected void configureModule() { add( FavouritesWs.class, FavoriteFinder.class, FavoriteUpdater.class, FavoritesWs.class, AddAction.class, RemoveAction.class, SearchAction.class); }
List<ComponentDto> favorites = favoriteFinder.list(); Set<String> favoriteKeys = favorites.stream().map(ComponentDto::getDbKey).collect(MoreCollectors.toSet(favorites.size())); SuggestionQuery.Builder queryBuilder = SuggestionQuery.builder()
private void handlePermissionTemplate(DbSession dbSession, ComponentDto componentDto, String organizationUuid, @Nullable Integer userId) { permissionTemplateService.applyDefault(dbSession, organizationUuid, componentDto, userId); if (componentDto.qualifier().equals(PROJECT) && permissionTemplateService.hasDefaultTemplateWithPermissionOnProjectCreator(dbSession, organizationUuid, componentDto)) { favoriteUpdater.add(dbSession, componentDto, userId); } }
@Test public void suggestions_without_query_should_not_contain_favorites_without_permission() { ComponentDto project = db.components().insertComponent(newPrivateProjectDto(organization)); doReturn(singletonList(project)).when(favoriteFinder).list(); componentIndexer.indexOnStartup(null); SuggestionsWsResponse response = ws.newRequest() .setMethod("POST") .executeProtobuf(SuggestionsWsResponse.class); assertThat(response.getResultsList()) .flatExtracting(Category::getItemsList) .isEmpty(); }
request.setParam(PARAM_QUERY, namePrefix); } else { doReturn(projects).when(favoriteFinder).list();
@Test public void suggestions_without_query_should_contain_favorites() { ComponentDto project = db.components().insertComponent(newPrivateProjectDto(organization)); doReturn(singletonList(project)).when(favoriteFinder).list(); componentIndexer.indexOnStartup(null); userSessionRule.addProjectPermission(USER, project); SuggestionsWsResponse response = ws.newRequest() .setMethod("POST") .executeProtobuf(SuggestionsWsResponse.class); // assert match in qualifier "TRK" assertThat(response.getResultsList()) .filteredOn(q -> q.getItemsCount() > 0) .extracting(Category::getQ) .containsExactly(PROJECT); // assert correct id to be found assertThat(response.getResultsList()) .flatExtracting(Category::getItemsList) .extracting(Suggestion::getKey, Suggestion::getIsFavorite) .containsExactly(tuple(project.getDbKey(), true)); }
@Test public void suggestions_without_query_should_contain_recently_browsed_favorites() { ComponentDto project = db.components().insertComponent(newPrivateProjectDto(organization)); doReturn(singletonList(project)).when(favoriteFinder).list(); componentIndexer.indexOnStartup(null); userSessionRule.addProjectPermission(USER, project); SuggestionsWsResponse response = ws.newRequest() .setMethod("POST") .setParam(PARAM_RECENTLY_BROWSED, project.getDbKey()) .executeProtobuf(SuggestionsWsResponse.class); // assert match in qualifier "TRK" assertThat(response.getResultsList()) .filteredOn(q -> q.getItemsCount() > 0) .extracting(Category::getQ) .containsExactly(Qualifiers.PROJECT); // assert correct id to be found assertThat(response.getResultsList()) .flatExtracting(Category::getItemsList) .extracting(Suggestion::getKey, Suggestion::getIsFavorite, Suggestion::getIsRecentlyBrowsed) .containsExactly(tuple(project.getDbKey(), true, true)); }
@Test public void suggestions_without_query_should_order_results() { ComponentDto project1 = db.components().insertComponent(newPrivateProjectDto(organization).setName("Alpha")); ComponentDto project2 = db.components().insertComponent(newPrivateProjectDto(organization).setName("Bravo")); ComponentDto project3 = db.components().insertComponent(newPrivateProjectDto(organization).setName("Charlie")); ComponentDto project4 = db.components().insertComponent(newPrivateProjectDto(organization).setName("Delta")); doReturn(asList(project4, project2)).when(favoriteFinder).list(); componentIndexer.indexOnStartup(null); userSessionRule.addProjectPermission(USER, project1); userSessionRule.addProjectPermission(USER, project2); userSessionRule.addProjectPermission(USER, project3); userSessionRule.addProjectPermission(USER, project4); SuggestionsWsResponse response = ws.newRequest() .setMethod("POST") .setParam(PARAM_RECENTLY_BROWSED, Stream.of(project3, project1).map(ComponentDto::getDbKey).collect(joining(","))) .executeProtobuf(SuggestionsWsResponse.class); // assert order of keys assertThat(response.getResultsList()) .flatExtracting(Category::getItemsList) .extracting(Suggestion::getName, Suggestion::getIsFavorite, Suggestion::getIsRecentlyBrowsed) .containsExactly( tuple("Bravo", true, false), tuple("Delta", true, false), tuple("Alpha", false, true), tuple("Charlie", false, true)); }
@Test public void should_mark_favorite_items() { ComponentDto favouriteProject = db.components().insertComponent(newPrivateProjectDto(organization).setName("Project1")); ComponentDto nonFavouriteProject = db.components().insertComponent(newPublicProjectDto(organization).setName("Project2")); doReturn(singletonList(favouriteProject)).when(favoriteFinder).list(); componentIndexer.indexOnAnalysis(favouriteProject.projectUuid()); componentIndexer.indexOnAnalysis(nonFavouriteProject.projectUuid()); authorizationIndexerTester.allowOnlyAnyone(favouriteProject, nonFavouriteProject); SuggestionsWsResponse response = ws.newRequest() .setMethod("POST") .setParam(PARAM_QUERY, "Project") .executeProtobuf(SuggestionsWsResponse.class); assertThat(response.getResultsList()) .flatExtracting(Category::getItemsList) .extracting(Suggestion::getKey, Suggestion::getIsFavorite) .containsExactly(tuple(favouriteProject.getDbKey(), true), tuple(nonFavouriteProject.getDbKey(), false)); }
private List<ComponentDto> getAuthorizedFavorites() { List<ComponentDto> componentDtos = favoriteFinder.list(); return userSession.keepAuthorizedComponents(UserRole.USER, componentDtos); }