Merge "Only request change detail and comments when changeNum changes"
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
index e2baec9..5b48345 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
@@ -1120,12 +1120,10 @@
return;
}
- this._change = undefined;
this._files = {sortedFileList: [], changeFilesByPath: {}};
this._path = undefined;
this._patchRange = undefined;
this._commitRange = undefined;
- this._changeComments = undefined;
this._focusLineNum = undefined;
if (value.changeNum && value.project) {
@@ -1156,8 +1154,9 @@
})
);
- promises.push(this._getChangeDetail(this._changeNum));
- this._loadComments(value.patchNum);
+ if (!this._change) promises.push(this._getChangeDetail(this._changeNum));
+
+ if (!this._changeComments) this._loadComments(value.patchNum);
promises.push(this._getChangeEdit());
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js
index 735624a..2c4750a 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js
@@ -29,6 +29,7 @@
} from '../../../test/test-data-generators.js';
import {EditPatchSetNum} from '../../../types/common.js';
import {CursorMoveResult} from '../../../api/core.js';
+import {EventType} from '../../../types/events.js';
const basicFixture = fixtureFromElement('gr-diff-view');
@@ -323,6 +324,60 @@
assert.equal(element._isFileUnchanged(diff), true);
});
+ test('change detail is not rerequested if changeNum doesnt change',
+ async () => {
+ const dispatchEventStub = sinon.stub(element, 'dispatchEvent');
+ assert.isFalse(getDiffChangeDetailStub.called);
+ sinon.stub(element.reporting, 'diffViewDisplayed');
+ sinon.stub(element, '_loadBlame');
+ sinon.stub(element.$.diffHost, 'reload').returns(Promise.resolve());
+ sinon.spy(element, '_paramsChanged');
+ element._change = undefined;
+ getDiffChangeDetailStub.returns(
+ Promise.resolve({
+ ...createChange(),
+ revisions: createRevisions(11),
+ }));
+ element._patchRange = {
+ patchNum: 2,
+ basePatchNum: 1,
+ };
+ sinon.stub(element, '_isFileUnchanged').returns(false);
+
+ element.params = {
+ view: GerritNav.View.DIFF,
+ changeNum: '42',
+ project: 'p',
+ commentId: 'c1',
+ commentLink: true,
+ };
+ await element._paramsChanged.returnValues[0];
+
+ assert.equal(getDiffChangeDetailStub.callCount, 1);
+ element.params = {
+ view: GerritNav.View.DIFF,
+ changeNum: '42',
+ project: 'p',
+ commentId: 'c1',
+ commentLink: true,
+ };
+ await element._paramsChanged.returnValues[0];
+
+ assert.equal(getDiffChangeDetailStub.callCount, 1);
+ element.params = {
+ view: GerritNav.View.DIFF,
+ changeNum: '43',
+ project: 'p',
+ commentId: 'c1',
+ commentLink: true,
+ };
+ await element._paramsChanged.returnValues[0];
+
+ // change page is recreated now
+ assert.equal(dispatchEventStub.lastCall.args[0].type,
+ EventType.RECREATE_DIFF_VIEW);
+ });
+
test('diff toast to go to latest is shown and not base', async () => {
diffCommentsStub.returns(Promise.resolve({
'/COMMIT_MSG': [
@@ -344,6 +399,7 @@
sinon.stub(element, '_loadBlame');
sinon.stub(element.$.diffHost, 'reload').returns(Promise.resolve());
sinon.spy(element, '_paramsChanged');
+ element._change = undefined;
getDiffChangeDetailStub.returns(
Promise.resolve({
...createChange(),