@gitlab/ui
Version:
GitLab UI Components
92 lines (67 loc) • 2.59 kB
JavaScript
import { shallowMount } from '@vue/test-utils';
import { avatarSizeOptions } from '../../../utils/constants';
import GlAvatar from './avatar.vue';
describe('GlAvatar', () => {
let wrapper;
const createWrapper = (props) => {
wrapper = shallowMount(GlAvatar, {
propsData: props,
});
};
describe('size property', () => {
it('uses default size if none is provided', () => {
createWrapper();
expect(wrapper.props('size')).toBe(avatarSizeOptions[1]);
});
describe('when number is passed', () => {
it.each([96, 64, 48, 32, 24, 16])('accepts size %s', (size) => {
createWrapper({ size });
expect(wrapper.props('size')).toBe(size);
});
it.each([12, 28, 36, 54, 98])('displays an error for size %s', (size) => {
createWrapper({ size });
expect(wrapper).toHaveLoggedVueErrors();
});
it('adds correct CSS class to avatar', () => {
createWrapper({ size: 16 });
expect(wrapper.classes()).toContain('gl-avatar-s16');
});
});
describe('when object is passed', () => {
it('displays error if any of the sizes are invalid', () => {
createWrapper({ size: { default: 16, md: 32, lg: 65 } });
expect(wrapper).toHaveLoggedVueErrors();
});
it('adds correct CSS classes to avatar', () => {
createWrapper({ size: { default: 16, md: 32, lg: 64 } });
expect(wrapper.classes()).toContain(
'gl-avatar-s16',
'gl-md-avatar-s32',
'gl-lg-avatar-s64'
);
});
});
});
describe('fallbackOnError property', () => {
const findImage = () => wrapper.find('img');
beforeEach(() => {
createWrapper({ fallbackOnError: true, src: 'someproject.jpg' });
});
it('shows fallback identicon when image fails to load', async () => {
await findImage().trigger('error');
expect(findImage().exists()).toBe(false);
expect(wrapper.find('.gl-avatar-identicon').exists()).toBe(true);
});
it('emits load-error event when image fails to load', async () => {
await findImage().trigger('error');
expect(wrapper.emitted('load-error')).toHaveLength(1);
});
it('allows changing the source when initially provided image fails to load', async () => {
await findImage().trigger('error');
expect(findImage().exists()).toBe(false);
await wrapper.setProps({ src: 'foo.jpg' });
expect(findImage().exists()).toBe(true);
expect(wrapper.find('.gl-avatar-identicon').exists()).toBe(false);
});
});
});