diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js index 5b85c208dd..b1b067016a 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js @@ -540,6 +540,12 @@ return {path: fileList[idx]}; }, + _getReviewedStatus(editMode, changeNum, patchNum, path) { + if (editMode) { return Promise.resolve(false); } + return this.$.restAPI.getReviewedFiles(changeNum, patchNum) + .then(files => files.includes(path)); + }, + _paramsChanged(value) { if (value.view !== Gerrit.Nav.View.DIFF) { return; } @@ -631,7 +637,17 @@ _setReviewedObserver(_loggedIn, paramsRecord, _prefs) { const params = paramsRecord.base || {}; - if (!_loggedIn || _prefs.manual_review) { return; } + if (!_loggedIn) { return; } + + if (_prefs.manual_review) { + // Checkbox state needs to be set explicitly only when manual_review + // is specified. + this._getReviewedStatus(this.editMode, this._changeNum, + this._patchRange.patchNum, this._path).then(status => { + this.$.reviewed.checked = status; + }); + return; + } if (params.view === Gerrit.Nav.View.DIFF) { this._setReviewed(true); diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html index 7c94a009b6..0e9c34b833 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html +++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html @@ -60,6 +60,7 @@ limitations under the License. getDiffComments() { return Promise.resolve({}); }, getDiffRobotComments() { return Promise.resolve({}); }, getDiffDrafts() { return Promise.resolve({}); }, + getReviewedFiles() { return Promise.resolve([]); }, }); element = fixture('basic'); return element._loadComments(); @@ -521,8 +522,10 @@ limitations under the License. test('_prefs.manual_review is respected', () => { const saveReviewedStub = sandbox.stub(element, '_saveReviewedState', () => Promise.resolve()); - sandbox.stub(element.$.diff, 'reload'); + const getReviewedStub = sandbox.stub(element, '_getReviewedStatus', + () => Promise.resolve()); + sandbox.stub(element.$.diff, 'reload'); element._loggedIn = true; element.params = { view: Gerrit.Nav.View.DIFF, @@ -535,10 +538,13 @@ limitations under the License. flushAsynchronousOperations(); assert.isFalse(saveReviewedStub.called); + assert.isTrue(getReviewedStub.called); + element._prefs = {}; flushAsynchronousOperations(); assert.isTrue(saveReviewedStub.called); + assert.isTrue(getReviewedStub.calledOnce); }); test('file review status', () => { @@ -994,6 +1000,25 @@ limitations under the License. [{value: '/foo'}, {value: '/bar'}]), 'show'); }); + test('_getReviewedStatus', () => { + const promises = []; + element.$.restAPI.getReviewedFiles.restore(); + + sandbox.stub(element.$.restAPI, 'getReviewedFiles') + .returns(Promise.resolve(['path'])); + + promises.push(element._getReviewedStatus(true, null, null, 'path') + .then(reviewed => assert.isFalse(reviewed))); + + promises.push(element._getReviewedStatus(false, null, null, 'otherPath') + .then(reviewed => assert.isFalse(reviewed))); + + promises.push(element._getReviewedStatus(false, null, null, 'path') + .then(reviewed => assert.isTrue(reviewed))); + + return Promise.all(promises); + }); + suite('editMode behavior', () => { setup(() => { element._loggedIn = true;