]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8838 Tags can be set on project components only 1867/head
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Wed, 29 Mar 2017 09:36:09 +0000 (11:36 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Fri, 31 Mar 2017 06:57:19 +0000 (08:57 +0200)
server/sonar-server/src/main/java/org/sonar/server/projecttag/ws/SetAction.java
server/sonar-server/src/test/java/org/sonar/server/projecttag/ws/SetActionTest.java

index b09a93772197dec47e7969fb18947fab801192ea..039ee751d1498bdbb83d7317f2a5015f5e2e6639 100644 (file)
@@ -35,6 +35,7 @@ import org.sonar.server.component.ComponentFinder;
 import org.sonar.server.es.ProjectIndexer;
 import org.sonar.server.user.UserSession;
 
+import static org.sonar.api.resources.Qualifiers.PROJECT;
 import static org.sonar.server.es.ProjectIndexer.Cause.PROJECT_TAGS_UPDATE;
 import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001;
 import static org.sonar.server.ws.WsUtils.checkRequest;
@@ -92,7 +93,7 @@ public class SetAction implements ProjectTagsWsAction {
 
     try (DbSession dbSession = dbClient.openSession(false)) {
       ComponentDto project = componentFinder.getByKey(dbSession, projectKey);
-      checkRequest(project.isRootProject(), "Component must be a project");
+      checkRequest(PROJECT.equals(project.qualifier()), "Component '%s' is not a project", project.key());
       userSession.checkComponentUuidPermission(UserRole.ADMIN, project.uuid());
 
       project.setTags(tags);
index e5890c792f88a66cc1f3a906a888895b01a194ad..3af5a737aac386aa170359260711f3520593e99b 100644 (file)
@@ -46,6 +46,8 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.sonar.core.util.Protobuf.setNullable;
+import static org.sonar.db.component.ComponentTesting.newFileDto;
+import static org.sonar.db.component.ComponentTesting.newModuleDto;
 import static org.sonar.server.es.ProjectIndexer.Cause.PROJECT_TAGS_UPDATE;
 
 public class SetActionTest {
@@ -142,6 +144,36 @@ public class SetActionTest {
     call(project.key(), null);
   }
 
+  @Test
+  public void fail_if_component_is_a_view() {
+    ComponentDto view = db.components().insertView(v -> v.setKey("VIEW_KEY"));
+
+    expectedException.expect(BadRequestException.class);
+    expectedException.expectMessage("Component 'VIEW_KEY' is not a project");
+
+    call(view.key(), "point-of-view");
+  }
+
+  @Test
+  public void fail_if_component_is_a_module() {
+    ComponentDto module = db.components().insertComponent(newModuleDto(project).setKey("MODULE_KEY"));
+
+    expectedException.expect(BadRequestException.class);
+    expectedException.expectMessage("Component 'MODULE_KEY' is not a project");
+
+    call(module.key(), "modz");
+  }
+
+  @Test
+  public void fail_if_component_is_a_file() {
+    ComponentDto file = db.components().insertComponent(newFileDto(project).setKey("FILE_KEY"));
+
+    expectedException.expect(BadRequestException.class);
+    expectedException.expectMessage("Component 'FILE_KEY' is not a project");
+
+    call(file.getKey(), "secret");
+  }
+
   @Test
   public void definition() {
     WebService.Action definition = ws.getDef();