2015-11-18 16:31:18 -05:00
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<!--
|
2018-03-26 10:04:27 -04:00
|
|
|
|
@license
|
2015-11-18 16:31:18 -05:00
|
|
|
|
Copyright (C) 2015 The Android Open Source Project
|
|
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
|
limitations under the License.
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
|
|
|
|
|
<title>gr-diff-comment-thread</title>
|
|
|
|
|
|
2016-03-04 17:48:22 -05:00
|
|
|
|
<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
|
|
|
|
|
<script src="../../../bower_components/web-component-tester/browser.js"></script>
|
2017-06-02 13:08:19 -04:00
|
|
|
|
<link rel="import" href="../../../test/common-test-setup.html"/>
|
2016-03-04 17:48:22 -05:00
|
|
|
|
<script src="../../../scripts/util.js"></script>
|
2015-11-18 16:31:18 -05:00
|
|
|
|
|
2016-03-04 17:48:22 -05:00
|
|
|
|
<link rel="import" href="gr-diff-comment-thread.html">
|
2015-11-18 16:31:18 -05:00
|
|
|
|
|
2017-03-28 17:02:44 -07:00
|
|
|
|
<script>void(0);</script>
|
|
|
|
|
|
2015-11-18 16:31:18 -05:00
|
|
|
|
<test-fixture id="basic">
|
|
|
|
|
<template>
|
|
|
|
|
<gr-diff-comment-thread></gr-diff-comment-thread>
|
|
|
|
|
</template>
|
|
|
|
|
</test-fixture>
|
|
|
|
|
|
2015-12-20 19:13:45 -05:00
|
|
|
|
<test-fixture id="withComment">
|
|
|
|
|
<template>
|
|
|
|
|
<gr-diff-comment-thread></gr-diff-comment-thread>
|
|
|
|
|
</template>
|
|
|
|
|
</test-fixture>
|
|
|
|
|
|
2015-11-18 16:31:18 -05:00
|
|
|
|
<script>
|
2017-05-16 13:56:20 -07:00
|
|
|
|
suite('gr-diff-comment-thread tests', () => {
|
|
|
|
|
let element;
|
|
|
|
|
let sandbox;
|
2017-01-06 11:33:42 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
setup(() => {
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
sandbox = sinon.sandbox.create();
|
2016-03-20 14:14:20 -04:00
|
|
|
|
stub('gr-rest-api-interface', {
|
2017-05-16 13:56:20 -07:00
|
|
|
|
getLoggedIn() { return Promise.resolve(false); },
|
2016-03-20 14:14:20 -04:00
|
|
|
|
});
|
2017-02-08 09:41:53 -08:00
|
|
|
|
sandbox = sinon.sandbox.create();
|
2015-11-18 16:31:18 -05:00
|
|
|
|
element = fixture('basic');
|
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
teardown(() => {
|
2017-02-08 09:41:53 -08:00
|
|
|
|
sandbox.restore();
|
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('comments are sorted correctly', () => {
|
|
|
|
|
const comments = [
|
2015-11-18 16:31:18 -05:00
|
|
|
|
{
|
|
|
|
|
message: 'i like you, too',
|
|
|
|
|
in_reply_to: 'sallys_confession',
|
2017-11-27 16:30:56 -08:00
|
|
|
|
__date: new Date('2015-12-25'),
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2015-11-18 16:31:18 -05:00
|
|
|
|
id: 'sallys_confession',
|
|
|
|
|
message: 'i like you, jack',
|
|
|
|
|
updated: '2015-12-24 15:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2015-11-18 16:31:18 -05:00
|
|
|
|
id: 'sally_to_dr_finklestein',
|
|
|
|
|
message: 'i’m running away',
|
|
|
|
|
updated: '2015-10-31 09:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2015-11-18 16:31:18 -05:00
|
|
|
|
id: 'sallys_defiance',
|
|
|
|
|
in_reply_to: 'sally_to_dr_finklestein',
|
|
|
|
|
message: 'i will poison you so i can get away',
|
|
|
|
|
updated: '2015-10-31 15:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2015-11-18 16:31:18 -05:00
|
|
|
|
id: 'dr_finklesteins_response',
|
|
|
|
|
in_reply_to: 'sally_to_dr_finklestein',
|
|
|
|
|
message: 'no i will pull a thread and your arm will fall off',
|
2016-12-15 10:42:43 -08:00
|
|
|
|
updated: '2015-10-31 11:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2015-11-18 16:31:18 -05:00
|
|
|
|
id: 'sallys_mission',
|
|
|
|
|
message: 'i have to find santa',
|
2016-12-15 10:42:43 -08:00
|
|
|
|
updated: '2015-12-24 15:00:20.396000000',
|
2017-05-16 13:56:20 -07:00
|
|
|
|
},
|
2015-11-18 16:31:18 -05:00
|
|
|
|
];
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const results = element._sortedComments(comments);
|
2015-11-18 16:31:18 -05:00
|
|
|
|
assert.deepEqual(results, [
|
|
|
|
|
{
|
|
|
|
|
id: 'sally_to_dr_finklestein',
|
|
|
|
|
message: 'i’m running away',
|
|
|
|
|
updated: '2015-10-31 09:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2015-11-18 16:31:18 -05:00
|
|
|
|
id: 'dr_finklesteins_response',
|
|
|
|
|
in_reply_to: 'sally_to_dr_finklestein',
|
|
|
|
|
message: 'no i will pull a thread and your arm will fall off',
|
2016-12-15 10:42:43 -08:00
|
|
|
|
updated: '2015-10-31 11:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2015-11-18 16:31:18 -05:00
|
|
|
|
id: 'sallys_defiance',
|
|
|
|
|
in_reply_to: 'sally_to_dr_finklestein',
|
|
|
|
|
message: 'i will poison you so i can get away',
|
|
|
|
|
updated: '2015-10-31 15:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2015-11-18 16:31:18 -05:00
|
|
|
|
id: 'sallys_confession',
|
|
|
|
|
message: 'i like you, jack',
|
|
|
|
|
updated: '2015-12-24 15:00:20.396000000',
|
2016-12-15 10:42:43 -08:00
|
|
|
|
}, {
|
|
|
|
|
id: 'sallys_mission',
|
|
|
|
|
message: 'i have to find santa',
|
|
|
|
|
updated: '2015-12-24 15:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2015-11-18 16:31:18 -05:00
|
|
|
|
message: 'i like you, too',
|
|
|
|
|
in_reply_to: 'sallys_confession',
|
2017-11-27 16:30:56 -08:00
|
|
|
|
__date: new Date('2015-12-25'),
|
2017-05-16 13:56:20 -07:00
|
|
|
|
},
|
2015-11-18 16:31:18 -05:00
|
|
|
|
]);
|
|
|
|
|
});
|
2017-02-08 09:41:53 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('addOrEditDraft w/ edit draft', () => {
|
2017-02-08 09:41:53 -08:00
|
|
|
|
element.comments = [{
|
|
|
|
|
id: 'jacks_reply',
|
|
|
|
|
message: 'i like you, too',
|
|
|
|
|
in_reply_to: 'sallys_confession',
|
|
|
|
|
updated: '2015-12-25 15:00:20.396000000',
|
|
|
|
|
__draft: true,
|
|
|
|
|
}];
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const commentElStub = sandbox.stub(element, '_commentElWithDraftID',
|
|
|
|
|
() => { return {}; });
|
|
|
|
|
const addDraftStub = sandbox.stub(element, 'addDraft');
|
2017-02-08 09:41:53 -08:00
|
|
|
|
|
|
|
|
|
element.addOrEditDraft(123);
|
|
|
|
|
|
|
|
|
|
assert.isTrue(commentElStub.called);
|
|
|
|
|
assert.isFalse(addDraftStub.called);
|
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('addOrEditDraft w/o edit draft', () => {
|
2017-02-08 09:41:53 -08:00
|
|
|
|
element.comments = [];
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const commentElStub = sandbox.stub(element, '_commentElWithDraftID',
|
|
|
|
|
() => { return {}; });
|
|
|
|
|
const addDraftStub = sandbox.stub(element, 'addDraft');
|
2017-02-08 09:41:53 -08:00
|
|
|
|
|
|
|
|
|
element.addOrEditDraft(123);
|
|
|
|
|
|
|
|
|
|
assert.isFalse(commentElStub.called);
|
|
|
|
|
assert.isTrue(addDraftStub.called);
|
|
|
|
|
});
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('_hideActions', () => {
|
|
|
|
|
let showActions = true;
|
|
|
|
|
const lastComment = {};
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
assert.equal(element._hideActions(showActions, lastComment), false);
|
|
|
|
|
showActions = false;
|
|
|
|
|
assert.equal(element._hideActions(showActions, lastComment), true);
|
2017-05-16 13:56:20 -07:00
|
|
|
|
showActions = true;
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
lastComment.__draft = true;
|
|
|
|
|
assert.equal(element._hideActions(showActions, lastComment), true);
|
|
|
|
|
});
|
2017-07-31 14:33:16 -07:00
|
|
|
|
|
|
|
|
|
test('setting project name loads the project config', done => {
|
|
|
|
|
const projectName = 'foo/bar/baz';
|
|
|
|
|
const getProjectStub = sandbox.stub(element.$.restAPI, 'getProjectConfig')
|
|
|
|
|
.returns(Promise.resolve({}));
|
|
|
|
|
element.projectName = projectName;
|
|
|
|
|
flush(() => {
|
|
|
|
|
assert.isTrue(getProjectStub.calledWithExactly(projectName));
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
2018-02-23 12:07:39 -08:00
|
|
|
|
|
|
|
|
|
test('optionally show file path', () => {
|
|
|
|
|
// Path info doesn't exist when showFilePath is false. Because it's in a
|
|
|
|
|
// dom-if it is not yet in the dom.
|
|
|
|
|
assert.isNotOk(element.$$('.pathInfo'));
|
|
|
|
|
|
|
|
|
|
sandbox.stub(Gerrit.Nav, 'getUrlForDiffById');
|
|
|
|
|
element.changeNum = 123;
|
|
|
|
|
element.projectName = 'test project';
|
|
|
|
|
element.path = 'path/to/file';
|
|
|
|
|
element.patchNum = 3;
|
|
|
|
|
element.lineNum = 5;
|
|
|
|
|
element.showFilePath = true;
|
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
assert.isOk(element.$$('.pathInfo'));
|
|
|
|
|
assert.notEqual(getComputedStyle(element.$$('.pathInfo')).display,
|
|
|
|
|
'none');
|
|
|
|
|
assert.isTrue(Gerrit.Nav.getUrlForDiffById.lastCall.calledWithExactly(
|
|
|
|
|
element.changeNum, element.projectName, element.path,
|
|
|
|
|
element.patchNum, null, element.lineNum));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('_computeDisplayPath', () => {
|
|
|
|
|
const path = 'path/to/file';
|
|
|
|
|
assert.equal(element._computeDisplayPath(path), 'path/to/file');
|
|
|
|
|
|
|
|
|
|
element.lineNum = 5;
|
|
|
|
|
assert.equal(element._computeDisplayPath(path), 'path/to/file#5');
|
|
|
|
|
});
|
2015-12-20 19:13:45 -05:00
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
suite('comment action tests', () => {
|
|
|
|
|
let element;
|
2018-03-08 13:45:28 -08:00
|
|
|
|
let sandbox;
|
2015-12-20 19:13:45 -05:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
setup(() => {
|
2018-03-08 13:45:28 -08:00
|
|
|
|
sandbox = sinon.sandbox.create();
|
2016-03-20 14:14:20 -04:00
|
|
|
|
stub('gr-rest-api-interface', {
|
2017-05-16 13:56:20 -07:00
|
|
|
|
getLoggedIn() { return Promise.resolve(false); },
|
|
|
|
|
saveDiffDraft() {
|
2016-07-13 21:06:03 +02:00
|
|
|
|
return Promise.resolve({
|
|
|
|
|
ok: true,
|
2017-05-16 13:56:20 -07:00
|
|
|
|
text() {
|
|
|
|
|
return Promise.resolve(')]}\'\n' +
|
|
|
|
|
JSON.stringify({
|
|
|
|
|
id: '7afa4931_de3d65bd',
|
|
|
|
|
path: '/path/to/file.txt',
|
|
|
|
|
line: 5,
|
|
|
|
|
in_reply_to: 'baf0414d_60047215',
|
|
|
|
|
updated: '2015-12-21 02:01:10.850000000',
|
|
|
|
|
message: 'Done',
|
|
|
|
|
}));
|
2016-07-13 21:06:03 +02:00
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
},
|
2017-05-16 13:56:20 -07:00
|
|
|
|
deleteDiffDraft() { return Promise.resolve({ok: true}); },
|
2016-03-20 14:14:20 -04:00
|
|
|
|
});
|
2015-12-20 19:13:45 -05:00
|
|
|
|
element = fixture('withComment');
|
|
|
|
|
element.comments = [{
|
|
|
|
|
author: {
|
|
|
|
|
name: 'Mr. Peanutbutter',
|
|
|
|
|
email: 'tenn1sballchaser@aol.com',
|
|
|
|
|
},
|
|
|
|
|
id: 'baf0414d_60047215',
|
|
|
|
|
line: 5,
|
|
|
|
|
message: 'is this a crossover episode!?',
|
|
|
|
|
updated: '2015-12-08 19:48:33.843000000',
|
2018-03-08 13:45:28 -08:00
|
|
|
|
path: '/path/to/file.txt',
|
2015-12-20 19:13:45 -05:00
|
|
|
|
}];
|
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
});
|
|
|
|
|
|
2018-03-08 13:45:28 -08:00
|
|
|
|
teardown(() => {
|
|
|
|
|
sandbox.restore();
|
|
|
|
|
});
|
|
|
|
|
|
2018-06-19 17:03:43 -07:00
|
|
|
|
test('reply', () => {
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const commentEl = element.$$('gr-diff-comment');
|
2018-06-19 17:03:43 -07:00
|
|
|
|
const reportStub = sandbox.stub(element.$.reporting,
|
|
|
|
|
'recordDraftInteraction');
|
2015-12-20 19:13:45 -05:00
|
|
|
|
assert.ok(commentEl);
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const replyBtn = element.$.replyBtn;
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
MockInteractions.tap(replyBtn);
|
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const drafts = element._orderedComments.filter(c => {
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
return c.__draft == true;
|
2015-12-20 19:13:45 -05:00
|
|
|
|
});
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
assert.equal(drafts.length, 1);
|
|
|
|
|
assert.notOk(drafts[0].message, 'message should be empty');
|
|
|
|
|
assert.equal(drafts[0].in_reply_to, 'baf0414d_60047215');
|
2018-06-19 17:03:43 -07:00
|
|
|
|
assert.isTrue(reportStub.calledOnce);
|
2015-12-20 19:13:45 -05:00
|
|
|
|
});
|
|
|
|
|
|
2018-06-19 17:03:43 -07:00
|
|
|
|
test('quote reply', () => {
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const commentEl = element.$$('gr-diff-comment');
|
2018-06-19 17:03:43 -07:00
|
|
|
|
const reportStub = sandbox.stub(element.$.reporting,
|
|
|
|
|
'recordDraftInteraction');
|
2016-01-28 18:07:26 -05:00
|
|
|
|
assert.ok(commentEl);
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const quoteBtn = element.$.quoteBtn;
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
MockInteractions.tap(quoteBtn);
|
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const drafts = element._orderedComments.filter(c => {
|
|
|
|
|
return c.__draft == true;
|
2016-01-28 18:07:26 -05:00
|
|
|
|
});
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
assert.equal(drafts.length, 1);
|
|
|
|
|
assert.equal(drafts[0].message, '> is this a crossover episode!?\n\n');
|
|
|
|
|
assert.equal(drafts[0].in_reply_to, 'baf0414d_60047215');
|
2018-06-19 17:03:43 -07:00
|
|
|
|
assert.isTrue(reportStub.calledOnce);
|
2016-12-07 13:36:49 -08:00
|
|
|
|
});
|
|
|
|
|
|
2018-06-19 17:03:43 -07:00
|
|
|
|
test('quote reply multiline', () => {
|
|
|
|
|
const reportStub = sandbox.stub(element.$.reporting,
|
|
|
|
|
'recordDraftInteraction');
|
2016-12-07 13:36:49 -08:00
|
|
|
|
element.comments = [{
|
|
|
|
|
author: {
|
|
|
|
|
name: 'Mr. Peanutbutter',
|
|
|
|
|
email: 'tenn1sballchaser@aol.com',
|
|
|
|
|
},
|
|
|
|
|
id: 'baf0414d_60047215',
|
|
|
|
|
line: 5,
|
|
|
|
|
message: 'is this a crossover episode!?\nIt might be!',
|
|
|
|
|
updated: '2015-12-08 19:48:33.843000000',
|
|
|
|
|
}];
|
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const commentEl = element.$$('gr-diff-comment');
|
2016-12-07 13:36:49 -08:00
|
|
|
|
assert.ok(commentEl);
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const quoteBtn = element.$.quoteBtn;
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
MockInteractions.tap(quoteBtn);
|
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const drafts = element._orderedComments.filter(c => {
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
return c.__draft == true;
|
2016-12-07 13:36:49 -08:00
|
|
|
|
});
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
assert.equal(drafts.length, 1);
|
|
|
|
|
assert.equal(drafts[0].message,
|
|
|
|
|
'> is this a crossover episode!?\n> It might be!\n\n');
|
|
|
|
|
assert.equal(drafts[0].in_reply_to, 'baf0414d_60047215');
|
2018-06-19 17:03:43 -07:00
|
|
|
|
assert.isTrue(reportStub.calledOnce);
|
2016-01-28 18:07:26 -05:00
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('ack', done => {
|
2018-06-19 17:03:43 -07:00
|
|
|
|
const reportStub = sandbox.stub(element.$.reporting,
|
|
|
|
|
'recordDraftInteraction');
|
2016-11-29 16:46:12 -08:00
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchNum = '1';
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const commentEl = element.$$('gr-diff-comment');
|
2016-11-29 16:46:12 -08:00
|
|
|
|
assert.ok(commentEl);
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const ackBtn = element.$.ackBtn;
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
MockInteractions.tap(ackBtn);
|
2017-05-16 13:56:20 -07:00
|
|
|
|
flush(() => {
|
|
|
|
|
const drafts = element.comments.filter(c => {
|
2016-11-29 16:46:12 -08:00
|
|
|
|
return c.__draft == true;
|
|
|
|
|
});
|
|
|
|
|
assert.equal(drafts.length, 1);
|
|
|
|
|
assert.equal(drafts[0].message, 'Ack');
|
|
|
|
|
assert.equal(drafts[0].in_reply_to, 'baf0414d_60047215');
|
2017-02-16 11:05:30 -08:00
|
|
|
|
assert.equal(drafts[0].unresolved, false);
|
2018-06-19 17:03:43 -07:00
|
|
|
|
assert.isTrue(reportStub.calledOnce);
|
2016-11-29 16:46:12 -08:00
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('done', done => {
|
2018-06-19 17:03:43 -07:00
|
|
|
|
const reportStub = sandbox.stub(element.$.reporting,
|
|
|
|
|
'recordDraftInteraction');
|
2015-12-20 19:13:45 -05:00
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchNum = '1';
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const commentEl = element.$$('gr-diff-comment');
|
2015-12-20 19:13:45 -05:00
|
|
|
|
assert.ok(commentEl);
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const doneBtn = element.$.doneBtn;
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
MockInteractions.tap(doneBtn);
|
2017-05-16 13:56:20 -07:00
|
|
|
|
flush(() => {
|
|
|
|
|
const drafts = element.comments.filter(c => {
|
2015-12-20 19:13:45 -05:00
|
|
|
|
return c.__draft == true;
|
|
|
|
|
});
|
|
|
|
|
assert.equal(drafts.length, 1);
|
|
|
|
|
assert.equal(drafts[0].message, 'Done');
|
|
|
|
|
assert.equal(drafts[0].in_reply_to, 'baf0414d_60047215');
|
2017-01-04 16:45:21 -08:00
|
|
|
|
assert.isFalse(drafts[0].unresolved);
|
2018-06-19 17:03:43 -07:00
|
|
|
|
assert.isTrue(reportStub.calledOnce);
|
2015-12-20 19:13:45 -05:00
|
|
|
|
done();
|
|
|
|
|
});
|
2016-12-07 13:36:49 -08:00
|
|
|
|
});
|
|
|
|
|
|
2018-03-08 13:45:28 -08:00
|
|
|
|
test('save', done => {
|
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchNum = '1';
|
|
|
|
|
element.path = '/path/to/file.txt';
|
|
|
|
|
const commentEl = element.$$('gr-diff-comment');
|
|
|
|
|
assert.ok(commentEl);
|
|
|
|
|
|
|
|
|
|
const saveOrDiscardStub = sandbox.stub();
|
|
|
|
|
element.addEventListener('thread-changed', saveOrDiscardStub);
|
|
|
|
|
element.$$('gr-diff-comment')._fireSave();
|
|
|
|
|
|
|
|
|
|
flush(() => {
|
|
|
|
|
assert.isTrue(saveOrDiscardStub.called);
|
|
|
|
|
assert.equal(saveOrDiscardStub.lastCall.args[0].detail.rootId,
|
|
|
|
|
'baf0414d_60047215');
|
|
|
|
|
assert.equal(element.rootId, 'baf0414d_60047215');
|
|
|
|
|
assert.equal(saveOrDiscardStub.lastCall.args[0].detail.path,
|
|
|
|
|
'/path/to/file.txt');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('please fix', done => {
|
2016-12-07 13:36:49 -08:00
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchNum = '1';
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const commentEl = element.$$('gr-diff-comment');
|
2016-12-07 13:36:49 -08:00
|
|
|
|
assert.ok(commentEl);
|
2017-05-16 13:56:20 -07:00
|
|
|
|
commentEl.addEventListener('create-fix-comment', () => {
|
|
|
|
|
const drafts = element._orderedComments.filter(c => {
|
2016-12-07 13:36:49 -08:00
|
|
|
|
return c.__draft == true;
|
|
|
|
|
});
|
|
|
|
|
assert.equal(drafts.length, 1);
|
|
|
|
|
assert.equal(
|
|
|
|
|
drafts[0].message, '> is this a crossover episode!?\n\nPlease Fix');
|
|
|
|
|
assert.equal(drafts[0].in_reply_to, 'baf0414d_60047215');
|
2017-01-04 16:45:21 -08:00
|
|
|
|
assert.isTrue(drafts[0].unresolved);
|
2016-12-07 13:36:49 -08:00
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
commentEl.fire('create-fix-comment', {comment: commentEl.comment},
|
|
|
|
|
{bubbles: false});
|
2015-12-20 19:13:45 -05:00
|
|
|
|
});
|
2015-11-18 16:31:18 -05:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('discard', done => {
|
2015-12-20 19:13:45 -05:00
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchNum = '1';
|
2018-03-08 13:45:28 -08:00
|
|
|
|
element.path = '/path/to/file.txt';
|
2016-01-07 13:11:04 -05:00
|
|
|
|
element.push('comments', element._newReply(
|
2017-05-16 13:56:20 -07:00
|
|
|
|
element.comments[0].id,
|
|
|
|
|
element.comments[0].line,
|
|
|
|
|
element.comments[0].path,
|
|
|
|
|
'it’s pronouced jiff, not giff'));
|
2015-12-20 19:13:45 -05:00
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
|
2018-03-08 13:45:28 -08:00
|
|
|
|
const saveOrDiscardStub = sandbox.stub();
|
|
|
|
|
element.addEventListener('thread-changed', saveOrDiscardStub);
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const draftEl =
|
2015-12-20 19:13:45 -05:00
|
|
|
|
Polymer.dom(element.root).querySelectorAll('gr-diff-comment')[1];
|
|
|
|
|
assert.ok(draftEl);
|
2017-05-16 13:56:20 -07:00
|
|
|
|
draftEl.addEventListener('comment-discard', () => {
|
|
|
|
|
const drafts = element.comments.filter(c => {
|
2015-12-20 19:13:45 -05:00
|
|
|
|
return c.__draft == true;
|
|
|
|
|
});
|
|
|
|
|
assert.equal(drafts.length, 0);
|
2018-03-08 13:45:28 -08:00
|
|
|
|
assert.isTrue(saveOrDiscardStub.called);
|
|
|
|
|
assert.equal(saveOrDiscardStub.lastCall.args[0].detail.rootId,
|
|
|
|
|
element.rootId);
|
|
|
|
|
assert.equal(saveOrDiscardStub.lastCall.args[0].detail.path,
|
|
|
|
|
element.path);
|
2015-12-20 19:13:45 -05:00
|
|
|
|
done();
|
|
|
|
|
});
|
2018-03-08 13:45:28 -08:00
|
|
|
|
draftEl.fire('comment-discard', {comment: draftEl.comment},
|
|
|
|
|
{bubbles: false});
|
2015-12-20 19:13:45 -05:00
|
|
|
|
});
|
2016-06-14 16:57:23 -07:00
|
|
|
|
|
2018-03-08 13:45:28 -08:00
|
|
|
|
test('discard with a single comment still fires event with previous rootId',
|
|
|
|
|
done => {
|
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchNum = '1';
|
|
|
|
|
element.path = '/path/to/file.txt';
|
|
|
|
|
element.comments = [];
|
|
|
|
|
element.addOrEditDraft('1');
|
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
const rootId = element.rootId;
|
|
|
|
|
assert.isOk(rootId);
|
|
|
|
|
|
|
|
|
|
const saveOrDiscardStub = sandbox.stub();
|
|
|
|
|
element.addEventListener('thread-changed', saveOrDiscardStub);
|
|
|
|
|
const draftEl =
|
|
|
|
|
Polymer.dom(element.root).querySelectorAll('gr-diff-comment')[0];
|
|
|
|
|
assert.ok(draftEl);
|
|
|
|
|
draftEl.addEventListener('comment-discard', () => {
|
|
|
|
|
assert.equal(element.comments.length, 0);
|
|
|
|
|
assert.isTrue(saveOrDiscardStub.called);
|
|
|
|
|
assert.equal(saveOrDiscardStub.lastCall.args[0].detail.rootId,
|
|
|
|
|
rootId);
|
|
|
|
|
assert.equal(saveOrDiscardStub.lastCall.args[0].detail.path,
|
|
|
|
|
element.path);
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
draftEl.fire('comment-discard', {comment: draftEl.comment},
|
|
|
|
|
{bubbles: false});
|
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('first editing comment does not add __otherEditing attribute', () => {
|
2016-12-22 15:04:11 -08:00
|
|
|
|
element.comments = [{
|
|
|
|
|
author: {
|
|
|
|
|
name: 'Mr. Peanutbutter',
|
|
|
|
|
email: 'tenn1sballchaser@aol.com',
|
|
|
|
|
},
|
|
|
|
|
id: 'baf0414d_60047215',
|
|
|
|
|
line: 5,
|
|
|
|
|
message: 'is this a crossover episode!?',
|
|
|
|
|
updated: '2015-12-08 19:48:33.843000000',
|
|
|
|
|
__draft: true,
|
|
|
|
|
}];
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const replyBtn = element.$.replyBtn;
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
MockInteractions.tap(replyBtn);
|
2016-12-22 15:04:11 -08:00
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const editing = element._orderedComments.filter(c => {
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
return c.__editing == true;
|
2016-12-22 15:04:11 -08:00
|
|
|
|
});
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
assert.equal(editing.length, 1);
|
|
|
|
|
assert.equal(!!editing[0].__otherEditing, false);
|
2016-12-22 15:04:11 -08:00
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('When not editing other comments, local storage not set' +
|
|
|
|
|
' after discard', done => {
|
2016-12-22 15:04:11 -08:00
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchNum = '1';
|
|
|
|
|
element.comments = [{
|
|
|
|
|
author: {
|
|
|
|
|
name: 'Mr. Peanutbutter',
|
|
|
|
|
email: 'tenn1sballchaser@aol.com',
|
|
|
|
|
},
|
|
|
|
|
id: 'baf0414d_60047215',
|
|
|
|
|
line: 5,
|
|
|
|
|
message: 'is this a crossover episode!?',
|
|
|
|
|
updated: '2015-12-08 19:48:31.843000000',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
author: {
|
|
|
|
|
name: 'Mr. Peanutbutter',
|
|
|
|
|
email: 'tenn1sballchaser@aol.com',
|
|
|
|
|
},
|
|
|
|
|
__draftID: '1',
|
|
|
|
|
in_reply_to: 'baf0414d_60047215',
|
|
|
|
|
line: 5,
|
|
|
|
|
message: 'yes',
|
|
|
|
|
updated: '2015-12-08 19:48:32.843000000',
|
|
|
|
|
__draft: true,
|
|
|
|
|
__editing: true,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
author: {
|
|
|
|
|
name: 'Mr. Peanutbutter',
|
|
|
|
|
email: 'tenn1sballchaser@aol.com',
|
|
|
|
|
},
|
|
|
|
|
__draftID: '2',
|
|
|
|
|
in_reply_to: 'baf0414d_60047215',
|
|
|
|
|
line: 5,
|
|
|
|
|
message: 'no',
|
|
|
|
|
updated: '2015-12-08 19:48:33.843000000',
|
|
|
|
|
__draft: true,
|
|
|
|
|
}];
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const storageStub = sinon.stub(element.$.storage, 'setDraftComment');
|
2016-12-22 15:04:11 -08:00
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const draftEl =
|
|
|
|
|
Polymer.dom(element.root).querySelectorAll('gr-diff-comment')[1];
|
2016-12-22 15:04:11 -08:00
|
|
|
|
assert.ok(draftEl);
|
2017-05-16 13:56:20 -07:00
|
|
|
|
draftEl.addEventListener('comment-discard', () => {
|
2016-12-22 15:04:11 -08:00
|
|
|
|
assert.isFalse(storageStub.called);
|
|
|
|
|
storageStub.restore();
|
|
|
|
|
done();
|
|
|
|
|
});
|
2018-03-08 13:45:28 -08:00
|
|
|
|
draftEl.fire('comment-discard', {comment: draftEl.comment},
|
|
|
|
|
{bubbles: false});
|
2016-12-22 15:04:11 -08:00
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('comment-update', () => {
|
|
|
|
|
const commentEl = element.$$('gr-diff-comment');
|
|
|
|
|
const updatedComment = {
|
2016-06-14 16:57:23 -07:00
|
|
|
|
id: element.comments[0].id,
|
|
|
|
|
foo: 'bar',
|
|
|
|
|
};
|
|
|
|
|
commentEl.fire('comment-update', {comment: updatedComment});
|
|
|
|
|
assert.strictEqual(element.comments[0], updatedComment);
|
|
|
|
|
});
|
2016-06-15 16:05:14 -07:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
suite('jack and sally comment data test consolidation', () => {
|
|
|
|
|
setup(() => {
|
2017-01-04 16:45:21 -08:00
|
|
|
|
element.comments = [
|
2017-05-16 13:56:20 -07:00
|
|
|
|
{
|
|
|
|
|
id: 'jacks_reply',
|
|
|
|
|
message: 'i like you, too',
|
|
|
|
|
in_reply_to: 'sallys_confession',
|
|
|
|
|
updated: '2015-12-25 15:00:20.396000000',
|
|
|
|
|
unresolved: false,
|
|
|
|
|
}, {
|
|
|
|
|
id: 'sallys_confession',
|
|
|
|
|
in_reply_to: 'nonexistent_comment',
|
|
|
|
|
message: 'i like you, jack',
|
|
|
|
|
updated: '2015-12-24 15:00:20.396000000',
|
|
|
|
|
}, {
|
|
|
|
|
id: 'sally_to_dr_finklestein',
|
|
|
|
|
in_reply_to: 'nonexistent_comment',
|
|
|
|
|
message: 'i’m running away',
|
|
|
|
|
updated: '2015-10-31 09:00:20.396000000',
|
|
|
|
|
}, {
|
|
|
|
|
id: 'sallys_defiance',
|
|
|
|
|
message: 'i will poison you so i can get away',
|
|
|
|
|
updated: '2015-10-31 15:00:20.396000000',
|
|
|
|
|
}];
|
2017-01-04 16:45:21 -08:00
|
|
|
|
});
|
2016-10-10 17:31:56 -07:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('orphan replies', () => {
|
2017-01-04 16:45:21 -08:00
|
|
|
|
assert.equal(4, element._orderedComments.length);
|
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('keyboard shortcuts', () => {
|
|
|
|
|
const expandCollapseStub =
|
|
|
|
|
sinon.stub(element, '_expandCollapseComments');
|
2017-01-04 16:45:21 -08:00
|
|
|
|
MockInteractions.pressAndReleaseKeyOn(element, 69, null, 'e');
|
|
|
|
|
assert.isTrue(expandCollapseStub.lastCall.calledWith(false));
|
|
|
|
|
|
|
|
|
|
MockInteractions.pressAndReleaseKeyOn(element, 69, 'shift', 'e');
|
|
|
|
|
assert.isTrue(expandCollapseStub.lastCall.calledWith(true));
|
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('comment in_reply_to is either null or most recent comment', () => {
|
2017-01-04 16:45:21 -08:00
|
|
|
|
element._createReplyComment(element.comments[3], 'dummy', true);
|
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
assert.equal(element._orderedComments.length, 5);
|
|
|
|
|
assert.equal(element._orderedComments[4].in_reply_to, 'jacks_reply');
|
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('resolvable comments', () => {
|
2018-02-05 17:16:30 -08:00
|
|
|
|
assert.isFalse(element.unresolved);
|
2017-01-04 16:45:21 -08:00
|
|
|
|
element._createReplyComment(element.comments[3], 'dummy', true, true);
|
|
|
|
|
flushAsynchronousOperations();
|
2018-02-05 17:16:30 -08:00
|
|
|
|
assert.isTrue(element.unresolved);
|
2017-01-04 16:45:21 -08:00
|
|
|
|
});
|
2017-01-06 11:33:42 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('_setInitialExpandedState', () => {
|
2018-02-05 17:16:30 -08:00
|
|
|
|
element.unresolved = true;
|
2017-01-06 11:33:42 -08:00
|
|
|
|
element._setInitialExpandedState();
|
2017-05-16 13:56:20 -07:00
|
|
|
|
for (let i = 0; i < element.comments.length; i++) {
|
2017-01-06 11:33:42 -08:00
|
|
|
|
assert.isFalse(element.comments[i].collapsed);
|
|
|
|
|
}
|
2018-02-05 17:16:30 -08:00
|
|
|
|
element.unresolved = false;
|
2017-01-06 11:33:42 -08:00
|
|
|
|
element._setInitialExpandedState();
|
2017-05-16 13:56:20 -07:00
|
|
|
|
for (let i = 0; i < element.comments.length; i++) {
|
2017-01-06 11:33:42 -08:00
|
|
|
|
assert.isTrue(element.comments[i].collapsed);
|
|
|
|
|
}
|
2017-12-08 11:01:26 -08:00
|
|
|
|
for (let i = 0; i < element.comments.length; i++) {
|
|
|
|
|
element.comments[i].robot_id = 123;
|
|
|
|
|
}
|
|
|
|
|
element._setInitialExpandedState();
|
|
|
|
|
for (let i = 0; i < element.comments.length; i++) {
|
|
|
|
|
assert.isFalse(element.comments[i].collapsed);
|
|
|
|
|
}
|
2017-01-06 11:33:42 -08:00
|
|
|
|
});
|
2016-10-10 17:31:56 -07:00
|
|
|
|
});
|
2016-12-27 17:48:38 -05:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('_computeHostClass', () => {
|
2017-01-04 16:45:21 -08:00
|
|
|
|
assert.equal(element._computeHostClass(true), 'unresolved');
|
|
|
|
|
assert.equal(element._computeHostClass(false), '');
|
2016-12-27 17:48:38 -05:00
|
|
|
|
});
|
2017-01-30 12:03:13 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('addDraft sets unresolved state correctly', () => {
|
|
|
|
|
let unresolved = true;
|
2017-02-09 08:00:24 -08:00
|
|
|
|
element.comments = [];
|
|
|
|
|
element.addDraft(null, null, unresolved);
|
|
|
|
|
assert.equal(element.comments[0].unresolved, true);
|
|
|
|
|
|
|
|
|
|
unresolved = false; // comment should get added as actually resolved.
|
|
|
|
|
element.comments = [];
|
|
|
|
|
element.addDraft(null, null, unresolved);
|
|
|
|
|
assert.equal(element.comments[0].unresolved, false);
|
|
|
|
|
|
|
|
|
|
element.comments = [];
|
|
|
|
|
element.addDraft();
|
|
|
|
|
assert.equal(element.comments[0].unresolved, true);
|
|
|
|
|
});
|
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('_newDraft', () => {
|
2017-01-30 12:03:13 -08:00
|
|
|
|
element.commentSide = 'left';
|
2017-02-09 07:34:23 -08:00
|
|
|
|
element.patchNum = 3;
|
2017-05-16 13:56:20 -07:00
|
|
|
|
const draft = element._newDraft();
|
2017-01-30 12:03:13 -08:00
|
|
|
|
assert.equal(draft.__commentSide, 'left');
|
2017-02-09 07:34:23 -08:00
|
|
|
|
assert.equal(draft.patchNum, 3);
|
2017-01-30 12:03:13 -08:00
|
|
|
|
});
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('new comment gets created', () => {
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
element.comments = [];
|
|
|
|
|
element.addOrEditDraft(1);
|
|
|
|
|
assert.equal(element.comments.length, 1);
|
|
|
|
|
// Mock a submitted comment.
|
|
|
|
|
element.comments[0].id = element.comments[0].__draftID;
|
2017-02-09 07:34:23 -08:00
|
|
|
|
element.comments[0].__draft = false;
|
Move reply buttons to comment thread
Move all buttons that generate a reply of some sort (done, ack, reply,
quote) to the comment thread instead of the comment [1].
When there is a draft for a particular comment thread, all reply buttons
are hidden [2]. For example, if you click reply, you cannot click done
on the same thread, unless you remove the draft.
Each thread can have up to 1 draft. It's also worth noting that if a
thread has a draft, and the user clicks on the line or 'c' at the same
range, the existing draft will switch to 'editing' form.
[1] With the exception of "please fix" for robot comments.
[2] In this case, The please fix button will be disabled when other
reply buttons are hidden.
Feature: Issue 5410
Change-Id: Id847ee0cba0d0ce4e5b6476f58141866d41ffdad
2017-02-09 16:07:32 -08:00
|
|
|
|
element.addOrEditDraft(1);
|
|
|
|
|
assert.equal(element.comments.length, 2);
|
|
|
|
|
});
|
2017-02-03 10:50:28 -08:00
|
|
|
|
|
2017-05-16 13:56:20 -07:00
|
|
|
|
test('unresolved label', () => {
|
2018-02-05 17:16:30 -08:00
|
|
|
|
element.unresolved = false;
|
2017-02-03 10:50:28 -08:00
|
|
|
|
assert.isTrue(element.$.unresolvedLabel.hasAttribute('hidden'));
|
2018-02-05 17:16:30 -08:00
|
|
|
|
element.unresolved = true;
|
2017-02-03 10:50:28 -08:00
|
|
|
|
assert.isFalse(element.$.unresolvedLabel.hasAttribute('hidden'));
|
|
|
|
|
});
|
2018-02-05 17:16:30 -08:00
|
|
|
|
|
|
|
|
|
test('draft comments are at the end of orderedComments', () => {
|
|
|
|
|
element.comments = [{
|
|
|
|
|
author: {
|
|
|
|
|
name: 'Mr. Peanutbutter',
|
|
|
|
|
email: 'tenn1sballchaser@aol.com',
|
|
|
|
|
},
|
|
|
|
|
id: 2,
|
|
|
|
|
line: 5,
|
|
|
|
|
message: 'Earlier draft',
|
|
|
|
|
updated: '2015-12-08 19:48:33.843000000',
|
|
|
|
|
__draft: true,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
author: {
|
|
|
|
|
name: 'Mr. Peanutbutter2',
|
|
|
|
|
email: 'tenn1sballchaser@aol.com',
|
|
|
|
|
},
|
|
|
|
|
id: 1,
|
|
|
|
|
line: 5,
|
|
|
|
|
message: 'This comment was left last but is not a draft',
|
|
|
|
|
updated: '2015-12-10 19:48:33.843000000',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
author: {
|
|
|
|
|
name: 'Mr. Peanutbutter2',
|
|
|
|
|
email: 'tenn1sballchaser@aol.com',
|
|
|
|
|
},
|
|
|
|
|
id: 3,
|
|
|
|
|
line: 5,
|
|
|
|
|
message: 'Later draft',
|
|
|
|
|
updated: '2015-12-09 19:48:33.843000000',
|
|
|
|
|
__draft: true,
|
|
|
|
|
}];
|
|
|
|
|
assert.equal(element._orderedComments[0].id, '1');
|
|
|
|
|
assert.equal(element._orderedComments[1].id, '2');
|
|
|
|
|
assert.equal(element._orderedComments[2].id, '3');
|
|
|
|
|
});
|
2015-11-18 16:31:18 -05:00
|
|
|
|
});
|
|
|
|
|
</script>
|