summaryrefslogtreecommitdiffstats
path: root/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
diff options
context:
space:
mode:
Diffstat (limited to 'polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html')
-rw-r--r--polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html267
1 files changed, 179 insertions, 88 deletions
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
index 919a64f81e..5793b05f9b 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
@@ -20,10 +20,10 @@ limitations under the License.
<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<script src="../../../bower_components/web-component-tester/browser.js"></script>
+<link rel="import" href="../../../test/common-test-setup.html"/>
<script src="../../../bower_components/page/page.js"></script>
<script src="../../../scripts/util.js"></script>
-<link rel="import" href="../../../bower_components/iron-test-helpers/iron-test-helpers.html">
<link rel="import" href="gr-diff-comment.html">
<script>void(0);</script>
@@ -47,12 +47,12 @@ limitations under the License.
return getComputedStyle(el).getPropertyValue('display') !== 'none';
}
- suite('gr-diff-comment tests', function() {
- var element;
- var sandbox;
- setup(function() {
+ suite('gr-diff-comment tests', () => {
+ let element;
+ let sandbox;
+ setup(() => {
stub('gr-rest-api-interface', {
- getAccount: function() { return Promise.resolve(null); },
+ getAccount() { return Promise.resolve(null); },
});
element = fixture('basic');
element.comment = {
@@ -68,18 +68,18 @@ limitations under the License.
sandbox = sinon.sandbox.create();
});
- teardown(function() {
+ teardown(() => {
sandbox.restore();
});
- test('collapsible comments', function() {
+ test('collapsible comments', () => {
// When a comment (not draft) is loaded, it should be collapsed
assert.isTrue(element.collapsed);
assert.isFalse(isVisible(element.$$('gr-formatted-text')),
'gr-formatted-text is not visible');
assert.isFalse(isVisible(element.$$('.actions')),
'actions are not visible');
- assert.isFalse(isVisible(element.$$('iron-autogrow-textarea')),
+ assert.isFalse(isVisible(element.$$('gr-textarea')),
'textarea is not visible');
// The header middle content is only visible when comments are collapsed.
@@ -94,27 +94,26 @@ limitations under the License.
'gr-formatted-text is visible');
assert.isTrue(isVisible(element.$$('.actions')),
'actions are visible');
- assert.isFalse(isVisible(element.$$('iron-autogrow-textarea')),
+ assert.isFalse(isVisible(element.$$('gr-textarea')),
'textarea is not visible');
assert.isFalse(isVisible(element.$$('.collapsedContent')),
'header middle content is not visible');
});
- test('clicking on date link does not trigger nav', function() {
- var showStub = sinon.stub(page, 'show');
- var dateEl = element.$$('.date');
+ test('clicking on date link does not trigger nav', () => {
+ const showStub = sinon.stub(page, 'show');
+ const dateEl = element.$$('.date');
assert.ok(dateEl);
MockInteractions.tap(dateEl);
- var dest = window.location.pathname + '#5';
+ const dest = window.location.pathname + '#5';
assert(showStub.lastCall.calledWithExactly(dest, null, false),
'Should navigate to ' + dest + ' without triggering nav');
showStub.restore();
});
- test('message is not retrieved from storage when other editing is true',
- function(done) {
- var storageStub = sandbox.stub(element.$.storage, 'getDraftComment');
- var loadSpy = sandbox.spy(element, '_loadLocalDraft');
+ test('message is not retrieved from storage when other edits', done => {
+ const storageStub = sandbox.stub(element.$.storage, 'getDraftComment');
+ const loadSpy = sandbox.spy(element, '_loadLocalDraft');
element.changeNum = 1;
element.patchNum = 1;
@@ -126,17 +125,16 @@ limitations under the License.
line: 5,
__otherEditing: true,
};
- flush(function() {
+ flush(() => {
assert.isTrue(loadSpy.called);
assert.isFalse(storageStub.called);
done();
});
});
- test('message is retrieved from storage when there is no other editing',
- function(done) {
- var storageStub = sandbox.stub(element.$.storage, 'getDraftComment');
- var loadSpy = sandbox.spy(element, '_loadLocalDraft');
+ test('message is retrieved from storage when no other edits', done => {
+ const storageStub = sandbox.stub(element.$.storage, 'getDraftComment');
+ const loadSpy = sandbox.spy(element, '_loadLocalDraft');
element.changeNum = 1;
element.patchNum = 1;
@@ -147,14 +145,14 @@ limitations under the License.
},
line: 5,
};
- flush(function() {
+ flush(() => {
assert.isTrue(loadSpy.called);
assert.isTrue(storageStub.called);
done();
});
});
- test('_getPatchNum', function() {
+ test('_getPatchNum', () => {
element.side = 'PARENT';
element.patchNum = 1;
assert.equal(element._getPatchNum(), 'PARENT');
@@ -162,13 +160,13 @@ limitations under the License.
assert.equal(element._getPatchNum(), 1);
});
- test('comment expand and collapse', function() {
+ test('comment expand and collapse', () => {
element.collapsed = true;
assert.isFalse(isVisible(element.$$('gr-formatted-text')),
'gr-formatted-text is not visible');
assert.isFalse(isVisible(element.$$('.actions')),
'actions are not visible');
- assert.isFalse(isVisible(element.$$('iron-autogrow-textarea')),
+ assert.isFalse(isVisible(element.$$('gr-textarea')),
'textarea is not visible');
assert.isTrue(isVisible(element.$$('.collapsedContent')),
'header middle content is visible');
@@ -179,14 +177,14 @@ limitations under the License.
'gr-formatted-text is visible');
assert.isTrue(isVisible(element.$$('.actions')),
'actions are visible');
- assert.isFalse(isVisible(element.$$('iron-autogrow-textarea')),
+ assert.isFalse(isVisible(element.$$('gr-textarea')),
'textarea is not visible');
assert.isFalse(isVisible(element.$$('.collapsedContent')),
'header middle content is is not visible');
});
- suite('while editing', function() {
- setup(function() {
+ suite('while editing', () => {
+ setup(() => {
element.editing = true;
element._messageText = 'test';
sandbox.stub(element, '_handleCancel');
@@ -194,75 +192,108 @@ limitations under the License.
flushAsynchronousOperations();
});
- suite('when text is empty', function() {
- setup(function() {
+ suite('when text is empty', () => {
+ setup(() => {
element._messageText = '';
});
- test('esc closes comment when text is empty', function() {
+ test('esc closes comment when text is empty', () => {
MockInteractions.pressAndReleaseKeyOn(
element.$.editTextarea, 27); // esc
assert.isTrue(element._handleCancel.called);
});
- test('ctrl+enter does not save', function() {
+ test('ctrl+enter does not save', () => {
MockInteractions.pressAndReleaseKeyOn(
element.$.editTextarea, 13, 'ctrl'); // ctrl + enter
assert.isFalse(element._handleSave.called);
});
- test('meta+enter does not save', function() {
+ test('meta+enter does not save', () => {
MockInteractions.pressAndReleaseKeyOn(
element.$.editTextarea, 13, 'meta'); // meta + enter
assert.isFalse(element._handleSave.called);
});
- test('ctrl+s does not save', function() {
+ test('ctrl+s does not save', () => {
MockInteractions.pressAndReleaseKeyOn(
element.$.editTextarea, 83, 'ctrl'); // ctrl + s
assert.isFalse(element._handleSave.called);
});
});
- test('esc does not close comment that has content', function() {
+ test('esc does not close comment that has content', () => {
MockInteractions.pressAndReleaseKeyOn(
element.$.editTextarea, 27); // esc
assert.isFalse(element._handleCancel.called);
});
- test('ctrl+enter saves', function() {
+ test('ctrl+enter saves', () => {
MockInteractions.pressAndReleaseKeyOn(
element.$.editTextarea, 13, 'ctrl'); // ctrl + enter
assert.isTrue(element._handleSave.called);
});
- test('meta+enter saves', function() {
+ test('meta+enter saves', () => {
MockInteractions.pressAndReleaseKeyOn(
element.$.editTextarea, 13, 'meta'); // meta + enter
assert.isTrue(element._handleSave.called);
});
- test('ctrl+s saves', function() {
+ test('ctrl+s saves', () => {
MockInteractions.pressAndReleaseKeyOn(
element.$.editTextarea, 83, 'ctrl'); // ctrl + s
assert.isTrue(element._handleSave.called);
});
});
+ test('delete comment button for non-admins is hidden', () => {
+ element._isAdmin = false;
+ assert.isFalse(element.$$('.action.delete')
+ .classList.contains('showDeleteButtons'));
+ });
+
+ test('delete comment button for admins with draft is hidden', () => {
+ element._isAdmin = false;
+ element.draft = true;
+ assert.isFalse(element.$$('.action.delete')
+ .classList.contains('showDeleteButtons'));
+ });
+
+ test('delete comment', done => {
+ sandbox.stub(
+ element.$.restAPI, 'deleteComment').returns(Promise.resolve({}));
+ sandbox.spy(element.$.confirmDeleteOverlay, 'open');
+ element.changeNum = 42;
+ element.patchNum = 0xDEADBEEF;
+ element._isAdmin = true;
+ assert.isTrue(element.$$('.action.delete')
+ .classList.contains('showDeleteButtons'));
+ MockInteractions.tap(element.$$('.action.delete'));
+ flush(() => {
+ element.$.confirmDeleteOverlay.open.lastCall.returnValue.then(() => {
+ element.$.confirmDeleteComment.message = 'removal reason';
+ element._handleConfirmDeleteComment();
+ assert.isTrue(element.$.restAPI.deleteComment.calledWith(
+ 42, 0xDEADBEEF, 'baf0414d_60047215', 'removal reason'));
+ done();
+ });
+ });
+ });
});
- suite('gr-diff-comment draft tests', function() {
- var element;
- var sandbox;
+ suite('gr-diff-comment draft tests', () => {
+ let element;
+ let sandbox;
- setup(function() {
+ setup(() => {
stub('gr-rest-api-interface', {
- getAccount: function() { return Promise.resolve(null); },
- saveDiffDraft: function() {
+ getAccount() { return Promise.resolve(null); },
+ saveDiffDraft() {
return Promise.resolve({
ok: true,
- text: function() {
+ text() {
return Promise.resolve(
- ')]}\'\n{' +
+ ')]}\'\n{' +
'"id": "baf0414d_40572e03",' +
'"path": "/path/to/file",' +
'"line": 5,' +
@@ -273,12 +304,12 @@ limitations under the License.
},
});
},
- removeChangeReviewer: function() {
+ removeChangeReviewer() {
return Promise.resolve({ok: true});
},
});
stub('gr-storage', {
- getDraftComment: function() { return null; },
+ getDraftComment() { return null; },
});
element = fixture('draft');
element.changeNum = 42;
@@ -295,11 +326,11 @@ limitations under the License.
sandbox = sinon.sandbox.create();
});
- teardown(function() {
+ teardown(() => {
sandbox.restore();
});
- test('button visibility states', function() {
+ test('button visibility states', () => {
element.showActions = false;
assert.isTrue(element.$$('.humanActions').hasAttribute('hidden'));
assert.isTrue(element.$$('.robotActions').hasAttribute('hidden'));
@@ -356,13 +387,13 @@ limitations under the License.
assert.isFalse(element.$$('.robotActions').hasAttribute('hidden'));
});
- test('collapsible drafts', function() {
+ test('collapsible drafts', () => {
assert.isTrue(element.collapsed);
assert.isFalse(isVisible(element.$$('gr-formatted-text')),
'gr-formatted-text is not visible');
assert.isFalse(isVisible(element.$$('.actions')),
'actions are not visible');
- assert.isFalse(isVisible(element.$$('iron-autogrow-textarea')),
+ assert.isFalse(isVisible(element.$$('gr-textarea')),
'textarea is not visible');
assert.isTrue(isVisible(element.$$('.collapsedContent')),
'header middle content is visible');
@@ -373,7 +404,7 @@ limitations under the License.
'gr-formatted-text is visible');
assert.isTrue(isVisible(element.$$('.actions')),
'actions are visible');
- assert.isFalse(isVisible(element.$$('iron-autogrow-textarea')),
+ assert.isFalse(isVisible(element.$$('gr-textarea')),
'textarea is not visible');
assert.isFalse(isVisible(element.$$('.collapsedContent')),
'header middle content is is not visible');
@@ -386,7 +417,7 @@ limitations under the License.
'gr-formatted-text is not visible');
assert.isTrue(isVisible(element.$$('.actions')),
'actions are visible');
- assert.isTrue(isVisible(element.$$('iron-autogrow-textarea')),
+ assert.isTrue(isVisible(element.$$('gr-textarea')),
'textarea is visible');
assert.isFalse(isVisible(element.$$('.collapsedContent')),
'header middle content is not visible');
@@ -399,7 +430,7 @@ limitations under the License.
'gr-formatted-text is not visible');
assert.isFalse(isVisible(element.$$('.actions')),
'actions are not visible');
- assert.isFalse(isVisible(element.$$('iron-autogrow-textarea')),
+ assert.isFalse(isVisible(element.$$('gr-textarea')),
'textarea is not visible');
assert.isTrue(isVisible(element.$$('.collapsedContent')),
'header middle content is visible');
@@ -411,32 +442,32 @@ limitations under the License.
'gr-formatted-text is not visible');
assert.isTrue(isVisible(element.$$('.actions')),
'actions are visible');
- assert.isTrue(isVisible(element.$$('iron-autogrow-textarea')),
+ assert.isTrue(isVisible(element.$$('gr-textarea')),
'textarea is visible');
assert.isFalse(isVisible(element.$$('.collapsedContent')),
'header middle content is not visible');
});
- test('draft creation/cancelation', function(done) {
+ test('draft creation/cancelation', done => {
assert.isFalse(element.editing);
MockInteractions.tap(element.$$('.edit'));
assert.isTrue(element.editing);
element._messageText = '';
- var eraseMessageDraftSpy = sandbox.spy(element, '_eraseDraftComment');
+ const eraseMessageDraftSpy = sandbox.spy(element, '_eraseDraftComment');
// Save should be disabled on an empty message.
- var disabled = element.$$('.save').hasAttribute('disabled');
+ let disabled = element.$$('.save').hasAttribute('disabled');
assert.isTrue(disabled, 'save button should be disabled.');
element._messageText = ' ';
disabled = element.$$('.save').hasAttribute('disabled');
assert.isTrue(disabled, 'save button should be disabled.');
- var updateStub = sinon.stub();
+ const updateStub = sinon.stub();
element.addEventListener('comment-update', updateStub);
- var numDiscardEvents = 0;
- element.addEventListener('comment-discard', function(e) {
+ let numDiscardEvents = 0;
+ element.addEventListener('comment-discard', e => {
numDiscardEvents++;
assert.isFalse(eraseMessageDraftSpy.called);
if (numDiscardEvents === 2) {
@@ -450,32 +481,61 @@ limitations under the License.
MockInteractions.pressAndReleaseKeyOn(element.$.editTextarea, 27); // esc
});
- test('draft discard removes message from storage', function(done) {
+ test('draft discard removes message from storage', done => {
element._messageText = '';
- var eraseMessageDraftSpy = sandbox.spy(element, '_eraseDraftComment');
+ const eraseMessageDraftSpy = sandbox.spy(element, '_eraseDraftComment');
+ sandbox.stub(element, '_closeConfirmDiscardOverlay');
- var numDiscardEvents = 0;
- element.addEventListener('comment-discard', function(e) {
+ element.addEventListener('comment-discard', e => {
assert.isTrue(eraseMessageDraftSpy.called);
done();
});
- MockInteractions.tap(element.$$('.discard'));
+ element._handleConfirmDiscard({preventDefault: sinon.stub()});
+ });
+
+ suite('confirm discard', () => {
+ let saveDisabled;
+ let discardStub;
+ let overlayStub;
+ let mockEvent;
+
+ setup(() => {
+ sandbox.stub(element, '_computeSaveDisabled', () => saveDisabled);
+ discardStub = sandbox.stub(element, '_discardDraft');
+ overlayStub = sandbox.stub(element, '_openOverlay');
+ mockEvent = {preventDefault: sinon.stub()};
+ });
+
+ test('confirms discard of comments that can be saved', () => {
+ saveDisabled = false;
+ element._handleDiscard(mockEvent);
+ assert.isTrue(overlayStub.calledWith(element.$.confirmDiscardOverlay));
+ assert.isFalse(discardStub.called);
+ });
+
+ test('no confirmation for comments that cannot be saved', () => {
+ saveDisabled = true;
+ element._handleDiscard(mockEvent);
+ assert.isFalse(overlayStub.called);
+ assert.isTrue(discardStub.calledOnce);
+ });
});
- test('ctrl+s saves comment', function(done) {
- var stub = sinon.stub(element, 'save', function() {
+ test('ctrl+s saves comment', done => {
+ const stub = sinon.stub(element, 'save', () => {
assert.isTrue(stub.called);
stub.restore();
done();
});
element._messageText = 'is that the horse from horsing around??';
MockInteractions.pressAndReleaseKeyOn(
- element.$.editTextarea.textarea,
- 83, 'ctrl'); // 'ctrl + s'
+ element.$.editTextarea.$.textarea.textarea,
+ 83, 'ctrl'); // 'ctrl + s'
});
- test('draft saving/editing', function(done) {
- var fireStub = sinon.stub(element, 'fire');
+ test('draft saving/editing', done => {
+ const fireStub = sinon.stub(element, 'fire');
+ const cancelDebounce = sandbox.stub(element, 'cancelDebouncer');
element.draft = true;
MockInteractions.tap(element.$$('.edit'));
@@ -483,7 +543,7 @@ limitations under the License.
element.flushDebouncer('fire-update');
element.flushDebouncer('store');
assert(fireStub.calledWith('comment-update'),
- 'comment-update should be sent');
+ 'comment-update should be sent');
assert.deepEqual(fireStub.lastCall.args, [
'comment-update', {
comment: {
@@ -504,9 +564,11 @@ limitations under the License.
assert.isTrue(element.disabled,
'Element should be disabled when creating draft.');
- element._xhrPromise.then(function(draft) {
+ element._xhrPromise.then(draft => {
assert(fireStub.calledWith('comment-save'),
- 'comment-save should be sent');
+ 'comment-save should be sent');
+ assert(cancelDebounce.calledWith('store'));
+
assert.deepEqual(fireStub.lastCall.args[1], {
comment: {
__commentSide: 'right',
@@ -522,10 +584,10 @@ limitations under the License.
patchNum: 1,
});
assert.isFalse(element.disabled,
- 'Element should be enabled when done creating draft.');
+ 'Element should be enabled when done creating draft.');
assert.equal(draft.message, 'saved!');
assert.isFalse(element.editing);
- }).then(function() {
+ }).then(() => {
MockInteractions.tap(element.$$('.edit'));
element._messageText = 'You’ll be delivering a package to Chapek 9, ' +
'a world where humans are killed on sight.';
@@ -533,7 +595,7 @@ limitations under the License.
assert.isTrue(element.disabled,
'Element should be disabled when updating draft.');
- element._xhrPromise.then(function(draft) {
+ element._xhrPromise.then(draft => {
assert.isFalse(element.disabled,
'Element should be enabled when done updating draft.');
assert.equal(draft.message, 'saved!');
@@ -544,30 +606,59 @@ limitations under the License.
});
});
- test('clicking on date link does not trigger nav', function() {
- var showStub = sinon.stub(page, 'show');
- var dateEl = element.$$('.date');
+ test('clicking on date link does not trigger nav', () => {
+ const showStub = sinon.stub(page, 'show');
+ const dateEl = element.$$('.date');
assert.ok(dateEl);
MockInteractions.tap(dateEl);
- var dest = window.location.pathname + '#5';
+ const dest = window.location.pathname + '#5';
assert(showStub.lastCall.calledWithExactly(dest, null, false),
'Should navigate to ' + dest + ' without triggering nav');
showStub.restore();
});
- test('proper event fires on resolve', function(done) {
- element.addEventListener('comment-update', function(e) {
+ test('proper event fires on resolve', done => {
+ element.addEventListener('comment-update', e => {
assert.isTrue(e.detail.comment.unresolved);
done();
});
MockInteractions.tap(element.$$('.resolve input'));
});
- test('resolved comment state indicated by checkbox', function() {
+ test('resolved comment state indicated by checkbox', () => {
element.comment = {unresolved: false};
assert.isTrue(element.$$('.resolve input').checked);
element.comment = {unresolved: true};
assert.isFalse(element.$$('.resolve input').checked);
});
+
+ suite('draft saving messages', () => {
+ test('_getSavingMessage', () => {
+ assert.equal(element._getSavingMessage(0), 'All changes saved');
+ assert.equal(element._getSavingMessage(1), 'Saving 1 draft...');
+ assert.equal(element._getSavingMessage(2), 'Saving 2 drafts...');
+ assert.equal(element._getSavingMessage(3), 'Saving 3 drafts...');
+ });
+
+ test('_show{Start,End}Request', () => {
+ const updateStub = sandbox.stub(element, '_updateRequestToast');
+ element._numPendingDiffRequests.number = 1;
+
+ element._showStartRequest();
+ assert.isTrue(updateStub.calledOnce);
+ assert.equal(updateStub.lastCall.args[0], 2);
+ assert.equal(element._numPendingDiffRequests.number, 2);
+
+ element._showEndRequest();
+ assert.isTrue(updateStub.calledTwice);
+ assert.equal(updateStub.lastCall.args[0], 1);
+ assert.equal(element._numPendingDiffRequests.number, 1);
+
+ element._showEndRequest();
+ assert.isTrue(updateStub.calledThrice);
+ assert.equal(updateStub.lastCall.args[0], 0);
+ assert.equal(element._numPendingDiffRequests.number, 0);
+ });
+ });
});
</script>