permissionTemplateService.applyDefaultPermissionTemplate(dbSession, provisionedComponent.getKey());
if (Qualifiers.PROJECT.equals(provisionedComponent.qualifier())
&& permissionTemplateService.hasDefaultTemplateWithPermissionOnProjectCreator(dbSession, provisionedComponent)) {
- favoriteUpdater.add(dbSession, provisionedComponent.getId());
+ favoriteUpdater.add(dbSession, provisionedComponent);
dbSession.commit();
}
// "provisioning" permission is check in ComponentService
ComponentDto project = componentService.create(dbSession, newProject);
if (permissionTemplateService.hasDefaultTemplateWithPermissionOnProjectCreator(dbSession, project)) {
- favoriteUpdater.add(dbSession, project.getId());
+ favoriteUpdater.add(dbSession, project);
dbSession.commit();
}
package org.sonar.server.favorite;
+import java.util.List;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.property.PropertyDto;
+import org.sonar.db.property.PropertyQuery;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.user.UserSession;
/**
* Set favorite to the logged in user. If no user is logged, no action is done
*/
- public void add(DbSession dbSession, long componentDtoId) {
+ public void add(DbSession dbSession, ComponentDto componentDto) {
if (!userSession.isLoggedIn()) {
return;
}
+ List<PropertyDto> existingFavoriteOnComponent = dbClient.propertiesDao().selectByQuery(PropertyQuery.builder()
+ .setKey(PROP_FAVORITE_KEY)
+ .setUserId(userSession.getUserId())
+ .setComponentId(componentDto.getId())
+ .build(), dbSession);
+ checkRequest(existingFavoriteOnComponent.isEmpty(), "Component '%s' is already a favorite", componentDto.getKey());
dbClient.propertiesDao().saveProperty(dbSession, new PropertyDto()
.setKey(PROP_FAVORITE_KEY)
- .setResourceId(componentDtoId)
+ .setResourceId(componentDto.getId())
.setUserId(Long.valueOf(userSession.getUserId())));
}
userSession
.checkLoggedIn()
.checkComponentUuidPermission(UserRole.USER, componentDto.uuid());
- favoriteUpdater.add(dbSession, componentDto.getId());
+ favoriteUpdater.add(dbSession, componentDto);
dbSession.commit();
}
};
assertThat(project.qualifier()).isEqualTo(qualifier);
assertThat(project.getId()).isEqualTo(result);
verify(permissionTemplateService).applyDefaultPermissionTemplate(any(DbSession.class), eq(componentKey));
- verify(favoriteUpdater).add(any(DbSession.class), eq(project.getId()));
+ verify(favoriteUpdater).add(any(DbSession.class), eq(project));
}
@Test(expected = BadRequestException.class)
verifyReportIsPersisted(TASK_UUID);
verify(permissionTemplateService).applyDefault(any(DbSession.class), eq(createdProject), anyLong());
- verify(favoriteUpdater).add(any(DbSession.class), eq(createdProject.getId()));
+ verify(favoriteUpdater).add(any(DbSession.class), eq(createdProject));
verify(queue).submit(argThat(new TypeSafeMatcher<CeTaskSubmit>() {
@Override
protected boolean matchesSafely(CeTaskSubmit submit) {
import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
import org.sonar.api.utils.System2;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
+import org.sonar.db.component.ComponentDto;
import org.sonar.db.property.PropertyQuery;
+import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.tester.UserSessionRule;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.sonar.db.component.ComponentTesting.newProjectDto;
public class FavoriteUpdaterTest {
private static final long COMPONENT_ID = 23L;
+ private static final String COMPONENT_KEY = "K1";
+ private static final ComponentDto COMPONENT = newProjectDto().setId(COMPONENT_ID).setKey(COMPONENT_KEY);
private static final long USER_ID = 42L;
@Rule
public UserSessionRule userSession = UserSessionRule.standalone().login().setUserId((int) USER_ID);
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
@Rule
public DbTester db = DbTester.create(System2.INSTANCE);
public void put_favorite() {
assertNoFavorite();
- underTest.add(dbSession, COMPONENT_ID);
+ underTest.add(dbSession, COMPONENT);
assertFavorite();
}
public void do_nothing_when_not_logged_in() {
userSession.anonymous();
- underTest.add(dbSession, COMPONENT_ID);
+ underTest.add(dbSession, COMPONENT);
assertNoFavorite();
}
@Test
- public void put_existing_favorite() {
- underTest.add(dbSession, COMPONENT_ID);
+ public void fail_when_adding_existing_favorite() {
+ underTest.add(dbSession, COMPONENT);
assertFavorite();
- underTest.add(dbSession, COMPONENT_ID);
+ expectedException.expect(BadRequestException.class);
+ expectedException.expectMessage("Component 'K1' is already a favorite");
- assertFavorite();
+ underTest.add(dbSession, COMPONENT);
}
private void assertFavorite() {