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;
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;
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);
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());
}
*/
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;
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;
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();
*/
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;
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();
}
@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