blob: b82bac469268fdd4b8ae739fe26b2990b027387a [file] [log] [blame]
// Copyright 2019 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';
import {MrRestrictionIndicator} from './mr-restriction-indicator.js';
let element;
describe('mr-restriction-indicator', () => {
beforeEach(() => {
element = document.createElement('mr-restriction-indicator');
document.body.appendChild(element);
});
afterEach(() => {
document.body.removeChild(element);
});
it('initializes', () => {
assert.instanceOf(element, MrRestrictionIndicator);
});
it('shows element only when restricted or showWarning', async () => {
await element.updateComplete;
assert.isTrue(element.hasAttribute('hidden'));
element.restrictions = {view: ['Google']};
await element.updateComplete;
assert.isFalse(element.hasAttribute('hidden'));
element.restrictions = {};
await element.updateComplete;
assert.isTrue(element.hasAttribute('hidden'));
element.prefs = new Map([['public_issue_notice', true]]);
await element.updateComplete;
assert.isFalse(element.hasAttribute('hidden'));
element.prefs = new Map([['public_issue_notice', false]]);
await element.updateComplete;
assert.isTrue(element.hasAttribute('hidden'));
element.prefs = new Map([]);
await element.updateComplete;
assert.isTrue(element.hasAttribute('hidden'));
// It is possible to have an edit or comment restriction on
// a public issue when the user is opted in to public issue notices.
// In that case, the lock icon is shown, plus a warning icon and the
// public issue notice.
element.restrictions = new Map([['edit', ['Google']]]);
element.prefs = new Map([['public_issue_notice', true]]);
await element.updateComplete;
assert.isFalse(element.hasAttribute('hidden'));
});
it('displays view restrictions', async () => {
element.restrictions = {
view: ['Google', 'hello'],
edit: ['Editor', 'world'],
comment: ['commentor'],
};
await element.updateComplete;
const restrictString =
'Only users with Google and hello permission or issue reporter may view.';
assert.equal(element._restrictionText, restrictString);
assert.include(element.shadowRoot.textContent, restrictString);
});
it('displays edit restrictions', async () => {
element.restrictions = {
view: [],
edit: ['Editor', 'world'],
comment: ['commentor'],
};
await element.updateComplete;
const restrictString =
'Only users with Editor and world permission may edit.';
assert.equal(element._restrictionText, restrictString);
assert.include(element.shadowRoot.textContent, restrictString);
});
it('displays comment restrictions', async () => {
element.restrictions = {
view: [],
edit: [],
comment: ['commentor'],
};
await element.updateComplete;
const restrictString =
'Only users with commentor permission or issue reporter may comment.';
assert.equal(element._restrictionText, restrictString);
assert.include(element.shadowRoot.textContent, restrictString);
});
it('displays public issue notice, if the user has that pref', async () => {
element.restrictions = {};
element.prefs = new Map();
assert.equal(element._restrictionText, '');
assert.include(element.shadowRoot.textContent, '');
element.prefs = new Map([['public_issue_notice', true]]);
await element.updateComplete;
const noticeString =
'Public issue: Please do not post confidential information.';
assert.equal(element._warningText, noticeString);
assert.include(element.shadowRoot.textContent, noticeString);
});
});