blob: e96fa3995158be6927cedbbbc5dcb01ecc9f7993 [file] [log] [blame]
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import * as sinon from 'sinon';
import '../../../test/common-test-setup';
import './gr-identities';
import {GrIdentities} from './gr-identities';
import {AuthType} from '../../../constants/constants';
import {stubRestApi, waitUntilVisible} from '../../../test/test-utils';
import {ServerInfo} from '../../../types/common';
import {createServerInfo} from '../../../test/test-data-generators';
import {queryAll, queryAndAssert} from '../../../test/test-utils';
import {GrButton} from '../../shared/gr-button/gr-button';
import {fixture, html, assert} from '@open-wc/testing';
suite('gr-identities tests', () => {
let element: GrIdentities;
const ids = [
{
identity: 'username:john',
email_address: 'john.doe@example.com',
trusted: true,
},
{
identity: 'gerrit:gerrit',
email_address: 'gerrit@example.com',
},
{
identity: 'mailto:gerrit2@example.com',
email_address: 'gerrit2@example.com',
trusted: true,
can_delete: true,
},
];
setup(async () => {
stubRestApi('getExternalIds').returns(Promise.resolve(ids));
element = await fixture<GrIdentities>(
html`<gr-identities></gr-identities>`
);
await element.loadData();
await element.updateComplete;
});
test('renders', () => {
assert.shadowDom.equal(
element,
/* HTML */ `<div class="gr-form-styles">
<fieldset class="space">
<table>
<thead>
<tr>
<th class="statusHeader">Status</th>
<th class="emailAddressHeader">Email Address</th>
<th class="identityHeader">Identity</th>
<th class="deleteHeader"></th>
</tr>
</thead>
<tbody>
<tr>
<td class="statusColumn">Untrusted</td>
<td class="emailAddressColumn">gerrit@example.com</td>
<td class="identityColumn">gerrit:gerrit</td>
<td class="deleteColumn">
<gr-button
aria-disabled="false"
class="deleteButton"
data-index="0"
role="button"
tabindex="0"
>
Delete
</gr-button>
</td>
</tr>
<tr>
<td class="statusColumn"></td>
<td class="emailAddressColumn">gerrit2@example.com</td>
<td class="identityColumn"></td>
<td class="deleteColumn">
<gr-button
aria-disabled="false"
class="deleteButton show"
data-index="1"
role="button"
tabindex="0"
>
Delete
</gr-button>
</td>
</tr>
</tbody>
</table>
</fieldset>
</div>
<dialog id="modal" tabindex="-1">
<gr-confirm-delete-item-dialog
class="confirmDialog"
itemtypename="ID"
>
</gr-confirm-delete-item-dialog>
</dialog>`
);
});
test('renders', () => {
const rows = Array.from(queryAll(element, 'tbody tr'));
assert.equal(rows.length, 2);
const nameCells = rows.map(row => queryAll(row, 'td')[2].textContent);
assert.equal(nameCells[0]!.trim(), 'gerrit:gerrit');
assert.equal(nameCells[1]!.trim(), '');
});
test('renders email', () => {
const rows = Array.from(queryAll(element, 'tbody tr'));
assert.equal(rows.length, 2);
const nameCells = rows.map(row => queryAll(row, 'td')[1]!.textContent);
assert.equal(nameCells[0]!, 'gerrit@example.com');
assert.equal(nameCells[1]!, 'gerrit2@example.com');
});
test('filterIdentities', () => {
assert.notInclude(element.getIdentities(), ids[0]);
assert.include(element.getIdentities(), ids[1]);
});
test('delete id', async () => {
element.idName = 'mailto:gerrit2@example.com';
const loadDataStub = sinon.stub(element, 'loadData');
await element.handleDeleteItemConfirm();
assert.isTrue(loadDataStub.called);
});
test('handleDeleteItem opens modal', async () => {
const deleteBtn = queryAndAssert<GrButton>(element, '.deleteButton');
deleteBtn.click();
await element.updateComplete;
await waitUntilVisible(element.modal!);
});
test('computeShowLinkAnotherIdentity', () => {
const config: ServerInfo = {
...createServerInfo(),
};
config.auth.auth_type = AuthType.OAUTH;
element.serverConfig = config;
assert.isTrue(element.computeShowLinkAnotherIdentity());
config.auth.auth_type = AuthType.OPENID;
element.serverConfig = config;
assert.isTrue(element.computeShowLinkAnotherIdentity());
config.auth.auth_type = AuthType.HTTP_LDAP;
element.serverConfig = config;
assert.isFalse(element.computeShowLinkAnotherIdentity());
config.auth.auth_type = AuthType.LDAP;
element.serverConfig = config;
assert.isFalse(element.computeShowLinkAnotherIdentity());
config.auth.auth_type = AuthType.HTTP;
element.serverConfig = config;
assert.isFalse(element.computeShowLinkAnotherIdentity());
element.serverConfig = undefined;
assert.isFalse(element.computeShowLinkAnotherIdentity());
});
test('showLinkAnotherIdentity', async () => {
let config: ServerInfo = {
...createServerInfo(),
};
config.auth.auth_type = AuthType.OAUTH;
element.serverConfig = config;
await element.updateComplete;
assert.isTrue(element.showLinkAnotherIdentity);
config = {
...createServerInfo(),
};
config.auth.auth_type = AuthType.LDAP;
element.serverConfig = config;
await element.updateComplete;
assert.isFalse(element.showLinkAnotherIdentity);
});
});