blob: aa341ff80292d18f6b76a6e94f9d7b292b9adfe6 [file] [log] [blame]
/**
* @license
* Copyright 2015 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import '../../../test/common-test-setup';
import './gr-avatar';
import {GrAvatar} from './gr-avatar';
import {AvatarInfo} from '../../../types/common';
import {
createAccountWithEmailOnly,
createAccountWithId,
createServerInfo,
} from '../../../test/test-data-generators';
import {fixture, html, assert} from '@open-wc/testing';
import {isVisible, stubRestApi} from '../../../test/test-utils';
suite('gr-avatar tests', () => {
let element: GrAvatar;
const defaultAvatars: AvatarInfo[] = [
{
url: 'https://cdn.example.com/s12-p/photo.jpg',
height: 12,
width: 0,
},
];
test('renders hidden when no config is set', async () => {
stubRestApi('getConfig').resolves(undefined);
const accountWithId = {
...createAccountWithId(123),
avatars: defaultAvatars,
};
element = await fixture(
html`<gr-avatar .account=${accountWithId}></gr-avatar>`
);
assert.isFalse(isVisible(element));
});
test('renders hidden when config does not use avatars', async () => {
stubRestApi('getConfig').resolves({
...createServerInfo(),
plugin: {has_avatars: false, js_resource_paths: []},
});
const accountWithId = {
...createAccountWithId(123),
avatars: defaultAvatars,
};
element = await fixture(
html`<gr-avatar .account=${accountWithId}></gr-avatar>`
);
assert.isFalse(isVisible(element));
});
suite('config has avatars', () => {
setup(async () => {
stubRestApi('getConfig').resolves({
...createServerInfo(),
plugin: {has_avatars: true, js_resource_paths: []},
});
});
test('loads correct size', async () => {
const accountWithId = {
...createAccountWithId(123),
avatars: defaultAvatars,
};
element = await fixture(
html`<gr-avatar .account=${accountWithId} .imageSize=${64}></gr-avatar>`
);
assert.isTrue(isVisible(element));
assert.equal(
element.style.backgroundImage,
'url("/accounts/123/avatar?s=64")'
);
});
test('loads using id', async () => {
const accountWithId = {
...createAccountWithId(123),
avatars: defaultAvatars,
};
element = await fixture(
html`<gr-avatar .account=${accountWithId}></gr-avatar>`
);
assert.isTrue(isVisible(element));
assert.equal(
element.style.backgroundImage,
'url("/accounts/123/avatar?s=16")'
);
});
test('loads using email', async () => {
const accountWithEmail = {
...createAccountWithEmailOnly('foo@gmail.com'),
avatars: defaultAvatars,
};
element = await fixture(
html`<gr-avatar .account=${accountWithEmail}></gr-avatar>`
);
assert.isTrue(isVisible(element));
assert.equal(
element.style.backgroundImage,
'url("/accounts/foo%40gmail.com/avatar?s=16")'
);
});
test('loads using name', async () => {
const accountWithName = {
name: 'John Doe',
avatars: defaultAvatars,
};
element = await fixture(
html`<gr-avatar .account=${accountWithName}></gr-avatar>`
);
assert.isTrue(isVisible(element));
assert.equal(
element.style.backgroundImage,
'url("/accounts/John%20Doe/avatar?s=16")'
);
});
test('loads using username', async () => {
const accountWithUsername = {
username: 'John_Doe',
avatars: defaultAvatars,
};
element = await fixture(
html`<gr-avatar .account=${accountWithUsername}></gr-avatar>`
);
assert.isTrue(isVisible(element));
assert.equal(
element.style.backgroundImage,
'url("/accounts/John_Doe/avatar?s=16")'
);
});
test('loads using custom URL from matching height', async () => {
const accountWithCustomAvatars = {
...createAccountWithId(123),
avatars: [
{
url: 'https://cdn.example.com/s12-p/photo.jpg',
height: 12,
width: 0,
},
{
url: 'https://cdn.example.com/s16-p/photo.jpg',
height: 16,
width: 0,
},
{
url: 'https://cdn.example.com/s100-p/photo.jpg',
height: 100,
width: 0,
},
],
};
element = await fixture(
html`<gr-avatar .account=${accountWithCustomAvatars}></gr-avatar>`
);
assert.isTrue(isVisible(element));
assert.equal(
element.style.backgroundImage,
'url("https://cdn.example.com/s16-p/photo.jpg")'
);
});
test('loads using normal URL when no custom URL sizes match', async () => {
const accountWithCustomAvatars = {
...createAccountWithId(123),
avatars: [
{
url: 'https://cdn.example.com/s95-p/photo.jpg',
height: 95,
width: 0,
},
],
};
element = await fixture(
html`<gr-avatar .account=${accountWithCustomAvatars}></gr-avatar>`
);
assert.isTrue(isVisible(element));
assert.equal(
element.style.backgroundImage,
'url("/accounts/123/avatar?s=16")'
);
});
});
});