blob: 91b4da73548d10f7ebd1a91d139b946d9c7d9bff [file] [log] [blame]
Adrià Vilanova Martínezf19ea432024-01-23 20:20:52 +01001// Copyright 2019 The Chromium Authors
Copybara854996b2021-09-07 19:36:02 +00002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5import {assert} from 'chai';
6import sinon from 'sinon';
7import {MrCommentList} from './mr-comment-list.js';
8
9
10let element;
11
12describe('mr-comment-list', () => {
13 beforeEach(() => {
14 element = document.createElement('mr-comment-list');
15 document.body.appendChild(element);
16 element.comments = [
17 {
18 canFlag: true,
19 localId: 898395,
20 canDelete: true,
21 projectName: 'chromium',
22 commenter: {
23 displayName: 'user@example.com',
24 userId: '12345',
25 },
26 content: 'foo',
27 sequenceNum: 1,
28 timestamp: 1549319989,
29 },
30 {
31 canFlag: true,
32 localId: 898395,
33 canDelete: true,
34 projectName: 'chromium',
35 commenter: {
36 displayName: 'user@example.com',
37 userId: '12345',
38 },
39 content: 'foo',
40 sequenceNum: 2,
41 timestamp: 1549320089,
42 },
43 {
44 canFlag: true,
45 localId: 898395,
46 canDelete: true,
47 projectName: 'chromium',
48 commenter: {
49 displayName: 'user@example.com',
50 userId: '12345',
51 },
52 content: 'foo',
53 sequenceNum: 3,
54 timestamp: 1549320189,
55 },
56 ];
57
58 // Stub RAF to execute immediately.
59 sinon.stub(window, 'requestAnimationFrame').callsFake((func) => func());
60 });
61
62 afterEach(() => {
63 document.body.removeChild(element);
64 window.requestAnimationFrame.restore();
65 });
66
67 it('initializes', () => {
68 assert.instanceOf(element, MrCommentList);
69 });
70
71 it('scrolls to comment', async () => {
72 await element.updateComplete;
73
74 const commentElements = element.shadowRoot.querySelectorAll('mr-comment');
75 const commentElement = commentElements[commentElements.length - 1];
76 sinon.stub(commentElement, 'scrollIntoView');
77
78 element.focusId = 'c3';
79
80 await element.updateComplete;
81
82 assert.isTrue(element._hideComments);
83 assert.isTrue(commentElement.scrollIntoView.calledOnce);
84
85 commentElement.scrollIntoView.restore();
86 });
87
88 it('scrolls to hidden comment', async () => {
89 await element.updateComplete;
90
91 element.focusId = 'c1';
92
93 await element.updateComplete;
94
95 assert.isFalse(element._hideComments);
96 // TODO: Check that the comment has been scrolled into view.
97 });
98
99 it('doesnt scroll to unknown comment', async () => {
100 await element.updateComplete;
101
102 element.focusId = 'c100';
103
104 await element.updateComplete;
105
106 assert.isTrue(element._hideComments);
107 });
108});