aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtDeferIT.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtDeferIT.java')
-rw-r--r--src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtDeferIT.java124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtDeferIT.java b/src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtDeferIT.java
new file mode 100644
index 0000000..b2b46b8
--- /dev/null
+++ b/src/test/java/com/googlesource/gerrit/plugins/qtcodereview/QtDeferIT.java
@@ -0,0 +1,124 @@
+// Copyright (C) 2018 The Qt Company
+
+package com.googlesource.gerrit.plugins.qtcodereview;
+
+import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
+import com.google.gerrit.acceptance.PushOneCommit;
+import com.google.gerrit.acceptance.RestResponse;
+import com.google.gerrit.acceptance.TestPlugin;
+import com.google.gerrit.acceptance.UseSsh;
+
+import com.google.gerrit.common.data.Permission;
+import com.google.gerrit.extensions.api.changes.AbandonInput;
+import com.google.gerrit.reviewdb.client.Change;
+
+import org.eclipse.jgit.revwalk.RevCommit;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.http.HttpStatus;
+
+@TestPlugin(
+ name = "gerrit-plugin-qt-workflow",
+ sysModule = "com.googlesource.gerrit.plugins.qtcodereview.QtModule",
+ sshModule = "com.googlesource.gerrit.plugins.qtcodereview.QtSshModule"
+)
+
+@UseSsh
+public class QtDeferIT extends QtCodeReviewIT {
+
+ @Before
+ public void SetDefaultPermissions() throws Exception {
+ grant(project, "refs/heads/master", Permission.ABANDON, false, REGISTERED_USERS);
+ }
+
+ @Test
+ public void singleChange_Defer() throws Exception {
+ RevCommit initialHead = getRemoteHead();
+ PushOneCommit.Result c = pushCommit("master", "commitmsg1","file1", "content1");
+
+ RevCommit updatedHead = qtDefer(c, initialHead);
+ }
+
+ @Test
+ public void singleChange_Defer_With_Input_Message() throws Exception {
+ PushOneCommit.Result c = pushCommit("master", "commitmsg1","file1", "content1");
+ approve(c.getChangeId());
+ String changeId = c.getChangeId();
+
+ AbandonInput abandonInput = new AbandonInput();
+ abandonInput.message = "myabandonednote";
+
+ String url = "/changes/"+changeId+"/gerrit-plugin-qt-workflow~defer";
+ RestResponse response = userRestSession.post(url, abandonInput);
+ response.assertOK();
+ Change change = c.getChange().change();
+ assertThat(change.getStatus()).isEqualTo(Change.Status.DEFERRED);
+ }
+
+ @Test
+ public void errorDefer_No_Permission() throws Exception {
+ deny(project, "refs/heads/master", Permission.ABANDON, REGISTERED_USERS);
+
+ PushOneCommit.Result c = pushCommit("master", "commitmsg1", "file1", "content1");
+ RestResponse response = qtDeferExpectFail(c, HttpStatus.SC_FORBIDDEN);
+ assertThat(response.getEntityContent()).isEqualTo("abandon not permitted");
+
+ grant(project, "refs/heads/master", Permission.ABANDON, false, REGISTERED_USERS);
+ }
+
+ @Test
+ public void errorDefer_Wrong_Status() throws Exception {
+ RevCommit initialHead = getRemoteHead();
+ PushOneCommit.Result c = pushCommit("master", "commitmsg1", "file1", "content1");
+ merge(c);
+
+ RestResponse response = qtDeferExpectFail(c, HttpStatus.SC_CONFLICT);
+ assertThat(response.getEntityContent()).isEqualTo("change is merged");
+ }
+
+
+ private RevCommit qtDefer(PushOneCommit.Result c,
+ RevCommit initialHead)
+ throws Exception {
+ String masterRef = R_HEADS + "master";
+ String stagingRef = R_STAGING + "master";
+
+ RestResponse response = call_REST_API_Defer(c.getChangeId());
+ response.assertOK();
+
+ RevCommit masterHead = getRemoteHead(project, masterRef);
+ assertThat(masterHead.getId()).isEqualTo(initialHead.getId()); // master is not updated
+
+ RevCommit stagingHead = getRemoteHead(project, stagingRef);
+ if (stagingHead != null) assertThat(stagingHead.getId()).isEqualTo(initialHead.getId()); // staging is not updated
+
+ assertRefUpdatedEvents(masterRef); // no events
+ assertRefUpdatedEvents(stagingRef); // no events
+
+ Change change = c.getChange().change();
+ assertThat(change.getStatus()).isEqualTo(Change.Status.DEFERRED);
+
+ return masterHead;
+ }
+
+ private RestResponse qtDeferExpectFail(PushOneCommit.Result c,
+ int expectedStatus)
+ throws Exception {
+ RestResponse response = call_REST_API_Defer(c.getChangeId());
+ response.assertStatus(expectedStatus);
+
+ Change change = c.getChange().change();
+ assertThat(change.getStatus()).isNotEqualTo(Change.Status.DEFERRED);
+
+ return response;
+ }
+
+
+
+}