2015-11-18 16:31:18 -05:00
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<!--
|
|
|
|
|
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>
|
|
|
|
|
<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="../../../bower_components/iron-test-helpers/iron-test-helpers.html">
|
|
|
|
|
<link rel="import" href="gr-diff-comment-thread.html">
|
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>
|
|
|
|
|
suite('gr-diff-comment-thread tests', function() {
|
|
|
|
|
var element;
|
|
|
|
|
setup(function() {
|
2016-03-20 14:14:20 -04:00
|
|
|
|
stub('gr-rest-api-interface', {
|
|
|
|
|
getLoggedIn: function() { return Promise.resolve(false); },
|
|
|
|
|
});
|
2015-11-18 16:31:18 -05:00
|
|
|
|
element = fixture('basic');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('comments are sorted correctly', function() {
|
|
|
|
|
var comments = [
|
|
|
|
|
{
|
|
|
|
|
id: 'jacks_reply',
|
|
|
|
|
message: 'i like you, too',
|
|
|
|
|
in_reply_to: 'sallys_confession',
|
|
|
|
|
updated: '2015-12-25 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-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',
|
|
|
|
|
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',
|
|
|
|
|
updated: '2015-12-24 21:00:20.396000000'
|
|
|
|
|
}
|
|
|
|
|
];
|
|
|
|
|
var results = element._sortedComments(comments);
|
|
|
|
|
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',
|
|
|
|
|
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-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2015-11-18 16:31:18 -05:00
|
|
|
|
id: 'jacks_reply',
|
|
|
|
|
message: 'i like you, too',
|
|
|
|
|
in_reply_to: 'sallys_confession',
|
|
|
|
|
updated: '2015-12-25 15: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',
|
|
|
|
|
updated: '2015-12-24 21:00:20.396000000'
|
|
|
|
|
}
|
|
|
|
|
]);
|
|
|
|
|
});
|
2015-12-20 19:13:45 -05:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
suite('comment action tests', function() {
|
|
|
|
|
var element;
|
|
|
|
|
|
|
|
|
|
setup(function() {
|
2016-03-20 14:14:20 -04:00
|
|
|
|
stub('gr-rest-api-interface', {
|
|
|
|
|
getLoggedIn: function() { return Promise.resolve(false); },
|
2016-07-13 21:06:03 +02:00
|
|
|
|
saveDiffDraft: function() {
|
|
|
|
|
return Promise.resolve({
|
|
|
|
|
ok: true,
|
|
|
|
|
text: function() { 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-05-03 15:14:57 -04:00
|
|
|
|
deleteDiffDraft: function() { 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',
|
|
|
|
|
}];
|
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('reply', function(done) {
|
|
|
|
|
var commentEl = element.$$('gr-diff-comment');
|
|
|
|
|
assert.ok(commentEl);
|
|
|
|
|
commentEl.addEventListener('reply', function() {
|
2016-01-07 13:11:04 -05:00
|
|
|
|
var drafts = element._orderedComments.filter(function(c) {
|
2015-12-20 19:13:45 -05:00
|
|
|
|
return c.__draft == true;
|
|
|
|
|
});
|
|
|
|
|
assert.equal(drafts.length, 1);
|
|
|
|
|
assert.notOk(drafts[0].message, 'message should be empty');
|
|
|
|
|
assert.equal(drafts[0].in_reply_to, 'baf0414d_60047215');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
commentEl.fire('reply', {comment: commentEl.comment}, {bubbles: false});
|
|
|
|
|
});
|
|
|
|
|
|
2016-01-28 18:07:26 -05:00
|
|
|
|
test('quote reply', function(done) {
|
|
|
|
|
var commentEl = element.$$('gr-diff-comment');
|
|
|
|
|
assert.ok(commentEl);
|
|
|
|
|
commentEl.addEventListener('reply', function() {
|
|
|
|
|
var drafts = element._orderedComments.filter(function(c) {
|
|
|
|
|
return c.__draft == true;
|
|
|
|
|
});
|
|
|
|
|
assert.equal(drafts.length, 1);
|
2016-11-10 10:10:14 -08:00
|
|
|
|
assert.equal(drafts[0].message, '> is this a crossover episode!?\n\n');
|
2016-01-28 18:07:26 -05:00
|
|
|
|
assert.equal(drafts[0].in_reply_to, 'baf0414d_60047215');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
commentEl.fire('reply', {comment: commentEl.comment, quote: true},
|
|
|
|
|
{bubbles: false});
|
|
|
|
|
});
|
|
|
|
|
|
2016-11-29 16:46:12 -08:00
|
|
|
|
test('ack', function(done) {
|
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchNum = '1';
|
|
|
|
|
var commentEl = element.$$('gr-diff-comment');
|
|
|
|
|
assert.ok(commentEl);
|
|
|
|
|
commentEl.addEventListener('ack', function() {
|
|
|
|
|
var drafts = element._orderedComments.filter(function(c) {
|
|
|
|
|
return c.__draft == true;
|
|
|
|
|
});
|
|
|
|
|
assert.equal(drafts.length, 1);
|
|
|
|
|
assert.equal(drafts[0].message, 'Ack');
|
|
|
|
|
assert.equal(drafts[0].in_reply_to, 'baf0414d_60047215');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
commentEl.fire('ack', {comment: commentEl.comment}, {bubbles: false});
|
|
|
|
|
});
|
|
|
|
|
|
2015-12-20 19:13:45 -05:00
|
|
|
|
test('done', function(done) {
|
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchNum = '1';
|
|
|
|
|
var commentEl = element.$$('gr-diff-comment');
|
|
|
|
|
assert.ok(commentEl);
|
|
|
|
|
commentEl.addEventListener('done', function() {
|
2016-01-07 13:11:04 -05:00
|
|
|
|
var drafts = element._orderedComments.filter(function(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');
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
commentEl.fire('done', {comment: commentEl.comment}, {bubbles: false});
|
|
|
|
|
});
|
2015-11-18 16:31:18 -05:00
|
|
|
|
|
2015-12-20 19:13:45 -05:00
|
|
|
|
test('discard', function(done) {
|
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchNum = '1';
|
2016-01-07 13:11:04 -05:00
|
|
|
|
element.push('comments', element._newReply(
|
2015-12-20 19:13:45 -05:00
|
|
|
|
element.comments[0].id,
|
|
|
|
|
element.comments[0].line,
|
|
|
|
|
element.comments[0].path,
|
|
|
|
|
'it’s pronouced jiff, not giff'));
|
|
|
|
|
flushAsynchronousOperations();
|
|
|
|
|
|
|
|
|
|
var draftEl =
|
|
|
|
|
Polymer.dom(element.root).querySelectorAll('gr-diff-comment')[1];
|
|
|
|
|
assert.ok(draftEl);
|
2016-03-25 11:29:36 -04:00
|
|
|
|
draftEl.addEventListener('comment-discard', function() {
|
2015-12-20 19:13:45 -05:00
|
|
|
|
var drafts = element.comments.filter(function(c) {
|
|
|
|
|
return c.__draft == true;
|
|
|
|
|
});
|
|
|
|
|
assert.equal(drafts.length, 0);
|
|
|
|
|
done();
|
|
|
|
|
});
|
2016-03-25 11:29:36 -04:00
|
|
|
|
draftEl.fire('comment-discard', null, {bubbles: false});
|
2015-12-20 19:13:45 -05:00
|
|
|
|
});
|
2016-06-14 16:57:23 -07:00
|
|
|
|
|
|
|
|
|
test('comment-update', function() {
|
|
|
|
|
var commentEl = element.$$('gr-diff-comment');
|
|
|
|
|
var updatedComment = {
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
test('orphan replies', function() {
|
|
|
|
|
var comments = [
|
|
|
|
|
{
|
|
|
|
|
id: 'jacks_reply',
|
|
|
|
|
message: 'i like you, too',
|
|
|
|
|
in_reply_to: 'sallys_confession',
|
|
|
|
|
updated: '2015-12-25 15:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2016-06-15 16:05:14 -07:00
|
|
|
|
id: 'sallys_confession',
|
|
|
|
|
in_reply_to: 'nonexistent_comment',
|
|
|
|
|
message: 'i like you, jack',
|
|
|
|
|
updated: '2015-12-24 15:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2016-06-15 16:05:14 -07:00
|
|
|
|
id: 'sally_to_dr_finklestein',
|
|
|
|
|
in_reply_to: 'nonexistent_comment',
|
|
|
|
|
message: 'i’m running away',
|
|
|
|
|
updated: '2015-10-31 09:00:20.396000000',
|
2016-10-10 17:31:56 -07:00
|
|
|
|
}, {
|
2016-06-15 16:05:14 -07:00
|
|
|
|
id: 'sallys_defiance',
|
|
|
|
|
message: 'i will poison you so i can get away',
|
|
|
|
|
updated: '2015-10-31 15:00:20.396000000',
|
|
|
|
|
}];
|
|
|
|
|
element.comments = comments;
|
|
|
|
|
assert.equal(4, element._orderedComments.length);
|
|
|
|
|
});
|
2016-10-10 17:31:56 -07:00
|
|
|
|
|
|
|
|
|
test('keyboard shortcuts', function() {
|
|
|
|
|
var comments = [
|
|
|
|
|
{
|
|
|
|
|
id: 'jacks_reply',
|
|
|
|
|
message: 'i like you, too',
|
|
|
|
|
in_reply_to: 'sallys_confession',
|
|
|
|
|
updated: '2015-12-25 15:00:20.396000000',
|
|
|
|
|
}, {
|
|
|
|
|
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',
|
|
|
|
|
}];
|
|
|
|
|
element.comments = comments;
|
|
|
|
|
var expandCollapseStub = sinon.stub(element, '_expandCollapseComments');
|
2016-11-15 17:01:15 -08:00
|
|
|
|
MockInteractions.pressAndReleaseKeyOn(element, 69, null, 'e');
|
2016-10-10 17:31:56 -07:00
|
|
|
|
assert.isTrue(expandCollapseStub.lastCall.calledWith(false));
|
|
|
|
|
|
2016-11-15 17:01:15 -08:00
|
|
|
|
MockInteractions.pressAndReleaseKeyOn(element, 69, 'shift', 'e');
|
2016-10-10 17:31:56 -07:00
|
|
|
|
assert.isTrue(expandCollapseStub.lastCall.calledWith(true));
|
|
|
|
|
expandCollapseStub.restore();
|
|
|
|
|
});
|
2015-11-18 16:31:18 -05:00
|
|
|
|
});
|
|
|
|
|
</script>
|