diff --git a/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info.js b/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info.js index 0e64cb2b4f..91bc6281c5 100644 --- a/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info.js +++ b/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info.js @@ -79,7 +79,7 @@ }, save: function() { - if (!this.mutable || !this.hasUnsavedChanges) { + if (!this.hasUnsavedChanges) { return Promise.resolve(); } @@ -97,9 +97,9 @@ }, _maybeSetName: function() { - return this._hasNameChange ? - this.$.restAPI.setAccountName(this._account.name) : - Promise.resolve(); + return this._hasNameChange && this.mutable ? + this.$.restAPI.setAccountName(this._account.name) : + Promise.resolve(); }, _maybeSetStatus: function() { 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 8f4e89d360..cf35450e71 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 @@ limitations under the License. }); }); }); + + 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(); + }); + }); + }); + }); }); diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.html b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.html index e3aea75ec4..f485dd6574 100644 --- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.html +++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.html @@ -118,11 +118,10 @@ limitations under the License.