import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.RowNotFoundException;
+import org.sonar.db.component.ComponentDto;
import org.sonar.db.organization.OrganizationDto;
import static java.util.Arrays.asList;
}
@Test
- public void clean_users_homepage() {
+ public void clean_users_homepage_when_deleting_organization() {
UserDto userUnderTest = newUserDto().setHomepageType("ORGANIZATION").setHomepageValue("dummy-organization-UUID");
underTest.insert(session, userUnderTest);
assertThat(untouchedUserReloaded.getHomepageValue()).isEqualTo(untouchedUser.getHomepageValue());
}
+ @Test
+ public void clean_users_homepage_when_deleting_project() {
+
+ UserDto userUnderTest = newUserDto().setHomepageType("PROJECT").setHomepageValue("dummy-project-UUID");
+ underTest.insert(session, userUnderTest);
+
+ UserDto untouchedUser = newUserDto().setHomepageType("PROJECT").setHomepageValue("not-so-dummy-project-UUID");
+ underTest.insert(session, untouchedUser);
+
+ session.commit();
+
+ underTest.cleanHomepage(session, new ComponentDto().setUuid("dummy-project-UUID"));
+
+ UserDto userWithAHomepageReloaded = underTest.selectUserById(session, userUnderTest.getId());
+ assertThat(userWithAHomepageReloaded.getUpdatedAt()).isEqualTo(NOW);
+ assertThat(userWithAHomepageReloaded.getHomepageType()).isNull();
+ assertThat(userWithAHomepageReloaded.getHomepageValue()).isNull();
+
+ UserDto untouchedUserReloaded = underTest.selectUserById(session, untouchedUser.getId());
+ assertThat(untouchedUserReloaded.getUpdatedAt()).isEqualTo(untouchedUser.getUpdatedAt());
+ assertThat(untouchedUserReloaded.getHomepageType()).isEqualTo(untouchedUser.getHomepageType());
+ assertThat(untouchedUserReloaded.getHomepageValue()).isEqualTo(untouchedUser.getHomepageValue());
+ }
+
@Test
public void does_not_fail_to_deactivate_missing_user() {
underTest.deactivateUser(session, UserTesting.newUserDto());
import org.sonar.db.DbTester;
import org.sonar.db.component.ComponentDbTester;
import org.sonar.db.component.ComponentDto;
+import org.sonar.db.component.ResourceTypesRule;
+import org.sonar.db.user.UserDto;
import org.sonar.server.component.ComponentCleanerService;
-import org.sonar.server.component.TestComponentFinder;
+import org.sonar.server.es.TestProjectIndexers;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.exceptions.UnauthorizedException;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
+import static org.sonar.api.resources.Qualifiers.PROJECT;
+import static org.sonar.api.web.UserRole.ADMIN;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER;
+import static org.sonar.db.user.UserTesting.newUserDto;
+import static org.sonar.server.component.TestComponentFinder.from;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.CONTROLLER;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_PROJECT;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_PROJECT_ID;
@Rule
public ExpectedException expectedException = ExpectedException.none();
+
private WsTester ws;
private DbClient dbClient = db.getDbClient();
+ private DbSession dbSession = db.getSession();
private ComponentDbTester componentDbTester = new ComponentDbTester(db);
private ComponentCleanerService componentCleanerService = mock(ComponentCleanerService.class);
+
+
+
@Before
public void setUp() {
ws = new WsTester(new ProjectsWs(
new DeleteAction(
componentCleanerService,
- TestComponentFinder.from(db),
+ from(db),
dbClient,
userSessionRule)));
}
@Test
public void project_administrator_deletes_the_project_by_uuid() throws Exception {
ComponentDto project = componentDbTester.insertPrivateProject();
- userSessionRule.logIn().addProjectPermission(UserRole.ADMIN, project);
+ userSessionRule.logIn().addProjectPermission(ADMIN, project);
call(newRequest().setParam(PARAM_PROJECT_ID, project.uuid()));
@Test
public void project_administrator_deletes_the_project_by_key() throws Exception {
ComponentDto project = componentDbTester.insertPrivateProject();
- userSessionRule.logIn().addProjectPermission(UserRole.ADMIN, project);
+ userSessionRule.logIn().addProjectPermission(ADMIN, project);
call(newRequest().setParam(PARAM_PROJECT, project.getDbKey()));
assertThat(verifyDeletedKey()).isEqualTo(project.getDbKey());
}
+ @Test
+ public void project_deletion_also_ensure_that_homepage_on_this_project_if_it_exists_is_cleared() throws Exception {
+
+ ComponentDto project = componentDbTester.insertPrivateProject();
+ UserDto insert = dbClient.userDao().insert(dbSession,
+ newUserDto().setHomepageType("PROJECT").setHomepageValue(project.uuid()));
+ dbSession.commit();
+
+ userSessionRule.logIn().addProjectPermission(ADMIN, project);
+
+ new WsTester(new ProjectsWs(
+ new DeleteAction(
+ new ComponentCleanerService(dbClient, new ResourceTypesRule().setAllQualifiers(PROJECT),
+ new TestProjectIndexers()), from(db), dbClient, userSessionRule)))
+ .newPostRequest(CONTROLLER, ACTION)
+ .setParam(PARAM_PROJECT, project.getDbKey())
+ .execute();
+
+ UserDto userReloaded = dbClient.userDao().selectUserById(dbSession, insert.getId());
+ assertThat(userReloaded.getHomepageType()).isNull();
+ assertThat(userReloaded.getHomepageValue()).isNull();
+ }
+
@Test
public void return_403_if_not_project_admin_nor_org_admin() throws Exception {
ComponentDto project = componentDbTester.insertPrivateProject();