import React from 'react';
import {mount} from 'sentry-test/enzyme';
import Avatar from 'app/components/avatar';
jest.mock('app/stores/configStore', () => {
return {
getConfig: () => ({
gravatarBaseUrl: 'gravatarBaseUrl',
}),
};
});
describe('Avatar', function() {
const USER = {
id: '1',
name: 'Jane Doe',
email: 'janedoe@example.com',
};
describe('render()', function() {
it('has `avatar` className', function() {
const user = Object.assign({}, USER, {
avatar: {
avatarType: 'gravatar',
avatarUuid: '2d641b5d-8c74-44de-9cb6-fbd54701b35e',
},
});
const avatar = mount();
expect(avatar.find('span.avatar')).toHaveLength(1);
});
it('should show a gravatar when avatar type is gravatar', async function() {
const user = Object.assign({}, USER, {
avatar: {
avatarType: 'gravatar',
avatarUuid: '2d641b5d-8c74-44de-9cb6-fbd54701b35e',
},
});
const avatar = mount();
expect(avatar.find('BaseAvatar').prop('type')).toBe('gravatar');
// Need update because Gravatar async imports a library
await tick();
avatar.update();
expect(avatar.find('BaseAvatar Gravatar Image').prop('src')).toMatch(
'gravatarBaseUrl/avatar/'
);
});
it('should show an upload when avatar type is upload', function() {
const user = Object.assign({}, USER, {
avatar: {
avatarType: 'upload',
avatarUuid: '2d641b5d-8c74-44de-9cb6-fbd54701b35e',
},
});
const avatar = mount();
expect(avatar.find('BaseAvatar').prop('type')).toBe('upload');
expect(avatar.find('BaseAvatar').prop('uploadId')).toBe(
'2d641b5d-8c74-44de-9cb6-fbd54701b35e'
);
expect(avatar.find('BaseAvatar img').prop('src')).toMatch(
'/avatar/2d641b5d-8c74-44de-9cb6-fbd54701b35e'
);
});
it('should show an upload with the correct size (static 120 size)', function() {
const user = Object.assign({}, USER, {
avatar: {
avatarType: 'upload',
avatarUuid: '2d641b5d-8c74-44de-9cb6-fbd54701b35e',
},
});
let avatar = mount();
expect(avatar.find('BaseAvatar img').prop('src')).toMatch(
'/avatar/2d641b5d-8c74-44de-9cb6-fbd54701b35e/?s=120'
);
avatar = mount();
expect(avatar.find('BaseAvatar img').prop('src')).toMatch(
'/avatar/2d641b5d-8c74-44de-9cb6-fbd54701b35e/?s=120'
);
avatar = mount();
expect(avatar.find('BaseAvatar img').prop('src')).toMatch(
'/avatar/2d641b5d-8c74-44de-9cb6-fbd54701b35e/?s=120'
);
avatar = mount();
expect(avatar.find('BaseAvatar img').prop('src')).toMatch(
'/avatar/2d641b5d-8c74-44de-9cb6-fbd54701b35e/?s=120'
);
});
it('should not show upload or gravatar when avatar type is letter', function() {
const user = Object.assign({}, USER, {
avatar: {
avatarType: 'letter_avatar',
avatarUuid: '2d641b5d-8c74-44de-9cb6-fbd54701b35e',
},
});
const avatar = mount();
expect(avatar.find('BaseAvatar').prop('type')).toBe('letter_avatar');
});
it('use letter avatar by default, when no avatar type is set and user has an email address', function() {
const avatar = mount();
expect(avatar.find('BaseAvatar').prop('type')).toBe('letter_avatar');
});
it('should show a gravatar when no avatar type is set and user has an email address', function() {
const avatar = mount();
expect(avatar.find('BaseAvatar').prop('type')).toBe('gravatar');
});
it('should not show a gravatar when no avatar type is set and user has no email address', function() {
const user = Object.assign({}, USER);
delete user.email;
const avatar = mount();
expect(avatar.find('BaseAvatar').prop('type')).toBe('letter_avatar');
});
it('can display a team Avatar', function() {
const team = TestStubs.Team({slug: 'test-team_test'});
const avatar = mount();
expect(avatar.find('LetterAvatar').prop('displayName')).toBe('test team test');
expect(avatar.find('LetterAvatar').prop('identifier')).toBe('test-team_test');
});
it('can display an organization Avatar', function() {
const organization = TestStubs.Organization({slug: 'test-organization'});
const avatar = mount();
expect(avatar.find('LetterAvatar').prop('displayName')).toBe('test organization');
expect(avatar.find('LetterAvatar').prop('identifier')).toBe('test-organization');
});
it('displays platform list icons for project Avatar', function() {
const project = TestStubs.Project({
platforms: ['python', 'javascript'],
platform: 'java',
});
const avatar = mount();
expect(avatar.find('PlatformList').prop('platforms')).toEqual(['java']);
});
it('displays a fallback platform list for project Avatar using the `platform` specified during onboarding', function() {
const project = TestStubs.Project({platform: 'java'});
const avatar = mount();
expect(avatar.find('PlatformList').prop('platforms')).toEqual(['java']);
});
it('uses onboarding project when platforms is an empty array', function() {
const project = TestStubs.Project({platforms: [], platform: 'java'});
const avatar = mount();
expect(avatar.find('PlatformList').prop('platforms')).toEqual(['java']);
});
});
});