2015-12-11 12:02:57 -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</title>
|
|
|
|
|
|
2016-03-04 17:48:22 -05:00
|
|
|
|
<script src="../../../bower_components/webcomponentsjs/webcomponents.min.js"></script>
|
|
|
|
|
<script src="../../../bower_components/web-component-tester/browser.js"></script>
|
2016-05-23 17:18:43 -07:00
|
|
|
|
<script src="../../../scripts/util.js"></script>
|
2015-12-11 12:02:57 -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.html">
|
2015-12-11 12:02:57 -05:00
|
|
|
|
|
|
|
|
|
<test-fixture id="basic">
|
|
|
|
|
<template>
|
2016-01-11 20:43:02 -05:00
|
|
|
|
<gr-diff></gr-diff>
|
2015-12-11 12:02:57 -05:00
|
|
|
|
</template>
|
|
|
|
|
</test-fixture>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
suite('gr-diff tests', function() {
|
|
|
|
|
var element;
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var sandbox;
|
|
|
|
|
|
|
|
|
|
setup(function() {
|
|
|
|
|
sandbox = sinon.sandbox.create();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
teardown(function() {
|
|
|
|
|
sandbox.restore();
|
|
|
|
|
});
|
2015-12-11 12:02:57 -05:00
|
|
|
|
|
2016-05-23 15:24:05 -07:00
|
|
|
|
suite('not logged in', function() {
|
|
|
|
|
setup(function() {
|
|
|
|
|
stub('gr-rest-api-interface', {
|
|
|
|
|
getLoggedIn: function() { return Promise.resolve(false); },
|
|
|
|
|
});
|
|
|
|
|
element = fixture('basic');
|
2016-03-25 16:48:13 -04:00
|
|
|
|
});
|
2015-12-11 12:02:57 -05:00
|
|
|
|
|
2016-08-10 11:53:12 -07:00
|
|
|
|
test('toggleLeftDiff', function() {
|
|
|
|
|
element.toggleLeftDiff();
|
|
|
|
|
assert.isTrue(element.classList.contains('no-left'));
|
|
|
|
|
element.toggleLeftDiff();
|
|
|
|
|
assert.isFalse(element.classList.contains('no-left'));
|
|
|
|
|
});
|
|
|
|
|
|
2016-11-07 13:19:47 -08:00
|
|
|
|
test('view does not start with displayLine classList', function() {
|
2016-11-02 16:25:53 -07:00
|
|
|
|
assert.isFalse(
|
|
|
|
|
element.$$('.diffContainer').classList.contains('displayLine'));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('displayLine class added called when displayLine is true',
|
|
|
|
|
function() {
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var spy = sandbox.spy(element, '_computeContainerClass');
|
2016-11-02 16:25:53 -07:00
|
|
|
|
element.displayLine = true;
|
|
|
|
|
assert.isTrue(spy.called);
|
|
|
|
|
assert.isTrue(
|
|
|
|
|
element.$$('.diffContainer').classList.contains('displayLine'));
|
|
|
|
|
});
|
|
|
|
|
|
2016-05-23 15:24:05 -07:00
|
|
|
|
test('get drafts', function(done) {
|
|
|
|
|
element.patchRange = {basePatchNum: 0, patchNum: 0};
|
|
|
|
|
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var getDraftsStub = sandbox.stub(element.$.restAPI, 'getDiffDrafts');
|
2016-05-23 15:24:05 -07:00
|
|
|
|
element._getDiffDrafts().then(function(result) {
|
|
|
|
|
assert.deepEqual(result, {baseComments: [], comments: []});
|
|
|
|
|
sinon.assert.notCalled(getDraftsStub);
|
|
|
|
|
done();
|
|
|
|
|
});
|
2016-03-06 14:57:02 +01:00
|
|
|
|
});
|
2015-12-20 19:13:45 -05:00
|
|
|
|
|
2016-12-07 13:36:49 -08:00
|
|
|
|
test('get robot comments', function(done) {
|
|
|
|
|
element.patchRange = {basePatchNum: 0, patchNum: 0};
|
|
|
|
|
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var getDraftsStub = sandbox.stub(element.$.restAPI,
|
2016-12-07 13:36:49 -08:00
|
|
|
|
'getDiffRobotComments');
|
|
|
|
|
element._getDiffDrafts().then(function(result) {
|
|
|
|
|
assert.deepEqual(result, {baseComments: [], comments: []});
|
|
|
|
|
sinon.assert.notCalled(getDraftsStub);
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2016-08-03 13:16:36 -07:00
|
|
|
|
test('loads files weblinks', function(done) {
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var diffStub = sandbox.stub(element.$.restAPI, 'getDiff').returns(
|
2016-08-03 13:16:36 -07:00
|
|
|
|
Promise.resolve({
|
|
|
|
|
meta_a: {
|
|
|
|
|
web_links: 'foo',
|
|
|
|
|
},
|
|
|
|
|
meta_b: {
|
|
|
|
|
web_links: 'bar',
|
|
|
|
|
},
|
|
|
|
|
}));
|
|
|
|
|
element.patchRange = {};
|
|
|
|
|
element._getDiff().then(function() {
|
|
|
|
|
assert.deepEqual(element.filesWeblinks, {
|
|
|
|
|
meta_a: 'foo',
|
|
|
|
|
meta_b: 'bar',
|
|
|
|
|
});
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2016-05-23 15:24:05 -07:00
|
|
|
|
test('remove comment', function() {
|
|
|
|
|
element._comments = {
|
2016-03-25 16:48:13 -04:00
|
|
|
|
meta: {
|
|
|
|
|
changeNum: '42',
|
|
|
|
|
patchRange: {
|
|
|
|
|
basePatchNum: 'PARENT',
|
|
|
|
|
patchNum: 3,
|
|
|
|
|
},
|
|
|
|
|
path: '/path/to/foo',
|
|
|
|
|
projectConfig: {foo: 'bar'},
|
|
|
|
|
},
|
|
|
|
|
left: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'bc1', side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bc2', side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd1', __draft: true, side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd2', __draft: true, side: 'PARENT', __commentSide: 'left'},
|
2016-03-25 16:48:13 -04:00
|
|
|
|
],
|
|
|
|
|
right: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'c1', __commentSide: 'right'},
|
|
|
|
|
{id: 'c2', __commentSide: 'right'},
|
|
|
|
|
{id: 'd1', __draft: true, __commentSide: 'right'},
|
|
|
|
|
{id: 'd2', __draft: true, __commentSide: 'right'},
|
2016-03-25 16:48:13 -04:00
|
|
|
|
],
|
2016-05-23 15:24:05 -07:00
|
|
|
|
};
|
2016-01-06 10:43:30 -05:00
|
|
|
|
|
2016-05-23 15:24:05 -07:00
|
|
|
|
element._removeComment({});
|
|
|
|
|
// Using JSON.stringify because Safari 9.1 (11601.5.17.1) doesn’t seem
|
|
|
|
|
// to believe that one object deepEquals another even when they do :-/.
|
|
|
|
|
assert.equal(JSON.stringify(element._comments), JSON.stringify({
|
|
|
|
|
meta: {
|
|
|
|
|
changeNum: '42',
|
|
|
|
|
patchRange: {
|
|
|
|
|
basePatchNum: 'PARENT',
|
|
|
|
|
patchNum: 3,
|
|
|
|
|
},
|
|
|
|
|
path: '/path/to/foo',
|
|
|
|
|
projectConfig: {foo: 'bar'},
|
|
|
|
|
},
|
|
|
|
|
left: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'bc1', side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bc2', side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd1', __draft: true, side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd2', __draft: true, side: 'PARENT', __commentSide: 'left'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
right: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'c1', __commentSide: 'right'},
|
|
|
|
|
{id: 'c2', __commentSide: 'right'},
|
|
|
|
|
{id: 'd1', __draft: true, __commentSide: 'right'},
|
|
|
|
|
{id: 'd2', __draft: true, __commentSide: 'right'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
}));
|
2016-01-19 16:55:47 -05:00
|
|
|
|
|
2017-01-30 12:03:13 -08:00
|
|
|
|
element._removeComment({id: 'bc2', side: 'PARENT',
|
|
|
|
|
__commentSide: 'left'});
|
|
|
|
|
assert.deepEqual(element._comments, {
|
2016-05-23 15:24:05 -07:00
|
|
|
|
meta: {
|
|
|
|
|
changeNum: '42',
|
|
|
|
|
patchRange: {
|
|
|
|
|
basePatchNum: 'PARENT',
|
|
|
|
|
patchNum: 3,
|
|
|
|
|
},
|
|
|
|
|
path: '/path/to/foo',
|
|
|
|
|
projectConfig: {foo: 'bar'},
|
2016-03-25 16:48:13 -04:00
|
|
|
|
},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
left: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'bc1', side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd1', __draft: true, side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd2', __draft: true, side: 'PARENT', __commentSide: 'left'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
right: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'c1', __commentSide: 'right'},
|
|
|
|
|
{id: 'c2', __commentSide: 'right'},
|
|
|
|
|
{id: 'd1', __draft: true, __commentSide: 'right'},
|
|
|
|
|
{id: 'd2', __draft: true, __commentSide: 'right'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
2017-01-30 12:03:13 -08:00
|
|
|
|
});
|
2016-05-23 15:24:05 -07:00
|
|
|
|
|
2017-01-30 12:03:13 -08:00
|
|
|
|
element._removeComment({id: 'd2', __commentSide: 'right'});
|
|
|
|
|
assert.deepEqual(element._comments, {
|
2016-05-23 15:24:05 -07:00
|
|
|
|
meta: {
|
|
|
|
|
changeNum: '42',
|
|
|
|
|
patchRange: {
|
|
|
|
|
basePatchNum: 'PARENT',
|
|
|
|
|
patchNum: 3,
|
|
|
|
|
},
|
|
|
|
|
path: '/path/to/foo',
|
|
|
|
|
projectConfig: {foo: 'bar'},
|
2016-03-25 16:48:13 -04:00
|
|
|
|
},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
left: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'bc1', side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd1', __draft: true, side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd2', __draft: true, side: 'PARENT', __commentSide: 'left'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
right: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'c1', __commentSide: 'right'},
|
|
|
|
|
{id: 'c2', __commentSide: 'right'},
|
|
|
|
|
{id: 'd1', __draft: true, __commentSide: 'right'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
2017-01-30 12:03:13 -08:00
|
|
|
|
});
|
2016-05-23 15:24:05 -07:00
|
|
|
|
});
|
|
|
|
|
|
2017-01-27 15:33:08 -08:00
|
|
|
|
test('thread groups', function() {
|
|
|
|
|
var contentEl = document.createElement('div');
|
2017-01-30 12:03:13 -08:00
|
|
|
|
var rangeToCheck = 'line-left';
|
|
|
|
|
var commentSide = 'left';
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var patchNum = 1;
|
|
|
|
|
var side = 'PARENT';
|
|
|
|
|
var range = {
|
|
|
|
|
startLine: 1,
|
|
|
|
|
startChar: 1,
|
|
|
|
|
endLine: 1,
|
|
|
|
|
endChar: 2,
|
|
|
|
|
};
|
|
|
|
|
|
2017-01-30 12:03:13 -08:00
|
|
|
|
element.changeNum = 123;
|
|
|
|
|
element.patchRange = {basePatchNum: 1, patchNum: 2};
|
|
|
|
|
element.path = 'file.txt';
|
|
|
|
|
|
2017-01-27 15:33:08 -08:00
|
|
|
|
sandbox.stub(element.$.diffBuilder, 'createCommentThreadGroup',
|
|
|
|
|
function() {
|
|
|
|
|
return document.createElement('gr-diff-comment-thread-group');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// No thread groups.
|
|
|
|
|
assert.isNotOk(element._getThreadGroupForLine(contentEl));
|
|
|
|
|
|
|
|
|
|
// A thread group gets created.
|
2017-01-30 12:03:13 -08:00
|
|
|
|
assert.isOk(element._getOrCreateThreadAtLineRange(contentEl, patchNum,
|
|
|
|
|
commentSide, side));
|
2017-01-27 15:33:08 -08:00
|
|
|
|
|
|
|
|
|
// Try to fetch a thread with a different range.
|
|
|
|
|
range = {
|
|
|
|
|
startLine: 1,
|
|
|
|
|
startChar: 1,
|
|
|
|
|
endLine: 1,
|
|
|
|
|
endChar: 3,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
assert.isOk(element._getOrCreateThreadAtLineRange(
|
2017-01-30 12:03:13 -08:00
|
|
|
|
contentEl, patchNum, commentSide, side, range));
|
2017-01-27 15:33:08 -08:00
|
|
|
|
// The new thread group can be fetched.
|
|
|
|
|
assert.isOk(element._getThreadGroupForLine(contentEl));
|
|
|
|
|
|
|
|
|
|
assert.equal(contentEl.querySelectorAll(
|
|
|
|
|
'gr-diff-comment-thread-group').length, 1);
|
|
|
|
|
|
|
|
|
|
var threadGroup = contentEl.querySelector(
|
|
|
|
|
'gr-diff-comment-thread-group');
|
|
|
|
|
var threadLength = Polymer.dom(threadGroup.root).
|
|
|
|
|
querySelectorAll('gr-diff-comment-thread').length;
|
|
|
|
|
assert.equal(threadLength, 2);
|
|
|
|
|
});
|
|
|
|
|
|
2016-05-23 15:24:05 -07:00
|
|
|
|
test('renders image diffs', function(done) {
|
|
|
|
|
var mockDiff = {
|
|
|
|
|
meta_a: {name: 'carrot.jpg', content_type: 'image/jpeg', lines: 66},
|
|
|
|
|
meta_b: {name: 'carrot.jpg', content_type: 'image/jpeg', lines: 560},
|
|
|
|
|
intraline_status: 'OK',
|
|
|
|
|
change_type: 'MODIFIED',
|
|
|
|
|
diff_header: [
|
|
|
|
|
'diff --git a/carrot.jpg b/carrot.jpg',
|
|
|
|
|
'index 2adc47d..f9c2f2c 100644',
|
|
|
|
|
'--- a/carrot.jpg',
|
|
|
|
|
'+++ b/carrot.jpg',
|
|
|
|
|
'Binary files differ',
|
|
|
|
|
],
|
|
|
|
|
content: [{skip: 66}],
|
|
|
|
|
binary: true,
|
|
|
|
|
};
|
|
|
|
|
var mockFile1 = {
|
|
|
|
|
body: 'Qk06AAAAAAAAADYAAAAoAAAAAQAAAP////8BACAAAAAAAAAAAAATCwAAEwsA' +
|
|
|
|
|
'AAAAAAAAAAAAAAAA/w==',
|
|
|
|
|
type: 'image/bmp',
|
|
|
|
|
};
|
|
|
|
|
var mockFile2 = {
|
|
|
|
|
body: 'Qk06AAAAAAAAADYAAAAoAAAAAQAAAP////8BACAAAAAAAAAAAAATCwAAEwsA' +
|
|
|
|
|
'AAAAAAAAAAAA/////w==',
|
|
|
|
|
type: 'image/bmp'
|
|
|
|
|
};
|
|
|
|
|
var mockCommit = {
|
|
|
|
|
commit: '9a1a1d10baece5efbba10bc4ccf808a67a50ac0a',
|
|
|
|
|
parents: [{
|
|
|
|
|
commit: '7338aa9adfe57909f1fdaf88975cdea467d3382f',
|
|
|
|
|
subject: 'Added a carrot',
|
|
|
|
|
}],
|
|
|
|
|
author: {
|
|
|
|
|
name: 'Wyatt Allen',
|
|
|
|
|
email: 'wyatta@google.com',
|
|
|
|
|
date: '2016-05-23 21:44:51.000000000',
|
|
|
|
|
tz: -420,
|
2016-03-25 16:48:13 -04:00
|
|
|
|
},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
committer: {
|
|
|
|
|
name: 'Wyatt Allen',
|
|
|
|
|
email: 'wyatta@google.com',
|
|
|
|
|
date: '2016-05-25 00:25:41.000000000',
|
|
|
|
|
tz: -420,
|
2016-03-25 16:48:13 -04:00
|
|
|
|
},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
subject: 'Updated the carrot',
|
|
|
|
|
message: 'Updated the carrot\n\nChange-Id: Iabcd123\n',
|
|
|
|
|
};
|
|
|
|
|
var mockComments = {baseComments: [], comments: []};
|
|
|
|
|
|
|
|
|
|
var stubs = [];
|
2017-01-27 15:33:08 -08:00
|
|
|
|
stubs.push(sandbox.stub(element, '_getDiff',
|
2016-05-23 15:24:05 -07:00
|
|
|
|
function() { return Promise.resolve(mockDiff); }));
|
2017-01-27 15:33:08 -08:00
|
|
|
|
stubs.push(sandbox.stub(element.$.restAPI, 'getCommitInfo',
|
2016-05-23 15:24:05 -07:00
|
|
|
|
function() { return Promise.resolve(mockCommit); }));
|
2017-01-27 15:33:08 -08:00
|
|
|
|
stubs.push(sandbox.stub(element.$.restAPI,
|
2016-05-23 15:24:05 -07:00
|
|
|
|
'getCommitFileContents',
|
|
|
|
|
function() { return Promise.resolve(mockFile1); }));
|
2017-01-27 15:33:08 -08:00
|
|
|
|
stubs.push(sandbox.stub(element.$.restAPI,
|
2016-05-23 15:24:05 -07:00
|
|
|
|
'getChangeFileContents',
|
|
|
|
|
function() { return Promise.resolve(mockFile2); }));
|
2017-01-27 15:33:08 -08:00
|
|
|
|
stubs.push(sandbox.stub(element.$.restAPI, '_getDiffComments',
|
2016-05-23 15:24:05 -07:00
|
|
|
|
function() { return Promise.resolve(mockComments); }));
|
2017-01-27 15:33:08 -08:00
|
|
|
|
stubs.push(sandbox.stub(element.$.restAPI, 'getDiffDrafts',
|
2016-05-23 15:24:05 -07:00
|
|
|
|
function() { return Promise.resolve(mockComments); }));
|
|
|
|
|
|
|
|
|
|
element.patchRange = {basePatchNum: 'PARENT', patchNum: 1};
|
|
|
|
|
|
|
|
|
|
var rendered = function() {
|
|
|
|
|
// Recognizes that it should be an image diff.
|
|
|
|
|
assert.isTrue(element.isImageDiff);
|
2016-06-01 11:41:47 -07:00
|
|
|
|
assert.instanceOf(element.$.diffBuilder._builder, GrDiffBuilderImage);
|
2016-05-23 15:24:05 -07:00
|
|
|
|
|
|
|
|
|
// Left image rendered with the parent commit's version of the file.
|
|
|
|
|
var leftInmage = element.$.diffTable.querySelector('td.left img');
|
|
|
|
|
assert.isOk(leftInmage);
|
|
|
|
|
assert.equal(leftInmage.getAttribute('src'),
|
|
|
|
|
'data:image/bmp;base64, ' + mockFile1.body);
|
|
|
|
|
|
|
|
|
|
// Right image rendered with this change's revision of the image.
|
|
|
|
|
var rightInmage = element.$.diffTable.querySelector('td.right img');
|
|
|
|
|
assert.isOk(rightInmage);
|
|
|
|
|
assert.equal(rightInmage.getAttribute('src'),
|
|
|
|
|
'data:image/bmp;base64, ' + mockFile2.body);
|
|
|
|
|
|
|
|
|
|
// Cleanup.
|
|
|
|
|
element.removeEventListener('render', rendered);
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
element.addEventListener('render', rendered);
|
|
|
|
|
|
|
|
|
|
element.$.restAPI.getDiffPreferences().then(function(prefs) {
|
|
|
|
|
element.prefs = prefs;
|
|
|
|
|
element.reload();
|
|
|
|
|
});
|
|
|
|
|
});
|
2016-06-21 12:43:25 -07:00
|
|
|
|
|
|
|
|
|
test('_handleTap lineNum', function(done) {
|
|
|
|
|
var addDraftStub = sinon.stub(element, 'addDraftAtLine');
|
|
|
|
|
var el = document.createElement('div');
|
|
|
|
|
el.className = 'lineNum';
|
|
|
|
|
el.addEventListener('click', function(e) {
|
|
|
|
|
element._handleTap(e);
|
|
|
|
|
assert.isTrue(addDraftStub.called);
|
|
|
|
|
assert.equal(addDraftStub.lastCall.args[0], el);
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
el.click();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('_handleTap context', function(done) {
|
|
|
|
|
var showContextStub = sinon.stub(element.$.diffBuilder, 'showContext');
|
|
|
|
|
var el = document.createElement('div');
|
|
|
|
|
el.className = 'showContext';
|
|
|
|
|
el.addEventListener('click', function(e) {
|
|
|
|
|
element._handleTap(e);
|
|
|
|
|
assert.isTrue(showContextStub.called);
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
el.click();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('_handleTap content', function(done) {
|
|
|
|
|
var content = document.createElement('div');
|
|
|
|
|
var lineEl = document.createElement('div');
|
|
|
|
|
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var selectStub = sandbox.stub(element, '_selectLine');
|
|
|
|
|
var getLineStub = sandbox.stub(element.$.diffBuilder,
|
|
|
|
|
'getLineElByChild', function() { return lineEl; });
|
2016-06-21 12:43:25 -07:00
|
|
|
|
|
|
|
|
|
content.className = 'content';
|
|
|
|
|
content.addEventListener('click', function(e) {
|
|
|
|
|
element._handleTap(e);
|
|
|
|
|
assert.isTrue(selectStub.called);
|
|
|
|
|
assert.equal(selectStub.lastCall.args[0], lineEl);
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
content.click();
|
|
|
|
|
});
|
2016-10-13 11:40:27 -07:00
|
|
|
|
|
|
|
|
|
test('_getDiff handles null diff responses', function(done) {
|
|
|
|
|
stub('gr-rest-api-interface', {
|
|
|
|
|
getDiff: function() { return Promise.resolve(null); },
|
|
|
|
|
});
|
|
|
|
|
element.changeNum = 123;
|
|
|
|
|
element.patchRange = {basePatchNum: 1, patchNum: 2};
|
|
|
|
|
element.path = 'file.txt';
|
|
|
|
|
element._getDiff().then(done);
|
|
|
|
|
});
|
2016-01-21 12:54:05 -05:00
|
|
|
|
});
|
2016-05-23 17:18:43 -07:00
|
|
|
|
|
2016-05-23 15:24:05 -07:00
|
|
|
|
suite('logged in', function() {
|
|
|
|
|
setup(function() {
|
|
|
|
|
stub('gr-rest-api-interface', {
|
|
|
|
|
getLoggedIn: function() { return Promise.resolve(true); },
|
2016-10-15 20:22:00 -07:00
|
|
|
|
getPreferences: function() {
|
|
|
|
|
return Promise.resolve({time_format: 'HHMM_12'});
|
|
|
|
|
},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
});
|
|
|
|
|
element = fixture('basic');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('get drafts', function(done) {
|
|
|
|
|
element.patchRange = {basePatchNum: 0, patchNum: 0};
|
|
|
|
|
var draftsResponse = {
|
|
|
|
|
baseComments: [{id: 'foo'}],
|
|
|
|
|
comments: [{id: 'bar'}],
|
|
|
|
|
};
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var getDraftsStub = sandbox.stub(element.$.restAPI, 'getDiffDrafts',
|
2016-05-23 15:24:05 -07:00
|
|
|
|
function() { return Promise.resolve(draftsResponse); });
|
|
|
|
|
element._getDiffDrafts().then(function(result) {
|
|
|
|
|
assert.deepEqual(result, draftsResponse);
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('get comments and drafts', function(done) {
|
|
|
|
|
var comments = {
|
|
|
|
|
baseComments: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'bc1', __commentSide: 'left'},
|
|
|
|
|
{id: 'bc2', __commentSide: 'left'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
comments: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'c1', __commentSide: 'right'},
|
|
|
|
|
{id: 'c2', __commentSide: 'right'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
};
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var diffCommentsStub = sandbox.stub(element, '_getDiffComments',
|
2016-05-23 15:24:05 -07:00
|
|
|
|
function() { return Promise.resolve(comments); });
|
|
|
|
|
|
|
|
|
|
var drafts = {
|
|
|
|
|
baseComments: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'bd1', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd2', __commentSide: 'left'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
comments: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'd1', __commentSide: 'right'},
|
|
|
|
|
{id: 'd2', __commentSide: 'right'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
};
|
2016-12-07 13:36:49 -08:00
|
|
|
|
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var diffDraftsStub = sandbox.stub(element, '_getDiffDrafts',
|
2016-05-23 15:24:05 -07:00
|
|
|
|
function() { return Promise.resolve(drafts); });
|
|
|
|
|
|
2016-12-07 13:36:49 -08:00
|
|
|
|
var robotComments = {
|
|
|
|
|
baseComments: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'br1', __commentSide: 'left'},
|
|
|
|
|
{id: 'br2', __commentSide: 'left'},
|
2016-12-07 13:36:49 -08:00
|
|
|
|
],
|
|
|
|
|
comments: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'r1', __commentSide: 'right'},
|
|
|
|
|
{id: 'r2', __commentSide: 'right'},
|
2016-12-07 13:36:49 -08:00
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
|
2017-01-27 15:33:08 -08:00
|
|
|
|
var diffRobotCommentStub = sandbox.stub(element,
|
|
|
|
|
'_getDiffRobotComments', function() {
|
|
|
|
|
return Promise.resolve(robotComments); });
|
2016-12-07 13:36:49 -08:00
|
|
|
|
|
2016-05-23 15:24:05 -07:00
|
|
|
|
element.changeNum = '42';
|
|
|
|
|
element.patchRange = {
|
|
|
|
|
basePatchNum: 'PARENT',
|
|
|
|
|
patchNum: 3,
|
|
|
|
|
};
|
|
|
|
|
element.path = '/path/to/foo';
|
|
|
|
|
element.projectConfig = {foo: 'bar'};
|
|
|
|
|
|
|
|
|
|
element._getDiffCommentsAndDrafts().then(function(result) {
|
|
|
|
|
assert.deepEqual(result, {
|
|
|
|
|
meta: {
|
|
|
|
|
changeNum: '42',
|
|
|
|
|
patchRange: {
|
|
|
|
|
basePatchNum: 'PARENT',
|
|
|
|
|
patchNum: 3,
|
|
|
|
|
},
|
|
|
|
|
path: '/path/to/foo',
|
|
|
|
|
projectConfig: {foo: 'bar'},
|
|
|
|
|
},
|
|
|
|
|
left: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'bc1', __commentSide: 'left'},
|
|
|
|
|
{id: 'bc2', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd1', __draft: true, __commentSide: 'left'},
|
|
|
|
|
{id: 'bd2', __draft: true, __commentSide: 'left'},
|
|
|
|
|
{id: 'br1', __commentSide: 'left'},
|
|
|
|
|
{id: 'br2', __commentSide: 'left'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
right: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'c1', __commentSide: 'right'},
|
|
|
|
|
{id: 'c2', __commentSide: 'right'},
|
|
|
|
|
{id: 'd1', __draft: true, __commentSide: 'right'},
|
|
|
|
|
{id: 'd2', __draft: true, __commentSide: 'right'},
|
|
|
|
|
{id: 'r1', __commentSide: 'right'},
|
|
|
|
|
{id: 'r2', __commentSide: 'right'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
suite('handle comment-update', function() {
|
|
|
|
|
|
|
|
|
|
setup(function() {
|
|
|
|
|
element._comments = {
|
|
|
|
|
meta: {
|
|
|
|
|
changeNum: '42',
|
|
|
|
|
patchRange: {
|
|
|
|
|
basePatchNum: 'PARENT',
|
|
|
|
|
patchNum: 3,
|
|
|
|
|
},
|
|
|
|
|
path: '/path/to/foo',
|
|
|
|
|
projectConfig: {foo: 'bar'},
|
|
|
|
|
},
|
|
|
|
|
left: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'bc1', side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bc2', side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd1', __draft: true, side: 'PARENT', __commentSide: 'left'},
|
|
|
|
|
{id: 'bd2', __draft: true, side: 'PARENT', __commentSide: 'left'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
right: [
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: 'c1', __commentSide: 'right'},
|
|
|
|
|
{id: 'c2', __commentSide: 'right'},
|
|
|
|
|
{id: 'd1', __draft: true, __commentSide: 'right'},
|
|
|
|
|
{id: 'd2', __draft: true, __commentSide: 'right'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('creating a draft', function() {
|
2017-01-30 12:03:13 -08:00
|
|
|
|
var comment = {__draft: true, __draftID: 'tempID', side: 'PARENT',
|
|
|
|
|
__commentSide: 'left'};
|
2016-05-23 15:24:05 -07:00
|
|
|
|
element.fire('comment-update', {comment: comment});
|
|
|
|
|
assert.include(element._comments.left, comment);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('saving a draft', function() {
|
|
|
|
|
var draftID = 'tempID';
|
|
|
|
|
var id = 'savedID';
|
|
|
|
|
element._comments.left.push(
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{__draft: true, __draftID: draftID, side: 'PARENT',
|
|
|
|
|
__commentSide: 'left'});
|
2016-05-23 15:24:05 -07:00
|
|
|
|
element.fire('comment-update', {comment:
|
2017-01-30 12:03:13 -08:00
|
|
|
|
{id: id, __draft: true, __draftID: draftID, side: 'PARENT',
|
|
|
|
|
__commentSide: 'left'},
|
2016-05-23 15:24:05 -07:00
|
|
|
|
});
|
|
|
|
|
var drafts = element._comments.left.filter(function(item) {
|
|
|
|
|
return item.__draftID === draftID;
|
|
|
|
|
});
|
|
|
|
|
assert.equal(drafts.length, 1);
|
|
|
|
|
assert.equal(drafts[0].id, id);
|
|
|
|
|
});
|
2016-05-23 17:18:43 -07:00
|
|
|
|
});
|
|
|
|
|
});
|
2016-01-06 10:43:30 -05:00
|
|
|
|
});
|
2015-12-11 12:02:57 -05:00
|
|
|
|
</script>
|