]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9616 Add UT on main branch in api/projectbranches/list
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 11 Aug 2017 14:47:52 +0000 (16:47 +0200)
committerJanos Gyerik <janos.gyerik@sonarsource.com>
Tue, 12 Sep 2017 08:59:56 +0000 (10:59 +0200)
server/sonar-db-dao/src/test/java/org/sonar/db/component/ComponentDbTester.java
server/sonar-server/src/main/java/org/sonar/server/projectbranch/ws/ListAction.java
server/sonar-server/src/test/java/org/sonar/server/projectbranch/ws/ListActionTest.java
sonar-ws/src/main/protobuf/ws-projectbranches.proto

index 339ab0f647a16c53845d8d0a10220f34ab78bb58..c06c714c74d18c21dabd56f0d4181afb05657b04 100644 (file)
@@ -73,7 +73,7 @@ public class ComponentDbTester {
   }
 
   public ComponentDto insertPrivateProject() {
-    return insertComponentImpl(ComponentTesting.newPrivateProjectDto(db.getDefaultOrganization()), true, noExtraConfiguration());
+    return insertComponentImpl(newPrivateProjectDto(db.getDefaultOrganization()), true, noExtraConfiguration());
   }
 
   public ComponentDto insertPublicProject() {
@@ -82,7 +82,7 @@ public class ComponentDbTester {
 
   @SafeVarargs
   public final ComponentDto insertPrivateProject(Consumer<ComponentDto>... dtoPopulators) {
-    return insertComponentImpl(ComponentTesting.newPrivateProjectDto(db.getDefaultOrganization()), true, dtoPopulators);
+    return insertComponentImpl(newPrivateProjectDto(db.getDefaultOrganization()), true, dtoPopulators);
   }
 
   @SafeVarargs
@@ -92,7 +92,7 @@ public class ComponentDbTester {
 
   @SafeVarargs
   public final ComponentDto insertPrivateProject(OrganizationDto organizationDto, Consumer<ComponentDto>... dtoPopulators) {
-    return insertComponentImpl(ComponentTesting.newPrivateProjectDto(organizationDto), true, dtoPopulators);
+    return insertComponentImpl(newPrivateProjectDto(organizationDto), true, dtoPopulators);
   }
 
   @SafeVarargs
@@ -101,7 +101,7 @@ public class ComponentDbTester {
   }
 
   public ComponentDto insertPrivateProject(OrganizationDto organizationDto) {
-    return insertComponentImpl(ComponentTesting.newPrivateProjectDto(organizationDto), true, noExtraConfiguration());
+    return insertComponentImpl(newPrivateProjectDto(organizationDto), true, noExtraConfiguration());
   }
 
   public ComponentDto insertPublicProject(OrganizationDto organizationDto) {
@@ -201,6 +201,27 @@ public class ComponentDbTester {
     db.commit();
   }
 
+  @SafeVarargs
+  public final ComponentDto insertMainBranch(Consumer<ComponentDto>... dtoPopulators) {
+    return insertMainBranch(db.getDefaultOrganization(), dtoPopulators);
+  }
+
+  @SafeVarargs
+  public final ComponentDto insertMainBranch(OrganizationDto organization, Consumer<ComponentDto>... dtoPopulators) {
+    ComponentDto project = newPrivateProjectDto(organization);
+    BranchDto branchDto = new BranchDto()
+      .setKey(null)
+      .setUuid(project.uuid())
+      .setProjectUuid(project.projectUuid())
+      .setKeeType(BRANCH)
+      .setBranchType(LONG);
+    Arrays.stream(dtoPopulators).forEach(dtoPopulator -> dtoPopulator.accept(project));
+    insertComponent(project);
+    dbClient.branchDao().insert(dbSession, branchDto);
+    db.commit();
+    return project;
+  }
+
   @SafeVarargs
   public final ComponentDto insertProjectBranch(ComponentDto project, Consumer<BranchDto>... dtoPopulators) {
     String uuid = Uuids.createFast();
index 97fb81bbb78497d2df58225f99b6f4d13b6e19d0..39c8d188bc6ed07975c3ee3924aec24189bc2d35 100644 (file)
@@ -98,15 +98,15 @@ public class ListAction implements BranchWsAction {
   }
 
   private static void addToProtobuf(WsBranches.ListWsResponse.Builder response, BranchDto branch, Map<String, BranchDto> mergeBranchesByUuid) {
-    WsBranches.ListWsResponse.Branch.Builder builder = response.addBranchesBuilder();
+    WsBranches.Branch.Builder builder = response.addBranchesBuilder();
     setNullable(branch.getKey(), builder::setName);
     builder.setIsMain(branch.isMain());
-    builder.setType(WsBranches.ListWsResponse.BranchType.valueOf(branch.getBranchType().name()));
+    builder.setType(WsBranches.Branch.BranchType.valueOf(branch.getBranchType().name()));
     String mergeBranchUuid = branch.getMergeBranchUuid();
     if (mergeBranchUuid != null) {
-      BranchDto megeBranch = mergeBranchesByUuid.get(mergeBranchUuid);
-      checkState(megeBranch != null, "Component uuid '%s' cannot be found", megeBranch);
-      setNullable(megeBranch.getKey(), builder::setMergeBranch);
+      BranchDto mergeBranch = mergeBranchesByUuid.get(mergeBranchUuid);
+      checkState(mergeBranch != null, "Component uuid '%s' cannot be found", mergeBranch);
+      setNullable(mergeBranch.getKey(), builder::setMergeBranch);
     }
     builder.build();
   }
index bd7ca61fd0e258a31f611073237e5e2e15c806da..c7da0c38be65558007ebf5b6c1bd2dc30493752d 100644 (file)
@@ -33,8 +33,8 @@ import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.tester.UserSessionRule;
 import org.sonar.server.ws.WsActionTester;
 import org.sonarqube.ws.MediaTypes;
+import org.sonarqube.ws.WsBranches.Branch;
 import org.sonarqube.ws.WsBranches.ListWsResponse;
-import org.sonarqube.ws.WsBranches.ListWsResponse.Branch;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.tuple;
@@ -94,6 +94,20 @@ public class ListActionTest {
       .execute();
   }
 
+  @Test
+  public void main_branch() {
+    ComponentDto project = db.components().insertMainBranch();
+    userSession.logIn().addProjectPermission(UserRole.USER, project);
+
+    ListWsResponse response = tester.newRequest()
+      .setParam("project", project.getDbKey())
+      .executeProtobuf(ListWsResponse.class);
+
+    assertThat(response.getBranchesList())
+      .extracting(Branch::hasName, Branch::getIsMain, Branch::getType)
+      .containsExactlyInAnyOrder(tuple(false, true, Branch.BranchType.LONG));
+  }
+
   @Test
   public void test_project_with_zero_branches() {
     ComponentDto project = db.components().insertPrivateProject();
@@ -109,7 +123,7 @@ public class ListActionTest {
 
   @Test
   public void test_project_with_branches() {
-    ComponentDto project = db.components().insertPrivateProject();
+    ComponentDto project = db.components().insertMainBranch();
     db.components().insertProjectBranch(project, b -> b.setKey("feature/bar"));
     db.components().insertProjectBranch(project, b -> b.setKey("feature/foo"));
     userSession.logIn().addProjectPermission(UserRole.USER, project);
@@ -121,13 +135,14 @@ public class ListActionTest {
     assertThat(response.getBranchesList())
       .extracting(Branch::getName, Branch::getType)
       .containsExactlyInAnyOrder(
-        tuple("feature/foo", ListWsResponse.BranchType.LONG),
-        tuple("feature/bar", ListWsResponse.BranchType.LONG));
+        tuple("", Branch.BranchType.LONG),
+        tuple("feature/foo", Branch.BranchType.LONG),
+        tuple("feature/bar", Branch.BranchType.LONG));
   }
 
   @Test
   public void short_living_branches() {
-    ComponentDto project = db.components().insertPrivateProject();
+    ComponentDto project = db.components().insertMainBranch();
     userSession.logIn().addProjectPermission(UserRole.USER, project);
     ComponentDto longLivingBranch = db.components().insertProjectBranch(project,
       b -> b.setKey("long").setBranchType(BranchType.LONG));
@@ -143,9 +158,10 @@ public class ListActionTest {
     assertThat(response.getBranchesList())
       .extracting(Branch::getName, Branch::getType, Branch::getMergeBranch)
       .containsExactlyInAnyOrder(
-        tuple(longLivingBranch.getBranch(), ListWsResponse.BranchType.LONG, ""),
-        tuple(shortLivingBranch.getBranch(), ListWsResponse.BranchType.SHORT, longLivingBranch.getBranch()),
-        tuple(shortLivingBranchOnMaster.getBranch(), ListWsResponse.BranchType.SHORT, ""));
+        tuple("", Branch.BranchType.LONG, ""),
+        tuple(longLivingBranch.getBranch(), Branch.BranchType.LONG, ""),
+        tuple(shortLivingBranch.getBranch(), Branch.BranchType.SHORT, longLivingBranch.getBranch()),
+        tuple(shortLivingBranchOnMaster.getBranch(), Branch.BranchType.SHORT, ""));
   }
 
   @Test
index ea51ef7184a7897d48f824182f09624f90d01357..3b32bc08fb882845c6d48a8ad1ab075a0e15adb4 100644 (file)
@@ -28,13 +28,24 @@ option optimize_for = SPEED;
 // WS api/project_branches/list
 message ListWsResponse {
   repeated Branch branches = 1;
+}
 
-  message Branch {
-    optional string name = 1;
-    optional bool isMain = 2;
-    optional BranchType type = 3;
-    // Merge branch is only present if it's a short living branch
-    optional string mergeBranch = 4;
+message Branch {
+  optional string name = 1;
+  optional string project = 2;
+  optional bool isMain = 3;
+  optional BranchType type = 4;
+  // Merge branch is only present for short living branch
+  optional string mergeBranch = 5;
+  optional Status status = 6;
+
+  message Status {
+    // Quality gate status is only present for long living branch
+    optional string qualityGateStatus = 1;
+    // Merge bugs, vulnerabilities and codeSmell are only present for short living branch
+    optional string bugs = 2;
+    optional string vulnerabilities = 3;
+    optional string codeSmell = 4;
   }
 
   enum BranchType {
@@ -45,5 +56,4 @@ message ListWsResponse {
     LONG = 1;
     SHORT = 2;
   }
-
 }