]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8841 Add tags to WS api/components/show and tree response
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Wed, 1 Mar 2017 11:00:49 +0000 (12:00 +0100)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 2 Mar 2017 08:14:22 +0000 (09:14 +0100)
server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentDtoToWsComponent.java
server/sonar-server/src/main/resources/org/sonar/server/component/ws/show-example.json
server/sonar-server/src/test/java/org/sonar/server/component/ws/ShowActionTest.java
sonar-ws/src/main/protobuf/ws-components.proto

index cc5e7aaf032775dc8c9ce3378ff819d15b8327c2..bc395cf68cd052bafa0bb0269f58f48fc383f3a7 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.server.component.ws;
 
 import java.util.Objects;
 import java.util.Optional;
+import org.sonar.api.resources.Qualifiers;
 import org.sonar.db.component.ComponentDto;
 import org.sonar.db.component.SnapshotDto;
 import org.sonar.db.organization.OrganizationDto;
@@ -54,7 +55,14 @@ class ComponentDtoToWsComponent {
     setNullable(emptyToNull(dto.path()), wsComponent::setPath);
     setNullable(emptyToNull(dto.description()), wsComponent::setDescription);
     setNullable(emptyToNull(dto.language()), wsComponent::setLanguage);
+    setTags(dto, wsComponent);
     lastAnalysis.ifPresent(analysis -> wsComponent.setAnalysisDate(formatDateTime(analysis.getCreatedAt())));
     return wsComponent;
   }
+
+  private static void setTags(ComponentDto dto, WsComponents.Component.Builder wsComponent) {
+    if (Qualifiers.PROJECT.equals(dto.qualifier())) {
+      wsComponent.getTagsBuilder().addAllTags(dto.getTags());
+    }
+  }
 }
index 1404e0e76d80ecd57c384abe60a874f73da1c320..5d21fab0c1a0e1f06c945715f5822f1e9fcbacf0 100644 (file)
@@ -6,7 +6,8 @@
     "name": "Rule.java",
     "qualifier": "FIL",
     "language": "java",
-    "path": "src/main/java/com/sonarsource/markdown/impl/Rule.java"
+    "path": "src/main/java/com/sonarsource/markdown/impl/Rule.java",
+    "analysisDate": "2017-03-01T11:39:03+0100"
   },
   "ancestors": [
     {
@@ -15,7 +16,8 @@
       "key": "com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown/impl",
       "name": "src/main/java/com/sonarsource/markdown/impl",
       "qualifier": "DIR",
-      "path": "src/main/java/com/sonarsource/markdown/impl"
+      "path": "src/main/java/com/sonarsource/markdown/impl",
+      "analysisDate": "2017-03-01T11:39:03+0100"
     },
     {
       "organization": "my-org-1",
       "key": "com.sonarsource:java-markdown",
       "name": "Java Markdown",
       "description": "Java Markdown Project",
-      "qualifier": "TRK"
+      "qualifier": "TRK",
+      "analysisDate": "2017-03-01T11:39:03+0100",
+      "tags": [
+        "language",
+        "plugin"
+      ]
     }
   ]
 }
index e384589f0f26c6d2ace51fb0c6eff9267ec8ccc3..4cc39ddd9ce51c4c42aa91f68948a1674d7f0581 100644 (file)
@@ -46,6 +46,7 @@ import org.sonarqube.ws.WsComponents.ShowWsResponse;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.sonar.api.utils.DateUtils.formatDateTime;
+import static org.sonar.api.utils.DateUtils.parseDateTime;
 import static org.sonar.db.component.ComponentTesting.newDirectory;
 import static org.sonar.db.component.ComponentTesting.newFileDto;
 import static org.sonar.db.component.ComponentTesting.newModuleDto;
@@ -80,6 +81,19 @@ public class ShowActionTest {
     assertJson(response).isSimilarTo(getClass().getResource("show-example.json"));
   }
 
+  @Test
+  public void tags_displayed_only_for_project() throws IOException {
+    userSession.logIn().setRoot();
+    insertJsonExampleComponentsAndSnapshots();
+
+    String response = ws.newRequest()
+      .setParam("id", "AVIF-FffA3Ax6PH2efPD")
+      .execute()
+      .getInput();
+
+    assertThat(response).containsOnlyOnce("\"tags\"");
+  }
+
   @Test
   public void show_with_browse_permission() {
     userSession.logIn().addProjectUuidPermissions(UserRole.USER, "project-uuid");
@@ -194,12 +208,13 @@ public class ShowActionTest {
 
   private void insertJsonExampleComponentsAndSnapshots() {
     OrganizationDto organizationDto = db.organizations().insertForKey("my-org-1");
-    ComponentDto project = newProjectDto(organizationDto, "AVIF98jgA3Ax6PH2efOW")
+    ComponentDto project = componentDb.insertComponent(newProjectDto(organizationDto, "AVIF98jgA3Ax6PH2efOW")
       .setKey("com.sonarsource:java-markdown")
       .setName("Java Markdown")
       .setDescription("Java Markdown Project")
-      .setQualifier(Qualifiers.PROJECT);
-    componentDb.insertProjectAndSnapshot(project);
+      .setQualifier(Qualifiers.PROJECT)
+      .setTagsString("language, plugin"));
+    db.getDbClient().snapshotDao().insert(db.getSession(), newAnalysis(project).setCreatedAt(parseDateTime("2017-03-01T11:39:03+0100").getTime()));
     ComponentDto directory = newDirectory(project, "AVIF-FfgA3Ax6PH2efPF", "src/main/java/com/sonarsource/markdown/impl")
       .setKey("com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown/impl")
       .setName("src/main/java/com/sonarsource/markdown/impl")
index effdadc738683b350914358918ac7fa3679be243..2524346cd366486658a5fdc65d9eeb880fe23869 100644 (file)
@@ -77,4 +77,10 @@ message Component {
   optional string language = 10;
   optional bool isFavorite = 11;
   optional string analysisDate = 13;
+  optional Tags tags = 14;
+
+  message Tags {
+    repeated string tags = 1;
+  }
 }
+