blob: 548b7a7f8a2de67e2cfe57c88675e7f5754ff5d1 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {assert} from 'chai';
import sinon from 'sinon';
import {MrCommentList} from './mr-comment-list.js';
let element;
describe('mr-comment-list', () => {
beforeEach(() => {
element = document.createElement('mr-comment-list');
document.body.appendChild(element);
element.comments = [
{
canFlag: true,
localId: 898395,
canDelete: true,
projectName: 'chromium',
commenter: {
displayName: 'user@example.com',
userId: '12345',
},
content: 'foo',
sequenceNum: 1,
timestamp: 1549319989,
},
{
canFlag: true,
localId: 898395,
canDelete: true,
projectName: 'chromium',
commenter: {
displayName: 'user@example.com',
userId: '12345',
},
content: 'foo',
sequenceNum: 2,
timestamp: 1549320089,
},
{
canFlag: true,
localId: 898395,
canDelete: true,
projectName: 'chromium',
commenter: {
displayName: 'user@example.com',
userId: '12345',
},
content: 'foo',
sequenceNum: 3,
timestamp: 1549320189,
},
];
// Stub RAF to execute immediately.
sinon.stub(window, 'requestAnimationFrame').callsFake((func) => func());
});
afterEach(() => {
document.body.removeChild(element);
window.requestAnimationFrame.restore();
});
it('initializes', () => {
assert.instanceOf(element, MrCommentList);
});
it('scrolls to comment', async () => {
await element.updateComplete;
const commentElements = element.shadowRoot.querySelectorAll('mr-comment');
const commentElement = commentElements[commentElements.length - 1];
sinon.stub(commentElement, 'scrollIntoView');
element.focusId = 'c3';
await element.updateComplete;
assert.isTrue(element._hideComments);
assert.isTrue(commentElement.scrollIntoView.calledOnce);
commentElement.scrollIntoView.restore();
});
it('scrolls to hidden comment', async () => {
await element.updateComplete;
element.focusId = 'c1';
await element.updateComplete;
assert.isFalse(element._hideComments);
// TODO: Check that the comment has been scrolled into view.
});
it('doesnt scroll to unknown comment', async () => {
await element.updateComplete;
element.focusId = 'c100';
await element.updateComplete;
assert.isTrue(element._hideComments);
});
});