Merge "When edit is latest patchset, select it by default"

This commit is contained in:
Wyatt Allen
2017-08-15 01:05:39 +00:00
committed by Gerrit Code Review
2 changed files with 63 additions and 8 deletions

View File

@@ -924,6 +924,30 @@
return msg.replace(REVIEWERS_REGEX, '$1=\u200B');
},
/**
* Utility function to make the necessary modifications to a change in the
* case an edit exists.
*
* @param {!Object} change
* @param {?Object} edit
*/
_processEdit(change, edit) {
if (!edit) { return; }
change.revisions[edit.commit.commit] = {
_number: this.EDIT_NAME,
basePatchNum: edit.base_patch_set_number,
commit: edit.commit,
fetch: edit.fetch,
};
// If the edit is based on the most recent patchset, load it by
// default, unless another patch set to load was specified in the URL.
if (!this._patchRange.patchNum &&
change.current_revision === edit.base_revision) {
change.current_revision = edit.commit.commit;
this._patchRange.patchNum = this.EDIT_NAME;
}
},
_getChangeDetail() {
const detailCompletes = this.$.restAPI.getChangeDetail(
this._changeNum, this._handleGetChangeDetailError.bind(this));
@@ -935,14 +959,7 @@
return '';
}
this._upgradeUrl(change, this.params);
if (edit) {
change.revisions[edit.commit.commit] = {
_number: this.EDIT_NAME,
basePatchNum: edit.base_patch_set_number,
commit: edit.commit,
fetch: edit.fetch,
};
}
this._processEdit(change, edit);
// Issue 4190: Coalesce missing topics to null.
if (!change.topic) { change.topic = null; }
if (!change.reviewer_updates) {

View File

@@ -886,6 +886,7 @@ limitations under the License.
commit: {commit: 'bar'},
});
});
element._patchRange = {};
return element._getChangeDetail().then(() => {
const revs = element._change.revisions;
@@ -1296,6 +1297,43 @@ limitations under the License.
assert.isTrue(callCompute({basePatchNum: 1, patchNum: 'edit'}));
});
test('_processEdit', () => {
element._patchRange = {};
const change = {
current_revision: 'foo',
revisions: {foo: {commit: {}}},
};
let mockChange;
// With no edit, mockChange should be unmodified.
element._processEdit(mockChange = _.cloneDeep(change), null);
assert.deepEqual(mockChange, change);
// When edit is not based on the latest PS, current_revision should be
// unmodified.
const edit = {
base_patch_set_number: 1,
commit: {commit: 'bar'},
fetch: true,
};
element._processEdit(mockChange = _.cloneDeep(change), edit);
assert.notDeepEqual(mockChange, change);
assert.equal(mockChange.revisions.bar._number, element.EDIT_NAME);
assert.equal(mockChange.current_revision, change.current_revision);
assert.deepEqual(mockChange.revisions.bar.commit, {commit: 'bar'});
edit.base_revision = 'foo';
element._processEdit(mockChange = _.cloneDeep(change), edit);
assert.notDeepEqual(mockChange, change);
assert.equal(mockChange.current_revision, 'bar');
// If _patchRange.patchNum is defined, do not load edit.
element._patchRange.patchNum = 'baz';
change.current_revision = 'baz';
element._processEdit(mockChange = _.cloneDeep(change), edit);
assert.equal(element._patchRange.patchNum, 'baz');
});
suite('_upgradeUrl calls', () => {
let upgradeStub;
const mockChange = {project: 'test'};