]> source.dussan.org Git - sonarqube.git/commitdiff
Fix new code period set action with specific analysis for CE (#2051)
authorJacek <52388493+jacek-poreda-sonarsource@users.noreply.github.com>
Mon, 2 Sep 2019 14:38:21 +0000 (16:38 +0200)
committerSonarTech <sonartech@sonarsource.com>
Tue, 24 Sep 2019 18:21:16 +0000 (20:21 +0200)
server/sonar-webserver-webapi/src/main/java/org/sonar/server/newcodeperiod/ws/SetAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/newcodeperiod/ws/UnsetAction.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/newcodeperiod/ws/SetActionTest.java

index 80f8634cbaf2fac2931235cac2326dcdeb49721c..3837853b3f44ce48193e66470f27f92ff4e562c0 100644 (file)
 package org.sonar.server.newcodeperiod.ws;
 
 import com.google.common.base.Preconditions;
+import java.util.EnumSet;
+import java.util.Locale;
+import java.util.Set;
+import javax.annotation.Nullable;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
@@ -40,11 +44,6 @@ import org.sonar.server.component.ComponentFinder;
 import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.user.UserSession;
 
-import javax.annotation.Nullable;
-import java.util.EnumSet;
-import java.util.Locale;
-import java.util.Set;
-
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.lang.String.format;
 import static org.sonar.db.newcodeperiod.NewCodePeriodType.NUMBER_OF_DAYS;
@@ -111,7 +110,9 @@ public class SetAction implements NewCodePeriodsWsAction {
     try (DbSession dbSession = dbClient.openSession(false)) {
       String typeStr = request.mandatoryParam(PARAM_TYPE);
       String valueStr = request.getParam(PARAM_VALUE).emptyAsNull().or(() -> null);
-      NewCodePeriodType type = validateType(typeStr, projectStr == null, branchStr != null);
+      boolean isCommunityEdition = editionProvider.get().filter(t -> t == EditionProvider.Edition.COMMUNITY).isPresent();
+
+      NewCodePeriodType type = validateType(typeStr, projectStr == null, branchStr != null || isCommunityEdition);
 
       NewCodePeriodDto dto = new NewCodePeriodDto();
       dto.setType(type);
@@ -121,7 +122,6 @@ public class SetAction implements NewCodePeriodsWsAction {
         projectBranch = getProject(dbSession, projectStr, branchStr);
         userSession.checkComponentPermission(UserRole.ADMIN, projectBranch);
         // in CE set main branch value instead of project value
-        boolean isCommunityEdition = editionProvider.get().filter(t -> t == EditionProvider.Edition.COMMUNITY).isPresent();
         if (branchStr != null || isCommunityEdition) {
           dto.setBranchUuid(projectBranch.uuid());
         }
index 0eb2f2ddef01aa76e352fbcd4b3d0b7281a74b9e..7433889212642795a1f63e1c11839cd52d11f95a 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.server.newcodeperiod.ws;
 
+import javax.annotation.Nullable;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
@@ -35,8 +36,6 @@ import org.sonar.server.component.ComponentFinder;
 import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.user.UserSession;
 
-import javax.annotation.Nullable;
-
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.lang.String.format;
 import static org.sonar.server.component.ComponentFinder.ParamNames.PROJECT_ID_AND_KEY;
@@ -90,7 +89,7 @@ public class UnsetAction implements NewCodePeriodsWsAction {
     try (DbSession dbSession = dbClient.openSession(false)) {
       String projectUuid = null;
       String branchUuid = null;
-      ComponentDto projectBranch = null;
+      ComponentDto projectBranch;
 
       // in CE set main branch value instead of project value
       boolean isCommunityEdition = editionProvider.get().filter(t -> t == EditionProvider.Edition.COMMUNITY).isPresent();
index be5fe9fffe63b5c63a1768c6b13ad06d5c60a571..2af0b3c25300c8c95772e776fe9b4473e1f7c7ef 100644 (file)
  */
 package org.sonar.server.newcodeperiod.ws;
 
+import com.tngtech.java.junit.dataprovider.DataProvider;
+import com.tngtech.java.junit.dataprovider.DataProviderRunner;
+import com.tngtech.java.junit.dataprovider.UseDataProvider;
+import java.util.Optional;
+import javax.annotation.Nullable;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.api.utils.System2;
 import org.sonar.api.web.UserRole;
@@ -42,16 +48,15 @@ import org.sonar.server.component.TestComponentFinder;
 import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.ws.TestRequest;
 import org.sonar.server.ws.WsActionTester;
 
-import javax.annotation.Nullable;
-import java.util.Optional;
-
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.entry;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@RunWith(DataProviderRunner.class)
 public class SetActionTest {
   @Rule
   public ExpectedException expectedException = ExpectedException.none();
@@ -306,16 +311,35 @@ public class SetActionTest {
   }
 
   @Test
-  public void never_set_project_value_in_community_edition() {
+  @UseDataProvider("provideNewCodePeriodTypeAndValue")
+  public void never_set_project_value_in_community_edition(NewCodePeriodType type, @Nullable String value) {
     when(editionProvider.get()).thenReturn(Optional.of(EditionProvider.Edition.COMMUNITY));
     ComponentDto project = componentDb.insertMainBranch();
+
+    if (value != null && NewCodePeriodType.SPECIFIC_ANALYSIS.equals(type)) {
+      db.components().insertSnapshot(project, snapshotDto -> snapshotDto.setUuid(value));
+    }
+
     logInAsProjectAdministrator(project);
-    ws.newRequest()
+    TestRequest request = ws.newRequest()
       .setParam("project", project.getKey())
-      .setParam("type", "number_of_days")
-      .setParam("value", "5")
-      .execute();
-    assertTableContainsOnly(project.uuid(), project.uuid(), NewCodePeriodType.NUMBER_OF_DAYS, "5");
+      .setParam("type", type.name());
+
+    if (value != null) {
+      request.setParam("value", value);
+    }
+
+    request.execute();
+    assertTableContainsOnly(project.uuid(), project.uuid(), type, value);
+  }
+
+  @DataProvider
+  public static Object[][] provideNewCodePeriodTypeAndValue() {
+    return new Object[][]{
+      {NewCodePeriodType.NUMBER_OF_DAYS, "5"},
+      {NewCodePeriodType.SPECIFIC_ANALYSIS, "analysis-uuid"},
+      {NewCodePeriodType.PREVIOUS_VERSION, null}
+    };
   }
 
   @Test