Edit button in diff-view must be visible only for open changes
Issue: 12690 Change-Id: I2321eea9f0f43a15f5bf61674fa408dcba682125
This commit is contained in:
@@ -1327,6 +1327,11 @@ class GrDiffView extends mixinBehaviors( [
|
||||
_computeIsLoggedIn(loggedIn) {
|
||||
return loggedIn ? true : false;
|
||||
}
|
||||
|
||||
_computeCanEdit(loggedIn, changeChangeRecord) {
|
||||
return this._computeIsLoggedIn(loggedIn) &&
|
||||
this.changeIsOpen(changeChangeRecord.base);
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define(GrDiffView.is, GrDiffView);
|
||||
|
@@ -310,7 +310,7 @@ export const htmlTemplate = html`
|
||||
_isBlameLoading)]]</gr-button
|
||||
>
|
||||
</span>
|
||||
<template is="dom-if" if="[[_computeIsLoggedIn(_loggedIn)]]">
|
||||
<template is="dom-if" if="[[_computeCanEdit(_loggedIn, _change.*)]]">
|
||||
<span class="separator"></span>
|
||||
<span class="editButton">
|
||||
<gr-button
|
||||
|
@@ -44,6 +44,7 @@ import './gr-diff-view.js';
|
||||
import {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';
|
||||
import {KeyboardShortcutBinder} from '../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.js';
|
||||
import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
|
||||
import {ChangeStatus} from '../../../constants/constants.js';
|
||||
|
||||
suite('gr-diff-view tests', () => {
|
||||
suite('basic tests', () => {
|
||||
@@ -94,16 +95,36 @@ suite('gr-diff-view tests', () => {
|
||||
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({}); },
|
||||
getChangeFiles() { return Promise.resolve({}); },
|
||||
saveFileReviewed() { return Promise.resolve(); },
|
||||
getDiffComments() { return Promise.resolve({}); },
|
||||
getDiffRobotComments() { return Promise.resolve({}); },
|
||||
getDiffDrafts() { return Promise.resolve({}); },
|
||||
getReviewedFiles() { return Promise.resolve([]); },
|
||||
getConfig() {
|
||||
return Promise.resolve({change: {}});
|
||||
},
|
||||
getLoggedIn() {
|
||||
return Promise.resolve(false);
|
||||
},
|
||||
getProjectConfig() {
|
||||
return Promise.resolve({});
|
||||
},
|
||||
getDiffChangeDetail() {
|
||||
return Promise.resolve({});
|
||||
},
|
||||
getChangeFiles() {
|
||||
return Promise.resolve({});
|
||||
},
|
||||
saveFileReviewed() {
|
||||
return Promise.resolve();
|
||||
},
|
||||
getDiffComments() {
|
||||
return Promise.resolve({});
|
||||
},
|
||||
getDiffRobotComments() {
|
||||
return Promise.resolve({});
|
||||
},
|
||||
getDiffDrafts() {
|
||||
return Promise.resolve({});
|
||||
},
|
||||
getReviewedFiles() {
|
||||
return Promise.resolve([]);
|
||||
},
|
||||
});
|
||||
element = fixture('basic');
|
||||
return element._loadComments();
|
||||
@@ -383,6 +404,7 @@ suite('gr-diff-view tests', () => {
|
||||
};
|
||||
element._change = {
|
||||
_number: 42,
|
||||
status: ChangeStatus.NEW,
|
||||
revisions: {
|
||||
a: {_number: 1, commit: {parents: []}},
|
||||
b: {_number: 2, commit: {parents: []}},
|
||||
@@ -399,26 +421,61 @@ suite('gr-diff-view tests', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('edit hidden when not logged in', done => {
|
||||
element._loggedIn = false;
|
||||
element._path = 't.txt';
|
||||
element._patchRange = {
|
||||
basePatchNum: PARENT,
|
||||
patchNum: '1',
|
||||
};
|
||||
element._change = {
|
||||
_number: 42,
|
||||
revisions: {
|
||||
a: {_number: 1, commit: {parents: []}},
|
||||
b: {_number: 2, commit: {parents: []}},
|
||||
},
|
||||
};
|
||||
flush(() => {
|
||||
const editBtn = element.shadowRoot
|
||||
.querySelector('.editButton gr-button');
|
||||
assert.isFalse(!!editBtn);
|
||||
done();
|
||||
function isEditVisibile({loggedIn, changeStatus}) {
|
||||
return new Promise(resolve => {
|
||||
element._loggedIn = loggedIn;
|
||||
element._path = 't.txt';
|
||||
element._patchRange = {
|
||||
basePatchNum: PARENT,
|
||||
patchNum: '1',
|
||||
};
|
||||
element._change = {
|
||||
_number: 42,
|
||||
status: changeStatus,
|
||||
revisions: {
|
||||
a: {_number: 1, commit: {parents: []}},
|
||||
b: {_number: 2, commit: {parents: []}},
|
||||
},
|
||||
};
|
||||
flush(() => {
|
||||
const editBtn = element.shadowRoot
|
||||
.querySelector('.editButton gr-button');
|
||||
resolve(!!editBtn);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
test('edit visible only when logged and status NEW', async () => {
|
||||
for (const changeStatus in ChangeStatus) {
|
||||
if (!ChangeStatus.hasOwnProperty(changeStatus)) {
|
||||
continue;
|
||||
}
|
||||
assert.isFalse(await isEditVisibile({loggedIn: false, changeStatus}),
|
||||
`loggedIn: false, changeStatus: ${changeStatus}`);
|
||||
|
||||
if (changeStatus !== ChangeStatus.NEW) {
|
||||
assert.isFalse(await isEditVisibile({loggedIn: true, changeStatus}),
|
||||
`loggedIn: true, changeStatus: ${changeStatus}`);
|
||||
} else {
|
||||
assert.isTrue(await isEditVisibile({loggedIn: true, changeStatus}),
|
||||
`loggedIn: true, changeStatus: ${changeStatus}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
test('edit visible when logged and status NEW', async () => {
|
||||
assert.isTrue(await isEditVisibile(
|
||||
{loggedIn: true, changeStatus: ChangeStatus.NEW}));
|
||||
});
|
||||
|
||||
test('edit hidden when logged and status ABANDONED', async () => {
|
||||
assert.isFalse(await isEditVisibile(
|
||||
{loggedIn: true, changeStatus: ChangeStatus.ABANDONED}));
|
||||
});
|
||||
|
||||
test('edit hidden when logged and status MERGED', async () => {
|
||||
assert.isFalse(await isEditVisibile(
|
||||
{loggedIn: true, changeStatus: ChangeStatus.MERGED}));
|
||||
});
|
||||
|
||||
suite('diff prefs hidden', () => {
|
||||
|
Reference in New Issue
Block a user