import org.sonar.api.measures.Metric;
import org.sonar.api.measures.MetricFinder;
import org.sonar.api.web.UserRole;
-import org.sonar.core.permission.GlobalPermissions;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.MyBatis;
-import org.sonar.db.component.ComponentDao;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.property.PropertiesDao;
import org.sonar.db.property.PropertyDto;
import org.sonar.db.qualitygate.QualityGateDto;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.exceptions.Errors;
-import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.Message;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.user.UserSession;
import org.sonar.server.util.Validation;
+import static org.sonar.core.permission.GlobalPermissions.QUALITY_GATE_ADMIN;
+import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException;
+
/**
* Methods from this class should be moved to {@link QualityGateUpdater} and to new classes QualityGateFinder / QualityGateConditionsUpdater / etc.
* in order to have classes with clearer responsibilities and more easily testable (without having to use too much mocks)
private final QualityGateConditionDao conditionDao;
private final MetricFinder metricFinder;
private final PropertiesDao propertiesDao;
- private final ComponentDao componentDao;
private final UserSession userSession;
public QualityGates(DbClient dbClient, MetricFinder metricFinder, UserSession userSession) {
this.conditionDao = dbClient.gateConditionDao();
this.metricFinder = metricFinder;
this.propertiesDao = dbClient.propertiesDao();
- this.componentDao = dbClient.componentDao();
this.userSession = userSession;
}
}
public QualityGateDto rename(long idToRename, String name) {
- checkPermission();
+ checkRoot();
QualityGateDto toRename = getNonNullQgate(idToRename);
validateQualityGate(idToRename, name);
toRename.setName(name);
}
public QualityGateDto copy(long sourceId, String destinationName) {
- checkPermission();
+ checkRoot();
getNonNullQgate(sourceId);
validateQualityGate(null, destinationName);
QualityGateDto destinationGate = new QualityGateDto().setName(destinationName);
}
public void delete(long idToDelete) {
- checkPermission();
+ checkRoot();
QualityGateDto qGate = getNonNullQgate(idToDelete);
DbSession session = dbClient.openSession(false);
try {
}
public void setDefault(DbSession dbSession, @Nullable Long idToUseAsDefault) {
- checkPermission();
+ checkRoot();
if (idToUseAsDefault == null) {
propertiesDao.deleteGlobalProperty(SONAR_QUALITYGATE_PROPERTY, dbSession);
} else {
}
public void deleteCondition(Long condId) {
- checkPermission();
+ checkRoot();
conditionDao.delete(getNonNullCondition(condId));
}
- public void associateProject(Long qGateId, Long projectId) {
- DbSession session = dbClient.openSession(false);
- try {
- getNonNullQgate(qGateId);
- checkPermission(projectId, session);
- propertiesDao.saveProperty(new PropertyDto().setKey(SONAR_QUALITYGATE_PROPERTY).setResourceId(projectId).setValue(qGateId.toString()));
- } finally {
- MyBatis.closeQuietly(session);
- }
- }
-
- public void dissociateProject(Long qGateId, Long projectId) {
- DbSession session = dbClient.openSession(false);
- try {
- getNonNullQgate(qGateId);
- checkPermission(projectId, session);
- propertiesDao.deleteProjectProperty(SONAR_QUALITYGATE_PROPERTY, projectId);
- } finally {
- MyBatis.closeQuietly(session);
- }
+ public void dissociateProject(DbSession dbSession, Long qGateId, ComponentDto project) {
+ getNonNullQgate(qGateId);
+ checkProjectAdmin(project);
+ propertiesDao.deleteProjectProperty(SONAR_QUALITYGATE_PROPERTY, project.getId(), dbSession);
+ dbSession.commit();
}
private boolean isDefault(QualityGateDto qGate) {
PropertyDto defaultQgate = propertiesDao.selectGlobalProperty(SONAR_QUALITYGATE_PROPERTY);
if (defaultQgate == null || StringUtils.isBlank(defaultQgate.getValue())) {
return null;
- } else {
- return Long.valueOf(defaultQgate.getValue());
}
+ return Long.valueOf(defaultQgate.getValue());
}
private QualityGateDto getNonNullQgate(long id) {
- DbSession dbSession = dbClient.openSession(false);
- try {
+ try (DbSession dbSession = dbClient.openSession(false)) {
return getNonNullQgate(dbSession, id);
- } finally {
- dbClient.closeSession(dbSession);
}
}
errors.check(isModifyingCurrentQgate || existingQgate == null, Validation.IS_ALREADY_USED_MESSAGE, "Name");
}
- private void checkPermission() {
- userSession.checkPermission(GlobalPermissions.QUALITY_GATE_ADMIN);
+ private void checkRoot() {
+ userSession.checkIsRoot();
}
- private void checkPermission(Long projectId, DbSession session) {
- ComponentDto project = componentDao.selectOrFailById(session, projectId);
- if (!userSession.hasPermission(GlobalPermissions.QUALITY_GATE_ADMIN)
+ private void checkProjectAdmin(ComponentDto project) {
+ if (!userSession.hasOrganizationPermission(project.getOrganizationUuid(), QUALITY_GATE_ADMIN)
&& !userSession.hasComponentPermission(UserRole.ADMIN, project)) {
- throw new ForbiddenException("Insufficient privileges");
+ throw insufficientPrivilegesException();
}
}
}
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.metric.MetricDto;
+import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.user.UserSession;
import org.sonarqube.ws.WsQualityGates.AppWsResponse.Metric;
private final UserSession userSession;
private final DbClient dbClient;
+ private final DefaultOrganizationProvider defaultOrganizationProvider;
- public AppAction(UserSession userSession, DbClient dbClient) {
+ public AppAction(UserSession userSession, DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider) {
this.userSession = userSession;
this.dbClient = dbClient;
+ this.defaultOrganizationProvider = defaultOrganizationProvider;
}
@Override
@Override
public void handle(Request request, Response response) {
writeProtobuf(AppWsResponse.newBuilder()
- .setEdit(userSession.hasPermission(QUALITY_GATE_ADMIN))
+ .setEdit(userSession.hasOrganizationPermission(defaultOrganizationProvider.get().getUuid(), QUALITY_GATE_ADMIN))
.addAllMetrics(loadMetrics()
.stream()
.map(AppAction::toMetric)
@Override
public void handle(Request request, Response response) {
- ComponentDto project = getProject(request.param(PARAM_PROJECT_ID), request.param(PARAM_PROJECT_KEY));
- qualityGates.dissociateProject(QualityGatesWs.parseId(request, QualityGatesWsParameters.PARAM_GATE_ID), project.getId());
- response.noContent();
+ try (DbSession dbSession = dbClient.openSession(false)) {
+ ComponentDto project = getProject(dbSession, request.param(PARAM_PROJECT_ID), request.param(PARAM_PROJECT_KEY));
+ qualityGates.dissociateProject(dbSession, QualityGatesWs.parseId(request, QualityGatesWsParameters.PARAM_GATE_ID), project);
+ response.noContent();
+ }
}
- private ComponentDto getProject(@Nullable String projectId, @Nullable String projectKey) {
- DbSession dbSession = dbClient.openSession(false);
- try {
- return selectProjectById(dbSession, projectId)
+ private ComponentDto getProject(DbSession dbSession, @Nullable String projectId, @Nullable String projectKey) {
+ return selectProjectById(dbSession, projectId)
.or(() -> componentFinder.getByUuidOrKey(dbSession, projectId, projectKey, ComponentFinder.ParamNames.PROJECT_ID_AND_KEY));
- } finally {
- dbClient.closeSession(dbSession);
- }
}
private Optional<ComponentDto> selectProjectById(DbSession dbSession, @Nullable String projectId) {
}
private void doHandle(SelectWsRequest request) {
- DbSession dbSession = dbClient.openSession(false);
- try {
+ try (DbSession dbSession = dbClient.openSession(false)) {
checkQualityGate(dbClient, request.getGateId());
ComponentDto project = getProject(dbSession, request.getProjectId(), request.getProjectKey());
.setValue(String.valueOf(request.getGateId())));
dbSession.commit();
- } finally {
- dbClient.closeSession(dbSession);
}
}
ComponentDto project = selectProjectById(dbSession, projectId)
.or(() -> componentFinder.getByUuidOrKey(dbSession, projectId, projectKey, ParamNames.PROJECT_ID_AND_KEY));
- if (!userSession.hasPermission(GlobalPermissions.QUALITY_GATE_ADMIN) &&
+ if (!userSession.hasOrganizationPermission(project.getOrganizationUuid(), GlobalPermissions.QUALITY_GATE_ADMIN) &&
!userSession.hasComponentPermission(UserRole.ADMIN, project)) {
throw insufficientPrivilegesException();
}
@Override
public boolean isRoot() {
- return false;
+ return true;
}
@Override
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-import org.apache.commons.lang.RandomStringUtils;
-import org.apache.commons.lang.math.RandomUtils;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.measures.Metric;
import org.sonar.api.measures.Metric.ValueType;
import org.sonar.api.measures.MetricFinder;
-import org.sonar.api.web.UserRole;
-import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.util.Uuids;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.qualitygate.QualityGateDto;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.exceptions.NotFoundException;
-import org.sonar.server.tester.AnonymousMockUserSession;
-import org.sonar.server.tester.MockUserSession;
import org.sonar.server.tester.UserSessionRule;
-import org.sonar.server.user.UserSession;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
@RunWith(MockitoJUnitRunner.class)
public class QualityGatesTest {
- static final long QUALITY_GATE_ID = 42L;
- static final int METRIC_ID = 10;
+ private static final long QUALITY_GATE_ID = 42L;
+ private static final String PROJECT_KEY = "SonarQube";
+ private static final String PROJECT_UUID = Uuids.UUID_EXAMPLE_01;
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Rule
- public UserSessionRule userSessionRule = UserSessionRule.standalone();
+ public UserSessionRule userSession = UserSessionRule.standalone();
- DbSession dbSession = mock(DbSession.class);
- DbClient dbClient = mock(DbClient.class);
- QualityGateDao dao = mock(QualityGateDao.class);
- QualityGateConditionDao conditionDao = mock(QualityGateConditionDao.class);
- PropertiesDao propertiesDao = mock(PropertiesDao.class);
- ComponentDao componentDao = mock(ComponentDao.class);
- MetricFinder metricFinder = mock(MetricFinder.class);
-
- QualityGates underTest;
-
- static final String PROJECT_KEY = "SonarQube";
- static final String PROJECT_UUID = Uuids.UUID_EXAMPLE_01;
-
- UserSession authorizedProfileAdminUserSession = new MockUserSession("gaudol").setName("Olivier").setGlobalPermissions(GlobalPermissions.QUALITY_GATE_ADMIN);
- UserSession authorizedProjectAdminUserSession = new MockUserSession("gaudol").setName("Olivier").addProjectUuidPermissions(UserRole.ADMIN, PROJECT_UUID);
- UserSession unauthorizedUserSession = new MockUserSession("polop").setName("Polop");
- UserSession unauthenticatedUserSession = new AnonymousMockUserSession();
+ private DbSession dbSession = mock(DbSession.class);
+ private DbClient dbClient = mock(DbClient.class);
+ private QualityGateDao dao = mock(QualityGateDao.class);
+ private QualityGateConditionDao conditionDao = mock(QualityGateConditionDao.class);
+ private PropertiesDao propertiesDao = mock(PropertiesDao.class);
+ private ComponentDao componentDao = mock(ComponentDao.class);
+ private MetricFinder metricFinder = mock(MetricFinder.class);
+ private QualityGates underTest;
@Before
public void initialize() {
when(componentDao.selectOrFailById(eq(dbSession), anyLong())).thenReturn(
newProjectDto(OrganizationTesting.newOrganizationDto(), PROJECT_UUID).setId(1L).setKey(PROJECT_KEY));
- underTest = new QualityGates(dbClient, metricFinder, userSessionRule);
+ underTest = new QualityGates(dbClient, metricFinder, userSession);
- userSessionRule.set(authorizedProfileAdminUserSession);
+ userSession.login().setRoot();
}
@Test
underTest.deleteCondition(QUALITY_GATE_ID);
}
- @Test
- public void should_associate_project() {
- Long qGateId = QUALITY_GATE_ID;
- Long projectId = 24L;
- when(dao.selectById(dbSession, qGateId)).thenReturn(new QualityGateDto().setId(qGateId));
- underTest.associateProject(qGateId, projectId);
- verify(dao).selectById(dbSession, qGateId);
- ArgumentCaptor<PropertyDto> propertyCaptor = ArgumentCaptor.forClass(PropertyDto.class);
- verify(propertiesDao).saveProperty(propertyCaptor.capture());
- PropertyDto property = propertyCaptor.getValue();
- assertThat(property.getKey()).isEqualTo("sonar.qualitygate");
- assertThat(property.getResourceId()).isEqualTo(projectId);
- assertThat(property.getValue()).isEqualTo("42");
- }
-
- @Test
- public void associate_project_with_project_admin_permission() {
- userSessionRule.set(authorizedProjectAdminUserSession);
-
- Long qGateId = QUALITY_GATE_ID;
- Long projectId = 24L;
- when(dao.selectById(dbSession, qGateId)).thenReturn(new QualityGateDto().setId(qGateId));
- underTest.associateProject(qGateId, projectId);
- verify(dao).selectById(dbSession, qGateId);
- ArgumentCaptor<PropertyDto> propertyCaptor = ArgumentCaptor.forClass(PropertyDto.class);
- verify(propertiesDao).saveProperty(propertyCaptor.capture());
- PropertyDto property = propertyCaptor.getValue();
- assertThat(property.getKey()).isEqualTo("sonar.qualitygate");
- assertThat(property.getResourceId()).isEqualTo(projectId);
- assertThat(property.getValue()).isEqualTo("42");
- }
-
- @Test
- public void should_dissociate_project() {
- Long qGateId = QUALITY_GATE_ID;
- Long projectId = 24L;
- when(dao.selectById(dbSession, qGateId)).thenReturn(new QualityGateDto().setId(qGateId));
- underTest.dissociateProject(qGateId, projectId);
- verify(dao).selectById(dbSession, qGateId);
- verify(propertiesDao).deleteProjectProperty("sonar.qualitygate", projectId);
- }
-
- @Test
- public void dissociate_project_with_project_admin_permission() {
- userSessionRule.set(authorizedProjectAdminUserSession);
-
- Long qGateId = QUALITY_GATE_ID;
- Long projectId = 24L;
- when(dao.selectById(dbSession, qGateId)).thenReturn(new QualityGateDto().setId(qGateId));
- underTest.dissociateProject(qGateId, projectId);
- verify(dao).selectById(dbSession, qGateId);
- verify(propertiesDao).deleteProjectProperty("sonar.qualitygate", projectId);
- }
-
@Test
public void should_copy_qgate() {
String name = "Atlantis";
dataMetric, hiddenMetric, nullHiddenMetric, alertMetric, ratingMetric, classicMetric));
}
- private Metric addMetric(String metricKey, String metricName) {
- Metric metric = Mockito.spy(CoreMetrics.COVERAGE);
- when(metric.getId()).thenReturn(METRIC_ID);
- when(metric.getName()).thenReturn(metricName);
- when(metricFinder.findByKey(metricKey)).thenReturn(metric);
- return metric;
- }
-
- private QualityGateConditionDto newCondition(String metricKey, int metricId) {
- return new QualityGateConditionDto()
- .setId(RandomUtils.nextLong())
- .setMetricKey(metricKey)
- .setMetricId(metricId)
- .setQualityGateId(QUALITY_GATE_ID)
- .setOperator("GT")
- .setWarningThreshold(RandomStringUtils.randomAlphanumeric(15))
- .setErrorThreshold(RandomStringUtils.randomAlphanumeric(15))
- .setPeriod(RandomUtils.nextBoolean() ? 1 : null);
- }
-
- private QualityGateConditionDto insertQualityGateConditionDto(QualityGateConditionDto conditionDto) {
- when(conditionDao.selectById(conditionDto.getId())).thenReturn(conditionDto);
- return conditionDto;
- }
-
}
import org.junit.Test;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
-import org.sonar.core.permission.GlobalPermissions;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.metric.MetricDto;
+import org.sonar.server.organization.DefaultOrganizationProvider;
+import org.sonar.server.organization.TestDefaultOrganizationProvider;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.WsActionTester;
import org.sonarqube.ws.MediaTypes;
@Rule
public DbTester db = DbTester.create(System2.INSTANCE);
- DbClient dbClient = db.getDbClient();
- DbSession dbSession = db.getSession();
-
- AppAction underTest = new AppAction(userSession, dbClient);
- WsActionTester ws = new WsActionTester(underTest);
+ private DbClient dbClient = db.getDbClient();
+ private DbSession dbSession = db.getSession();
+ private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db);
+ private AppAction underTest = new AppAction(userSession, dbClient, defaultOrganizationProvider);
+ private WsActionTester ws = new WsActionTester(underTest);
@Test
public void return_metrics() throws Exception {
@Test
public void return_edit_to_false_when_not_quality_gate_permission() throws Exception {
- userSession.logIn("not-admin").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION);
+ userSession.logIn();
AppWsResponse response = executeRequest();
@Test
public void return_edit_to_true_when_quality_gate_permission() throws Exception {
- userSession.logIn("admin").setGlobalPermissions(QUALITY_GATE_ADMIN);
+ userSession.logIn().addOrganizationPermission(db.getDefaultOrganization(), QUALITY_GATE_ADMIN);
AppWsResponse response = executeRequest();
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
-import org.sonar.db.component.ComponentDbTester;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.property.PropertyDto;
import org.sonar.db.qualitygate.QualityGateDto;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
-import static org.sonar.core.permission.GlobalPermissions.QUALITY_GATE_ADMIN;
import static org.sonar.core.permission.GlobalPermissions.QUALITY_PROFILE_ADMIN;
import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
-import static org.sonar.db.component.ComponentTesting.newProjectDto;
import static org.sonar.server.qualitygate.QualityGates.SONAR_QUALITYGATE_PROPERTY;
public class DeselectActionTest {
@Rule
public DbTester db = DbTester.create(System2.INSTANCE);
- DbClient dbClient = db.getDbClient();
- DbSession dbSession = db.getSession();
- ComponentDbTester componentDb = new ComponentDbTester(db);
- QualityGates qualityGates = new QualityGates(dbClient, mock(MetricFinder.class), userSession);
-
- WsActionTester ws;
-
- DeselectAction underTest;
+ private DbClient dbClient = db.getDbClient();
+ private DbSession dbSession = db.getSession();
+ private QualityGates qualityGates = new QualityGates(dbClient, mock(MetricFinder.class), userSession);
+ private WsActionTester ws;
+ private ComponentDto project;
+ private QualityGateDto gate;
+ private DeselectAction underTest;
@Before
public void setUp() {
underTest = new DeselectAction(qualityGates, dbClient, componentFinder);
ws = new WsActionTester(underTest);
- userSession.logIn("login").setGlobalPermissions(QUALITY_GATE_ADMIN);
+ project = db.components().insertProject();
+ gate = insertQualityGate();
}
@Test
public void deselect_by_id() throws Exception {
- ComponentDto project = insertProject();
- ComponentDto anotherProject = componentDb.insertProject();
- QualityGateDto gate = insertQualityGate();
+ userSession.logIn().setRoot();
+
+ ComponentDto anotherProject = db.components().insertProject();
String gateId = String.valueOf(gate.getId());
associateProjectToQualityGate(project.getId(), gateId);
associateProjectToQualityGate(anotherProject.getId(), gateId);
@Test
public void deselect_by_uuid() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
+ userSession.logIn().setRoot();
+
String gateId = String.valueOf(gate.getId());
associateProjectToQualityGate(project.getId(), gateId);
@Test
public void deselect_by_key() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
+ userSession.logIn().setRoot();
+
String gateId = String.valueOf(gate.getId());
associateProjectToQualityGate(project.getId(), gateId);
@Test
public void project_admin() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
associateProjectToQualityGate(project.getId(), gateId);
- userSession.logIn("login").addProjectUuidPermissions(UserRole.ADMIN, project.uuid());
+ userSession.logIn().addProjectUuidPermissions(UserRole.ADMIN, project.uuid());
callByKey(gateId, project.getKey());
@Test
public void system_admin() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
associateProjectToQualityGate(project.getId(), gateId);
- userSession.logIn("login").setGlobalPermissions(SYSTEM_ADMIN);
+ userSession.logIn().setGlobalPermissions(SYSTEM_ADMIN);
callByKey(gateId, project.getKey());
@Test
public void fail_when_no_quality_gate() throws Exception {
- ComponentDto project = insertProject();
-
expectedException.expect(NotFoundException.class);
- callByKey("1", project.getKey());
+ callByKey("-1", project.getKey());
}
@Test
public void fail_when_no_project_id() throws Exception {
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
expectedException.expect(NotFoundException.class);
@Test
public void fail_when_no_project_key() throws Exception {
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
expectedException.expect(NotFoundException.class);
@Test
public void fail_when_anonymous() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
userSession.anonymous();
@Test
public void fail_when_not_project_admin() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
- userSession.logIn("login").addProjectUuidPermissions(UserRole.ISSUE_ADMIN, project.uuid());
+ userSession.logIn().addProjectUuidPermissions(UserRole.ISSUE_ADMIN, project.uuid());
expectedException.expect(ForbiddenException.class);
@Test
public void fail_when_not_quality_gates_admin() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
- userSession.logIn("login").setGlobalPermissions(QUALITY_PROFILE_ADMIN);
+ userSession.logIn().addOrganizationPermission(project.getOrganizationUuid(), QUALITY_PROFILE_ADMIN);
expectedException.expect(ForbiddenException.class);
callByKey(gateId, project.getKey());
}
- private ComponentDto insertProject() {
- return componentDb.insertComponent(newProjectDto(db.organizations().insert()));
- }
-
private QualityGateDto insertQualityGate() {
QualityGateDto gate = new QualityGateDto().setName("Custom");
dbClient.qualityGateDao().insert(dbSession, gate);
SelectAction selectAction = new SelectAction(mock(DbClient.class), mock(UserSessionRule.class), mock(ComponentFinder.class));
tester = new WsTester(new QualityGatesWs(
- new ListAction(qGates), new ShowAction(qGates), new SearchAction(projectFinder),
- new CreateAction(null, null, null), new CopyAction(qGates), new DestroyAction(qGates), new RenameAction(qGates),
+ new ListAction(qGates),
+ new ShowAction(qGates),
+ new SearchAction(projectFinder),
+ new CreateAction(null, null, null),
+ new CopyAction(qGates),
+ new DestroyAction(qGates), new RenameAction(qGates),
new SetAsDefaultAction(qGates), new UnsetDefaultAction(qGates),
- new CreateConditionAction(null, null, null), new UpdateConditionAction(null, null, null), new DeleteConditionAction(qGates),
- selectAction, new DeselectAction(qGates, mock(DbClient.class), mock(ComponentFinder.class)), new AppAction(null, null)));
+ new CreateConditionAction(null, null, null),
+ new UpdateConditionAction(null, null, null),
+ new DeleteConditionAction(qGates),
+ selectAction,
+ new DeselectAction(qGates, mock(DbClient.class), mock(ComponentFinder.class)),
+ new AppAction(null, null, null)));
}
@Test
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
-import org.sonar.db.component.ComponentDbTester;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.qualitygate.QualityGateDto;
import org.sonar.server.component.ComponentFinder;
import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.core.permission.GlobalPermissions.QUALITY_GATE_ADMIN;
import static org.sonar.core.permission.GlobalPermissions.QUALITY_PROFILE_ADMIN;
-import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
import static org.sonar.server.qualitygate.QualityGates.SONAR_QUALITYGATE_PROPERTY;
public class SelectActionTest {
@Rule
public DbTester db = DbTester.create(System2.INSTANCE);
- DbClient dbClient = db.getDbClient();
- DbSession dbSession = db.getSession();
- ComponentDbTester componentDb = new ComponentDbTester(db);
- WsActionTester ws;
-
- SelectAction underTest;
+ private DbClient dbClient = db.getDbClient();
+ private DbSession dbSession = db.getSession();
+ private WsActionTester ws;
+ private ComponentDto project;
+ private QualityGateDto gate;
+ private SelectAction underTest;
@Before
public void setUp() {
ComponentFinder componentFinder = new ComponentFinder(dbClient);
underTest = new SelectAction(dbClient, userSession, componentFinder);
ws = new WsActionTester(underTest);
-
- userSession.logIn("login").setGlobalPermissions(QUALITY_GATE_ADMIN);
+ project = db.components().insertProject();
+ gate = insertQualityGate();
}
@Test
public void select_by_id() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
+ userSession.logIn().setRoot();
String gateId = String.valueOf(gate.getId());
callById(gateId, project.getId());
@Test
public void select_by_uuid() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
+ userSession.logIn().setRoot();
String gateId = String.valueOf(gate.getId());
callByUuid(gateId, project.uuid());
@Test
public void select_by_key() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
+ userSession.logIn().setRoot();
String gateId = String.valueOf(gate.getId());
callByKey(gateId, project.getKey());
+
assertSelected(gateId, project.getId());
}
@Test
public void project_admin() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
+ userSession.logIn().addProjectUuidPermissions(UserRole.ADMIN, project.uuid());
String gateId = String.valueOf(gate.getId());
- userSession.logIn("login").addProjectUuidPermissions(UserRole.ADMIN, project.uuid());
-
callByKey(gateId, project.getKey());
+
assertSelected(gateId, project.getId());
}
@Test
- public void system_admin() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
+ public void gate_administrator_can_associate_a_gate_to_a_project() throws Exception {
+ userSession.logIn().addOrganizationPermission(project.getOrganizationUuid(), QUALITY_GATE_ADMIN);
String gateId = String.valueOf(gate.getId());
- userSession.logIn("login").setGlobalPermissions(SYSTEM_ADMIN);
-
callByKey(gateId, project.getKey());
+
assertSelected(gateId, project.getId());
- ;
}
@Test
public void fail_when_no_quality_gate() throws Exception {
- ComponentDto project = insertProject();
-
expectedException.expect(NotFoundException.class);
callByKey("1", project.getKey());
}
@Test
public void fail_when_no_project_id() throws Exception {
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
expectedException.expect(NotFoundException.class);
@Test
public void fail_when_no_project_key() throws Exception {
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
expectedException.expect(NotFoundException.class);
@Test
public void fail_when_anonymous() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
userSession.anonymous();
@Test
public void fail_when_not_project_admin() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
- userSession.logIn("login").addProjectUuidPermissions(UserRole.ISSUE_ADMIN, project.uuid());
+ userSession.logIn().addProjectUuidPermissions(UserRole.ISSUE_ADMIN, project.uuid());
expectedException.expect(ForbiddenException.class);
callByKey(gateId, project.getKey());
@Test
public void fail_when_not_quality_gates_admin() throws Exception {
- ComponentDto project = insertProject();
- QualityGateDto gate = insertQualityGate();
String gateId = String.valueOf(gate.getId());
- userSession.logIn("login").setGlobalPermissions(QUALITY_PROFILE_ADMIN);
+ userSession.logIn().setGlobalPermissions(QUALITY_PROFILE_ADMIN);
expectedException.expect(ForbiddenException.class);
callByKey(gateId, project.getKey());
}
- private ComponentDto insertProject() {
- return componentDb.insertProject(db.organizations().insert());
- }
-
private QualityGateDto insertQualityGate() {
QualityGateDto gate = new QualityGateDto().setName("Custom");
dbClient.qualityGateDao().insert(dbSession, gate);