107 lines
3.6 KiB
JavaScript
107 lines
3.6 KiB
JavaScript
import { shallowMount } from '@vue/test-utils';
|
|
import { GlLink, GlSprintf } from '@gitlab/ui';
|
|
import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';
|
|
import component from '~/packages/details/components/package_history.vue';
|
|
|
|
import { mavenPackage, mockPipelineInfo } from '../../mock_data';
|
|
|
|
describe('Package History', () => {
|
|
let wrapper;
|
|
const defaultProps = {
|
|
projectName: 'baz project',
|
|
packageEntity: { ...mavenPackage },
|
|
};
|
|
|
|
const mountComponent = props => {
|
|
wrapper = shallowMount(component, {
|
|
propsData: { ...defaultProps, ...props },
|
|
stubs: {
|
|
HistoryElement: '<div data-testid="history-element"><slot></slot></div>',
|
|
GlSprintf,
|
|
},
|
|
});
|
|
};
|
|
|
|
afterEach(() => {
|
|
wrapper.destroy();
|
|
wrapper = null;
|
|
});
|
|
|
|
const findHistoryElement = testId => wrapper.find(`[data-testid="${testId}"]`);
|
|
const findElementLink = container => container.find(GlLink);
|
|
const findElementTimeAgo = container => container.find(TimeAgoTooltip);
|
|
const findTitle = () => wrapper.find('[data-testid="title"]');
|
|
const findTimeline = () => wrapper.find('[data-testid="timeline"]');
|
|
|
|
it('has the correct title', () => {
|
|
mountComponent();
|
|
|
|
const title = findTitle();
|
|
|
|
expect(title.exists()).toBe(true);
|
|
expect(title.text()).toBe('History');
|
|
});
|
|
|
|
it('has a timeline container', () => {
|
|
mountComponent();
|
|
|
|
const title = findTimeline();
|
|
|
|
expect(title.exists()).toBe(true);
|
|
expect(title.classes()).toEqual(
|
|
expect.arrayContaining(['timeline', 'main-notes-list', 'notes']),
|
|
);
|
|
});
|
|
|
|
describe.each`
|
|
name | icon | text | timeAgoTooltip | link
|
|
${'created-on'} | ${'clock'} | ${'Test package version 1.0.0 was created'} | ${mavenPackage.created_at} | ${null}
|
|
${'updated-at'} | ${'pencil'} | ${'Test package version 1.0.0 was updated'} | ${mavenPackage.updated_at} | ${null}
|
|
${'commit'} | ${'commit'} | ${'Commit sha-baz on branch branch-name'} | ${null} | ${'../../commit/sha-baz'}
|
|
${'pipeline'} | ${'pipeline'} | ${'Pipeline #1 triggered by foo'} | ${mockPipelineInfo.created_at} | ${'../../pipelines/1'}
|
|
${'published'} | ${'package'} | ${'Published to the baz project Package Registry'} | ${mavenPackage.created_at} | ${null}
|
|
`('history element $name', ({ name, icon, text, timeAgoTooltip, link }) => {
|
|
let element;
|
|
|
|
beforeEach(() => {
|
|
mountComponent({ packageEntity: { ...mavenPackage, pipeline: mockPipelineInfo } });
|
|
element = findHistoryElement(name);
|
|
});
|
|
|
|
it('has the correct icon', () => {
|
|
expect(element.props('icon')).toBe(icon);
|
|
});
|
|
|
|
it('has the correct text', () => {
|
|
expect(element.text()).toBe(text);
|
|
});
|
|
|
|
it('time-ago tooltip', () => {
|
|
const timeAgo = findElementTimeAgo(element);
|
|
const exist = Boolean(timeAgoTooltip);
|
|
|
|
expect(timeAgo.exists()).toBe(exist);
|
|
if (exist) {
|
|
expect(timeAgo.props('time')).toBe(timeAgoTooltip);
|
|
}
|
|
});
|
|
|
|
it('link', () => {
|
|
const linkElement = findElementLink(element);
|
|
const exist = Boolean(link);
|
|
|
|
expect(linkElement.exists()).toBe(exist);
|
|
if (exist) {
|
|
expect(linkElement.attributes('href')).toBe(link);
|
|
}
|
|
});
|
|
});
|
|
|
|
describe('when pipelineInfo is missing', () => {
|
|
it.each(['commit', 'pipeline'])('%s history element is hidden', name => {
|
|
mountComponent();
|
|
expect(findHistoryElement(name).exists()).toBe(false);
|
|
});
|
|
});
|
|
});
|