DraftChangeIT: Also test when allowDrafts=false

Rename the class from DeleteDraftChangeIT to DraftChangeIT since the
tests in it are not limited to deleting draft changes.

Add a configuration with the allowDrafts setting disabled.

Add a test to ensure that pushing a draft change is rejected when the
setting is disabled.

Change-Id: I9273fd6cf756a9c7974c29700835a35dba7b09f1
This commit is contained in:
David Pursehouse
2015-01-30 18:37:38 +09:00
parent df99e12530
commit 02fc027d12
2 changed files with 55 additions and 17 deletions

View File

@@ -39,6 +39,7 @@ import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.OutputFormat; import com.google.gerrit.server.OutputFormat;
import com.google.gerrit.server.account.GroupCache; import com.google.gerrit.server.account.GroupCache;
import com.google.gerrit.server.config.AllProjectsName; import com.google.gerrit.server.config.AllProjectsName;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.MetaDataUpdate; import com.google.gerrit.server.git.MetaDataUpdate;
import com.google.gerrit.server.git.ProjectConfig; import com.google.gerrit.server.git.ProjectConfig;
@@ -116,6 +117,9 @@ public abstract class AbstractDaemonTest {
@Inject @Inject
protected Provider<InternalChangeQuery> queryProvider; protected Provider<InternalChangeQuery> queryProvider;
@Inject
protected @GerritServerConfig Config cfg;
protected Git git; protected Git git;
protected GerritServer server; protected GerritServer server;
protected TestAccount admin; protected TestAccount admin;
@@ -165,6 +169,16 @@ public abstract class AbstractDaemonTest {
return cfg; return cfg;
} }
protected static Config allowDraftsDisabledConfig() {
Config cfg = new Config();
cfg.setBoolean("change", null, "allowDrafts", false);
return cfg;
}
protected boolean isAllowDrafts() {
return cfg.getBoolean("change", "allowDrafts", true);
}
private void beforeTest(Config cfg, boolean memory, boolean enableHttpd) throws Exception { private void beforeTest(Config cfg, boolean memory, boolean enableHttpd) throws Exception {
server = startServer(cfg, memory, enableHttpd); server = startServer(cfg, memory, enableHttpd);
server.getTestInjector().injectMembers(this); server.getTestInjector().injectMembers(this);

View File

@@ -15,6 +15,7 @@
package com.google.gerrit.acceptance.rest.change; package com.google.gerrit.acceptance.rest.change;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.TruthJUnit.assume;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.gerrit.acceptance.AbstractDaemonTest; import com.google.gerrit.acceptance.AbstractDaemonTest;
@@ -24,66 +25,89 @@ import com.google.gerrit.acceptance.RestSession;
import com.google.gerrit.extensions.client.ChangeStatus; import com.google.gerrit.extensions.client.ChangeStatus;
import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.testutil.ConfigSuite;
import com.google.gwtorm.server.OrmException; import com.google.gwtorm.server.OrmException;
import org.apache.http.HttpStatus; import org.apache.http.HttpStatus;
import org.eclipse.jgit.lib.Config;
import org.junit.Test; import org.junit.Test;
import java.io.IOException; import java.io.IOException;
public class DeleteDraftChangeIT extends AbstractDaemonTest { public class DraftChangeIT extends AbstractDaemonTest {
@ConfigSuite.Config
public static Config allowDraftsDisabled() {
return allowDraftsDisabledConfig();
}
@Test @Test
public void deleteChange() throws Exception { public void deleteChange() throws Exception {
String changeId = createChange().getChangeId(); PushOneCommit.Result result = createChange();
result.assertOkStatus();
String changeId = result.getChangeId();
String triplet = "p~master~" + changeId; String triplet = "p~master~" + changeId;
ChangeInfo c = get(triplet); ChangeInfo c = get(triplet);
assertThat(c.id).isEqualTo(triplet); assertThat(c.id).isEqualTo(triplet);
assertThat(c.status).isEqualTo(ChangeStatus.NEW); assertThat(c.status).isEqualTo(ChangeStatus.NEW);
RestResponse r = deleteChange(changeId, adminSession); RestResponse response = deleteChange(changeId, adminSession);
assertThat(r.getEntityContent()).isEqualTo("Change is not a draft"); assertThat(response.getEntityContent()).isEqualTo("Change is not a draft");
assertThat(r.getStatusCode()).isEqualTo(HttpStatus.SC_CONFLICT); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_CONFLICT);
} }
@Test @Test
public void deleteDraftChange() throws Exception { public void deleteDraftChange() throws Exception {
String changeId = createDraftChange(); assume().that(isAllowDrafts()).isTrue();
PushOneCommit.Result result = createDraftChange();
result.assertOkStatus();
String changeId = result.getChangeId();
String triplet = "p~master~" + changeId; String triplet = "p~master~" + changeId;
ChangeInfo c = get(triplet); ChangeInfo c = get(triplet);
assertThat(c.id).isEqualTo(triplet); assertThat(c.id).isEqualTo(triplet);
assertThat(c.status).isEqualTo(ChangeStatus.DRAFT); assertThat(c.status).isEqualTo(ChangeStatus.DRAFT);
RestResponse r = deleteChange(changeId, adminSession); RestResponse response = deleteChange(changeId, adminSession);
assertThat(r.getStatusCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_NO_CONTENT);
} }
@Test @Test
public void publishDraftChange() throws Exception { public void publishDraftChange() throws Exception {
String changeId = createDraftChange(); assume().that(isAllowDrafts()).isTrue();
PushOneCommit.Result result = createDraftChange();
result.assertOkStatus();
String changeId = result.getChangeId();
String triplet = "p~master~" + changeId; String triplet = "p~master~" + changeId;
ChangeInfo c = get(triplet); ChangeInfo c = get(triplet);
assertThat(c.id).isEqualTo(triplet); assertThat(c.id).isEqualTo(triplet);
assertThat(c.status).isEqualTo(ChangeStatus.DRAFT); assertThat(c.status).isEqualTo(ChangeStatus.DRAFT);
RestResponse r = publishChange(changeId); RestResponse response = publishChange(changeId);
assertThat(r.getStatusCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_NO_CONTENT);
c = get(triplet); c = get(triplet);
assertThat(c.status).isEqualTo(ChangeStatus.NEW); assertThat(c.status).isEqualTo(ChangeStatus.NEW);
} }
@Test @Test
public void publishDraftPatchSet() throws Exception { public void publishDraftPatchSet() throws Exception {
String changeId = createDraftChange(); assume().that(isAllowDrafts()).isTrue();
PushOneCommit.Result result = createDraftChange();
result.assertOkStatus();
String changeId = result.getChangeId();
String triplet = "p~master~" + changeId; String triplet = "p~master~" + changeId;
ChangeInfo c = get(triplet); ChangeInfo c = get(triplet);
assertThat(c.id).isEqualTo(triplet); assertThat(c.id).isEqualTo(triplet);
assertThat(c.status).isEqualTo(ChangeStatus.DRAFT); assertThat(c.status).isEqualTo(ChangeStatus.DRAFT);
RestResponse r = publishPatchSet(changeId); RestResponse response = publishPatchSet(changeId);
assertThat(r.getStatusCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_NO_CONTENT);
assertThat(get(triplet).status).isEqualTo(ChangeStatus.NEW); assertThat(get(triplet).status).isEqualTo(ChangeStatus.NEW);
} }
private String createDraftChange() throws Exception { @Test
PushOneCommit push = pushFactory.create(db, admin.getIdent()); public void createDraftChangeWhenDraftsNotAllowed() throws Exception {
return push.to(git, "refs/drafts/master").getChangeId(); assume().that(isAllowDrafts()).isFalse();
PushOneCommit.Result r = createDraftChange();
r.assertErrorStatus("cannot upload drafts");
}
private PushOneCommit.Result createDraftChange() throws Exception {
return pushTo("refs/drafts/master");
} }
private static RestResponse deleteChange(String changeId, private static RestResponse deleteChange(String changeId,