Merge "Make sure user logged in before auto opening revert popup"
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
index 448d490..6eaf4ff 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
@@ -415,9 +415,15 @@
     },
 
     _maybeShowRevertDialog: function() {
-      if (!!this._getUrlParameter('revert')) {
-        this.$.actions.showRevertDialog();
-      }
+      this._getLoggedIn().then(function(loggedIn) {
+        if (!loggedIn || this._change.status !== this.ChangeStatus.MERGED) {
+          // Do not display dialog if not logged-in or the change is not merged.
+          return;
+        }
+        if (!!this._getUrlParameter('revert')) {
+          this.$.actions.showRevertDialog();
+        }
+      }.bind(this));
     },
 
     _maybeShowReplyDialog: function() {
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html
index 6ced7ec..b49f05d 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html
@@ -462,25 +462,41 @@
       locationStub.restore();
     });
 
-    test('revert dialog opened with revert param', function() {
-      var urlParamStub = sinon.stub(element, '_getUrlParameter');
-
-      var showRevertDialogCalled;
-      sinon.stub(element.$.actions, 'showRevertDialog', function() {
-        showRevertDialogCalled = true;
+    test('revert dialog opened with revert param', function(done) {
+      sinon.stub(element.$.restAPI, 'getLoggedIn', function() {
+        return Promise.resolve(true);
       });
 
-      urlParamStub.returns(true);
-      showRevertDialogCalled = false;
-      element._maybeShowRevertDialog();
-      assert.isTrue(showRevertDialogCalled);
+      element._patchRange = {
+        basePatchNum: 'PARENT',
+        patchNum: 2,
+      };
+      element._change = {
+          change_id: 'Iad9dc96274af6946f3632be53b106ef80f7ba6ca',
+          revisions: {
+            rev1: {_number: 1},
+          },
+          current_revision: 'rev1',
+          status: element.ChangeStatus.MERGED,
+          labels: {},
+          actions: {},
+      };
 
-      urlParamStub.returns(false);
-      showRevertDialogCalled = false;
-      element._maybeShowRevertDialog();
-      assert.isFalse(showRevertDialogCalled);
+      var urlParamStub = sinon.stub(element, '_getUrlParameter',
+          function(param) {
+            assert.equal(param, 'revert');
+            urlParamStub.restore();
+            element.$.restAPI.getLoggedIn.restore();
+            return param;
+          });
 
-      urlParamStub.restore();
+      var revertDialogStub = sinon.stub(element.$.actions, 'showRevertDialog',
+          function() {
+            revertDialogStub.restore();
+            done();
+          });
+
+      element._maybeShowRevertDialog();
     });
 
     suite('scroll related tests', function() {