import org.sonar.api.server.ws.WebService;
import org.sonar.api.server.ws.WebService.Param;
import org.sonar.api.utils.text.JsonWriter;
-import org.sonar.api.web.UserRole;
import org.sonar.core.component.ComponentDto;
+import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import org.sonar.server.db.DbClient;
.createAction("provisioned")
.setDescription(
"Get the list of provisioned projects.<br /> " +
- "Require admin role.")
+ "Require 'Provision Projects' permission.")
.setSince("5.2")
.setResponseExample(Resources.getResource(getClass(), "projects-example-provisioned.json"))
.setHandler(this)
@Override
public void handle(Request request, Response response) throws Exception {
- userSession.checkGlobalPermission(UserRole.ADMIN, "You need admin rights.");
+ userSession.checkGlobalPermission(GlobalPermissions.PROVISIONING);
SearchOptions options = new SearchOptions().setPage(
request.mandatoryParamAsInt(Param.PAGE),
request.mandatoryParamAsInt(Param.PAGE_SIZE)
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.ExpectedException;
import org.sonar.api.server.ws.WebService.Param;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
-import org.sonar.api.web.UserRole;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.SnapshotDto;
+import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.component.ComponentTesting;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.component.db.SnapshotDao;
import org.sonar.server.db.DbClient;
+import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.WsTester;
+import org.sonar.test.DbTests;
import org.sonar.test.JsonAssert;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
+@Category(DbTests.class)
public class ProjectsProvisionedActionTest {
@ClassRule
public static DbTester db = new DbTester();
@Rule
public UserSessionRule userSessionRule = UserSessionRule.standalone();
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
WsTester ws;
DbClient dbClient;
DbSession dbSession;
ComponentDao componentDao;
- System2 system2 = mock(System2.class);
@After
public void tearDown() {
@Test
public void all_provisioned_projects_without_analyzed_projects() throws Exception {
- userSessionRule.setGlobalPermissions(UserRole.ADMIN);
+ userSessionRule.setGlobalPermissions(GlobalPermissions.PROVISIONING);
ComponentDto analyzedProject = ComponentTesting.newProjectDto("analyzed-uuid-1");
componentDao.insert(dbSession, newProvisionedProject("1"), newProvisionedProject("2"), analyzedProject);
SnapshotDto snapshot = SnapshotTesting.createForProject(analyzedProject);
@Test
public void provisioned_projects_with_correct_pagination() throws Exception {
- userSessionRule.setGlobalPermissions(UserRole.ADMIN);
+ userSessionRule.setGlobalPermissions(GlobalPermissions.PROVISIONING);
for (int i = 1; i <= 10; i++) {
componentDao.insert(dbSession, newProvisionedProject(String.valueOf(i)));
}
@Test
public void provisioned_projects_with_desired_fields() throws Exception {
- userSessionRule.setGlobalPermissions(UserRole.ADMIN);
+ userSessionRule.setGlobalPermissions(GlobalPermissions.PROVISIONING);
componentDao.insert(dbSession, newProvisionedProject("1"));
dbSession.commit();
@Test
public void provisioned_projects_with_query() throws Exception {
- userSessionRule.setGlobalPermissions(UserRole.ADMIN);
+ userSessionRule.setGlobalPermissions(GlobalPermissions.PROVISIONING);
componentDao.insert(dbSession, newProvisionedProject("1"), newProvisionedProject("2"));
dbSession.commit();
assertThat(componentDao.countProvisionedProjects(dbSession, "visioned-name-")).isEqualTo(2);
}
- private static ComponentDto newProvisionedProject(String uuid) {
- return ComponentTesting
- .newProjectDto("provisioned-uuid-" + uuid)
- .setName("provisioned-name-" + uuid)
- .setKey("provisioned-key-" + uuid);
- }
-
@Test
public void provisioned_projects_as_defined_in_the_example() throws Exception {
- userSessionRule.setGlobalPermissions(UserRole.ADMIN);
+ userSessionRule.setGlobalPermissions(GlobalPermissions.PROVISIONING);
ComponentDto hBaseProject = ComponentTesting.newProjectDto("ce4c03d6-430f-40a9-b777-ad877c00aa4d")
.setKey("org.apache.hbas:hbase")
.setName("HBase")
JsonAssert.assertJson(result.outputAsString()).isSimilarTo(Resources.getResource(getClass(), "projects-example-provisioned.json"));
}
+
+ @Test
+ public void fail_when_not_enough_privileges() throws Exception {
+ expectedException.expect(ForbiddenException.class);
+ userSessionRule.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION);
+ componentDao.insert(dbSession, newProvisionedProject("1"));
+
+ ws.newGetRequest("api/projects", "provisioned").execute();
+ }
+
+ private static ComponentDto newProvisionedProject(String uuid) {
+ return ComponentTesting
+ .newProjectDto("provisioned-uuid-" + uuid)
+ .setName("provisioned-name-" + uuid)
+ .setKey("provisioned-key-" + uuid);
+ }
}