Call Gerrit.Nav.upgradeUrl from valid views
The migration to project-based URLs has made evident the need for some
alias in gr-navigation to `history.replaceState`. This change calls
the function `upgradeUrl` within gr-diff-view and gr-change-view iff the
project returned by getChangeDetail differs from the one set on
app.params.
Bug: Issue 6708
Change-Id: I7b542ddb989527b6a89ccdfd79846808835ed5a3
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 168ec57..fce9c27 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
@@ -160,10 +160,17 @@
},
_getChangeDetail(changeNum) {
- return this.$.restAPI.getDiffChangeDetail(changeNum).then(
- change => {
- this._change = change;
- });
+ return this.$.restAPI.getDiffChangeDetail(changeNum).then(change => {
+ this._change = change;
+ this._upgradeUrl(change, this.params);
+ });
+ },
+
+ _upgradeUrl(change, params) {
+ const project = change.project;
+ if (!params.project || project !== params.project) {
+ Gerrit.Nav.upgradeUrl(Object.assign({}, params, {project}));
+ }
},
_getFiles(changeNum, patchRangeRecord) {
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 1503f93f..afba895 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
@@ -463,6 +463,7 @@
stub('gr-rest-api-interface', {
getDiffComments() { return Promise.resolve({}); },
});
+ sandbox.stub(element, '_upgradeUrl');
const saveReviewedStub = sandbox.stub(element, '_saveReviewedState',
() => Promise.resolve());
sandbox.stub(element.$.diff, 'reload');
@@ -497,6 +498,7 @@
stub('gr-rest-api-interface', {
getDiffComments() { return Promise.resolve({}); },
});
+ sandbox.stub(element, '_upgradeUrl');
sandbox.stub(element.$.diff, 'reload');
sandbox.stub(element, '_loadHash');
@@ -734,5 +736,31 @@
assert.isNull(result.next);
});
});
+
+ suite('_upgradeUrl calls', () => {
+ let upgradeStub;
+ const mockChange = {project: 'test'};
+
+ setup(() => {
+ upgradeStub = sandbox.stub(window.Gerrit.Nav, 'upgradeUrl');
+ });
+
+ test('app.params.project undefined', () => {
+ element._upgradeUrl(mockChange, {});
+ assert.isTrue(upgradeStub.called);
+ assert.deepEqual(upgradeStub.lastCall.args[0], mockChange);
+ });
+
+ test('app.params.project differs from change.project', () => {
+ element._upgradeUrl(mockChange, {project: 'demo'});
+ assert.isTrue(upgradeStub.called);
+ assert.deepEqual(upgradeStub.lastCall.args[0], mockChange);
+ });
+
+ test('app.params.project === change.project', () => {
+ element._upgradeUrl(mockChange, {project: 'test'});
+ assert.isFalse(upgradeStub.called);
+ });
+ });
});
</script>