blob: 77af246791c3c311e369784bbfa5741973798df6 [file] [log] [blame]
Copybara854996b2021-09-07 19:36:02 +00001// Copyright 2019 The Chromium Authors. All rights reserved.
2// 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 {MrUserLink} from './mr-user-link.js';
7
8
9let element;
10let availabilityIcon;
11let userLink;
12let userText;
13let availabilityText;
14
15function getElements() {
16 availabilityIcon = element.shadowRoot.querySelector(
17 '#availability-icon');
18 userLink = element.shadowRoot.querySelector(
19 '#user-link');
20 userText = element.shadowRoot.querySelector(
21 '#user-text');
22 availabilityText = element.shadowRoot.querySelector(
23 '#availability-text');
24}
25
26describe('mr-user-link', () => {
27 beforeEach(() => {
28 element = document.createElement('mr-user-link');
29 document.body.appendChild(element);
30 });
31
32 afterEach(() => {
33 document.body.removeChild(element);
34 });
35
36 it('initializes', () => {
37 assert.instanceOf(element, MrUserLink);
38 });
39
40 it('no link when no userId and displayName is null value', async () => {
41 element.userRef = {displayName: '----'};
42
43 await element.updateComplete;
44 getElements();
45
46 assert.isFalse(userText.hidden);
47 assert.equal(userText.textContent, '----');
48
49 assert.isTrue(availabilityIcon.hidden);
50 assert.isTrue(userLink.hidden);
51 assert.isTrue(availabilityText.hidden);
52 });
53
54 it('link when displayName', async () => {
55 element.userRef = {displayName: 'test@example.com'};
56
57 await element.updateComplete;
58 getElements();
59
60 assert.isFalse(userLink.hidden);
61 assert.equal(userLink.textContent.trim(), 'test@example.com');
62 assert.isTrue(userLink.href.endsWith('/u/test@example.com'));
63
64 assert.isTrue(availabilityIcon.hidden);
65 assert.isTrue(userText.hidden);
66 assert.isTrue(availabilityText.hidden);
67 });
68
69 it('link when userId', async () => {
70 element.userRef = {userId: '1234', displayName: 'test@example.com'};
71
72 await element.updateComplete;
73 getElements();
74
75 assert.isFalse(userLink.hidden);
76 assert.equal(userLink.textContent.trim(), 'test@example.com');
77 assert.isTrue(userLink.href.endsWith('/u/1234'));
78
79 assert.isTrue(availabilityIcon.hidden);
80 assert.isTrue(userText.hidden);
81 assert.isTrue(availabilityText.hidden);
82 });
83
84 it('show availability', async () => {
85 element.userRef = {userId: '1234', displayName: 'test@example.com'};
86 element.referencedUsers = new Map(
87 [['test@example.com', {availability: 'foo'}]]);
88 element.showAvailabilityIcon = true;
89
90 await element.updateComplete;
91 getElements();
92
93 assert.isFalse(availabilityIcon.hidden);
94 assert.equal(availabilityIcon.title, 'foo');
95
96 assert.isFalse(userLink.hidden);
97 assert.isTrue(userText.hidden);
98 assert.isTrue(availabilityText.hidden);
99 });
100
101 it('dont show availability', async () => {
102 element.userRef = {userId: '1234', displayName: 'test@example.com'};
103 element.referencedUsers = new Map(
104 [['test@example.com', {availability: 'foo'}]]);
105
106 await element.updateComplete;
107 getElements();
108
109 assert.isTrue(availabilityIcon.hidden);
110
111 assert.isFalse(userLink.hidden);
112 assert.isTrue(userText.hidden);
113 assert.isTrue(availabilityText.hidden);
114 });
115
116 it('show availability text', async () => {
117 element.userRef = {userId: '1234', displayName: 'test@example.com'};
118 element.referencedUsers = new Map(
119 [['test@example.com', {availability: 'foo'}]]);
120 element.showAvailabilityText = true;
121
122 await element.updateComplete;
123 getElements();
124
125 assert.isFalse(availabilityText.hidden);
126 assert.equal(availabilityText.title, 'foo');
127 assert.equal(availabilityText.textContent, 'foo');
128
129 assert.isTrue(availabilityIcon.hidden);
130 assert.isFalse(userLink.hidden);
131 assert.isTrue(userText.hidden);
132 });
133
134 it('show availability user never visited', async () => {
135 element.userRef = {userId: '1234', displayName: 'test@example.com'};
136 element.referencedUsers = new Map(
137 [['test@example.com', {last_visit_timestamp: undefined}]]);
138
139 await element.updateComplete;
140 getElements();
141
142 assert.isTrue(availabilityIcon.classList.contains("inline-icon-unseen"));
143 });
144
145 it('show availability user visited', async () => {
146 element.userRef = {userId: '1234', displayName: 'test@example.com'};
147 element.referencedUsers = new Map(
148 [['test@example.com', {last_visit_timestamp: "35"}]]);
149
150 await element.updateComplete;
151 getElements();
152
153 assert.isTrue(availabilityIcon.classList.contains("inline-icon"));
154 assert.isFalse(availabilityIcon.classList.contains("inline-icon-unseen"));
155 });
156});