PolyGerrit: Allow status editing when full name is not editable

LDAP installs would not allow editing the status when full name was not
editable.

Bug: Issue 6080
Change-Id: Ifd53448891607908af9600b3ab61df4771304da9
diff --git a/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_test.html b/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_test.html
index 8f4e89d..cf35450 100644
--- a/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_test.html
+++ b/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_test.html
@@ -168,5 +168,92 @@
         });
       });
     });
+
+    suite('edit name and status', function() {
+      var nameChangedSpy;
+      var statusChangedSpy;
+      var nameStub;
+      var statusStub;
+
+      setup(function() {
+        nameChangedSpy = sandbox.spy(element, '_nameChanged');
+        statusChangedSpy = sandbox.spy(element, '_statusChanged');
+        element.set('_serverConfig',
+          {auth: {editable_account_fields: ['FULL_NAME']}});
+
+        nameStub = sandbox.stub(element.$.restAPI, 'setAccountName',
+            function(name) { return Promise.resolve(); });
+        statusStub = sandbox.stub(element.$.restAPI, 'setAccountStatus',
+            function(status) { return Promise.resolve(); });
+      });
+
+      test('set name and status', function(done) {
+        assert.isTrue(element.mutable);
+        assert.isFalse(element.hasUnsavedChanges);
+
+        element.set('_account.name', 'new name');
+
+        assert.isTrue(nameChangedSpy.called);
+
+        element.set('_account.status', 'new status');
+
+        assert.isTrue(statusChangedSpy.called);
+
+        assert.isTrue(element.hasUnsavedChanges);
+
+        element.save().then(function() {
+          assert.isTrue(statusStub.called);
+          assert.isTrue(nameStub.called);
+
+          assert.equal(nameStub.lastCall.args[0], 'new name');
+
+          assert.equal(statusStub.lastCall.args[0], 'new status');
+
+          done();
+        });
+      });
+    });
+
+    suite('set status but read name', function() {
+      var statusChangedSpy;
+      var statusStub;
+
+      setup(function() {
+        statusChangedSpy = sandbox.spy(element, '_statusChanged');
+        element.set('_serverConfig',
+          {auth: {editable_account_fields: []}});
+
+        statusStub = sandbox.stub(element.$.restAPI, 'setAccountStatus',
+            function(status) { return Promise.resolve(); });
+      });
+
+      test('read full name but set status', function(done) {
+        var section = element.$.nameSection;
+        var displaySpan = section.querySelectorAll('.value')[0];
+        var inputSpan = section.querySelectorAll('.value')[1];
+
+        assert.isFalse(element.mutable);
+
+        assert.isFalse(element.hasUnsavedChanges);
+
+        assert.isFalse(displaySpan.hasAttribute('hidden'));
+        assert.equal(displaySpan.textContent, account.name);
+        assert.isTrue(inputSpan.hasAttribute('hidden'));
+
+        element.set('_account.status', 'new status');
+
+        assert.isTrue(statusChangedSpy.called);
+
+        assert.isTrue(element.hasUnsavedChanges);
+
+        element.save().then(function() {
+          assert.isTrue(statusStub.called);
+          statusStub.lastCall.returnValue.then(function() {
+            assert.equal(statusStub.lastCall.args[0], 'new status');
+            done();
+          });
+        });
+      });
+    });
   });
 </script>