Fix review checkbox behavior in diff view
The saveReviewedState observer observes params.*, but should not set
reviewed state when view !== Gerrit.Nav.View.DIFF. This can (and did)
happen when the Gerrit.Nav API is used to change the view -- the
observer is triggered before the view is detached.
Bug: Issue 8192
Change-Id: I06c1875f6f515c0d001277e63eb7724728c85cba
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 364d844..24986ee 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
@@ -605,8 +605,9 @@
}
},
- _setReviewedObserver(_loggedIn) {
- if (_loggedIn) {
+ _setReviewedObserver(_loggedIn, paramsRecord) {
+ const params = paramsRecord.base || {};
+ if (_loggedIn && 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 9a55bbe..8e79a9b 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
@@ -47,14 +47,14 @@
const PARENT = 'PARENT';
- setup(done => {
+ setup(() => {
sandbox = sinon.sandbox.create();
stub('gr-rest-api-interface', {
getConfig() { return Promise.resolve({change: {}}); },
getLoggedIn() { return Promise.resolve(false); },
getProjectConfig() { return Promise.resolve({}); },
- getDiffChangeDetail() { return Promise.resolve(null); },
+ getDiffChangeDetail() { return Promise.resolve({}); },
getChangeFiles() { return Promise.resolve({}); },
saveFileReviewed() { return Promise.resolve(); },
getDiffComments() { return Promise.resolve({}); },
@@ -62,9 +62,7 @@
getDiffDrafts() { return Promise.resolve({}); },
});
element = fixture('basic');
- element._loadComments().then(() => {
- done();
- });
+ return element._loadComments();
});
teardown(() => {
@@ -511,7 +509,7 @@
assert.isTrue(link.hasAttribute('download'));
});
- test('file review status', done => {
+ test('file review status', () => {
const saveReviewedStub = sandbox.stub(element, '_saveReviewedState',
() => Promise.resolve());
sandbox.stub(element.$.diff, 'reload');
@@ -524,22 +522,27 @@
basePatchNum: '1',
path: '/COMMIT_MSG',
};
+ flushAsynchronousOperations();
- flush(() => {
- const commitMsg = Polymer.dom(element.root).querySelector(
- 'input[type="checkbox"]');
+ const commitMsg = Polymer.dom(element.root).querySelector(
+ 'input[type="checkbox"]');
- assert.isTrue(commitMsg.checked);
- MockInteractions.tap(commitMsg);
- assert.isFalse(commitMsg.checked);
- assert.isTrue(saveReviewedStub.lastCall.calledWithExactly(false));
+ assert.isTrue(commitMsg.checked);
+ MockInteractions.tap(commitMsg);
+ assert.isFalse(commitMsg.checked);
+ assert.isTrue(saveReviewedStub.lastCall.calledWithExactly(false));
- MockInteractions.tap(commitMsg);
- assert.isTrue(commitMsg.checked);
- assert.isTrue(saveReviewedStub.lastCall.calledWithExactly(true));
+ MockInteractions.tap(commitMsg);
+ assert.isTrue(commitMsg.checked);
+ assert.isTrue(saveReviewedStub.lastCall.calledWithExactly(true));
+ const callCount = saveReviewedStub.callCount;
- done();
- });
+ element.set('params.view', Gerrit.Nav.View.CHANGE);
+ flushAsynchronousOperations();
+
+ // saveReviewedState observer observes params, but should not fire when
+ // view !== Gerrit.Nav.View.DIFF.
+ assert.equal(saveReviewedStub.callCount, callCount);
});
test('file review status with edit loaded', () => {