Merge branch 'main' into avm99963-monorail
Merged commit 34d8229ae2b51fb1a15bd208e6fe6185c94f6266
GitOrigin-RevId: 7ee0917f93a577e475f8e09526dd144d245593f4
diff --git a/static_src/elements/chops/chops-announcement/chops-announcement.test.js b/static_src/elements/chops/chops-announcement/chops-announcement.test.js
index fa9643f..bed36f5 100644
--- a/static_src/elements/chops/chops-announcement/chops-announcement.test.js
+++ b/static_src/elements/chops/chops-announcement/chops-announcement.test.js
@@ -1,4 +1,4 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
+// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {assert} from 'chai';
@@ -9,11 +9,22 @@
let element;
let clock;
+function assertRendersMessage(message) {
+ const messageContainer = element.shadowRoot.querySelector('mr-comment-content');
+ assert.include(messageContainer.content, message);
+}
+
+function assertDoesNotRender() {
+ assert.equal(0, element.shadowRoot.children.length);
+}
+
describe('chops-announcement', () => {
beforeEach(() => {
- element = document.createElement('chops-announcement');
+ element = document.createElement('chops-announcement-base');
document.body.appendChild(element);
+ element.additionalAnnouncements = [];
+
clock = sinon.useFakeTimers({
now: new Date(0),
shouldAdvanceTime: false,
@@ -32,10 +43,6 @@
window.fetch.restore();
});
- it('initializes', () => {
- assert.instanceOf(element, ChopsAnnouncement);
- });
-
it('does not request announcements when no service specified', async () => {
sinon.stub(element, 'fetch');
@@ -139,7 +146,8 @@
assert.deepEqual(element._announcements,
[{id: '1234', messageContent: 'test thing'}]);
- assert.include(element.shadowRoot.textContent, 'test thing');
+
+ assertRendersMessage('test thing');
});
it('renders empty on empty announcement', async () => {
@@ -154,7 +162,7 @@
await element.updateComplete;
assert.deepEqual(element._announcements, []);
- assert.equal(0, element.shadowRoot.children.length);
+ assertDoesNotRender()
});
it('fetch returns response data', async () => {
@@ -191,4 +199,85 @@
'Something went wrong while fetching announcements');
}
});
+
+ describe('additional announcement handlings', () => {
+ beforeEach(() => {
+ sinon.stub(element, 'fetch');
+ element.fetch.returns({});
+ element.service = 'monorail';
+ });
+
+ it('renders additional announcement', async () => {
+ element.additionalAnnouncements = [{'messageContent': 'test thing'}];
+ await element.updateComplete;
+
+ assertRendersMessage('test thing');
+ });
+
+ it('renders when user is in group', async () => {
+ element.additionalAnnouncements = [
+ {'messageContent': 'test thing', 'groups': ['hello@group.com']}
+ ];
+ element.userGroups = [
+ {"userId": "12344", "displayName": "hello@group.com"}];
+ await element.updateComplete;
+
+ assertRendersMessage('test thing');
+ });
+
+ it('does not render when user is not in group', async () => {
+ element.additionalAnnouncements = [
+ {'messageContent': 'test thing', 'groups': ['hello@group.com']}
+ ];
+ element.userGroups = [
+ {"userId": "12344", "displayName": "hello@othergroup.com"}];
+ await element.updateComplete;
+
+ assertDoesNotRender();
+ });
+
+ it('renders when user is in everyone@ group', async () => {
+ element.additionalAnnouncements = [
+ {'messageContent': 'test thing', 'groups': ['everyone@world.com']}
+ ];
+ element.userGroups = [
+ {"userId": "12344", "displayName": "hello@group.com"}];
+ element.currentUserName = "hello@world.com";
+ await element.updateComplete;
+
+ assertRendersMessage('test thing');
+ });
+
+ it('does not renders when user is not in everyone@ group', async () => {
+ element.additionalAnnouncements = [
+ {'messageContent': 'test thing', 'groups': ['everyone@word.com']}
+ ];
+ element.userGroups = [
+ {"userId": "12344", "displayName": "hello@world.com"}];
+ element.currentUserName = "hello@world.com";
+ await element.updateComplete;
+
+ assertDoesNotRender();
+ });
+
+ it('renders when viewing referenced project', async () => {
+ element.additionalAnnouncements = [
+ {'messageContent': 'test thing', 'projects': ['chromium']}];
+ element.currentProject = 'chromium';
+
+ await element.updateComplete;
+
+ assertRendersMessage('test thing');
+ });
+
+ it('does not render when not viewing referenced project', async () => {
+ element.additionalAnnouncements = [
+ {'messageContent': 'test thing', 'projects': ['chromium']}];
+ element.currentProject = 'chrome';
+
+ await element.updateComplete;
+
+ assertDoesNotRender();
+ });
+ });
});