119 lines
4.4 KiB
JavaScript
119 lines
4.4 KiB
JavaScript
import { GlLink, GlSprintf } from '@gitlab/ui';
|
|
import { shallowMount } from '@vue/test-utils';
|
|
import component from '~/packages/details/components/additional_metadata.vue';
|
|
import DetailsRow from '~/vue_shared/components/registry/details_row.vue';
|
|
|
|
import { mavenPackage, conanPackage, nugetPackage, npmPackage } from '../../mock_data';
|
|
|
|
describe('Package Additional Metadata', () => {
|
|
let wrapper;
|
|
const defaultProps = {
|
|
packageEntity: { ...mavenPackage },
|
|
};
|
|
|
|
const mountComponent = (props) => {
|
|
wrapper = shallowMount(component, {
|
|
propsData: { ...defaultProps, ...props },
|
|
stubs: {
|
|
DetailsRow,
|
|
GlSprintf,
|
|
},
|
|
});
|
|
};
|
|
|
|
afterEach(() => {
|
|
wrapper.destroy();
|
|
wrapper = null;
|
|
});
|
|
|
|
const findTitle = () => wrapper.find('[data-testid="title"]');
|
|
const findMainArea = () => wrapper.find('[data-testid="main"]');
|
|
const findNugetSource = () => wrapper.find('[data-testid="nuget-source"]');
|
|
const findNugetLicense = () => wrapper.find('[data-testid="nuget-license"]');
|
|
const findConanRecipe = () => wrapper.find('[data-testid="conan-recipe"]');
|
|
const findMavenApp = () => wrapper.find('[data-testid="maven-app"]');
|
|
const findMavenGroup = () => wrapper.find('[data-testid="maven-group"]');
|
|
const findElementLink = (container) => container.find(GlLink);
|
|
|
|
it('has the correct title', () => {
|
|
mountComponent();
|
|
|
|
const title = findTitle();
|
|
|
|
expect(title.exists()).toBe(true);
|
|
expect(title.text()).toBe('Additional Metadata');
|
|
});
|
|
|
|
describe.each`
|
|
packageEntity | visible | metadata
|
|
${mavenPackage} | ${true} | ${'maven_metadatum'}
|
|
${conanPackage} | ${true} | ${'conan_metadatum'}
|
|
${nugetPackage} | ${true} | ${'nuget_metadatum'}
|
|
${npmPackage} | ${false} | ${null}
|
|
`('Component visibility', ({ packageEntity, visible, metadata }) => {
|
|
it(`Is ${visible} that the component markup is visible when the package is ${packageEntity.package_type}`, () => {
|
|
mountComponent({ packageEntity });
|
|
|
|
expect(findTitle().exists()).toBe(visible);
|
|
expect(findMainArea().exists()).toBe(visible);
|
|
});
|
|
|
|
it(`The component is hidden if ${metadata} is missing`, () => {
|
|
mountComponent({ packageEntity: { ...packageEntity, [metadata]: null } });
|
|
|
|
expect(findTitle().exists()).toBe(false);
|
|
expect(findMainArea().exists()).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('nuget metadata', () => {
|
|
beforeEach(() => {
|
|
mountComponent({ packageEntity: nugetPackage });
|
|
});
|
|
|
|
it.each`
|
|
name | finderFunction | text | link | icon
|
|
${'source'} | ${findNugetSource} | ${'Source project located at project-foo-url'} | ${'project_url'} | ${'project'}
|
|
${'license'} | ${findNugetLicense} | ${'License information located at license-foo-url'} | ${'license_url'} | ${'license'}
|
|
`('$name element', ({ finderFunction, text, link, icon }) => {
|
|
const element = finderFunction();
|
|
expect(element.exists()).toBe(true);
|
|
expect(element.text()).toBe(text);
|
|
expect(element.props('icon')).toBe(icon);
|
|
expect(findElementLink(element).attributes('href')).toBe(nugetPackage.nuget_metadatum[link]);
|
|
});
|
|
});
|
|
|
|
describe('conan metadata', () => {
|
|
beforeEach(() => {
|
|
mountComponent({ packageEntity: conanPackage });
|
|
});
|
|
|
|
it.each`
|
|
name | finderFunction | text | icon
|
|
${'recipe'} | ${findConanRecipe} | ${'Recipe: conan-package/1.0.0@conan+conan-package/stable'} | ${'information-o'}
|
|
`('$name element', ({ finderFunction, text, icon }) => {
|
|
const element = finderFunction();
|
|
expect(element.exists()).toBe(true);
|
|
expect(element.text()).toBe(text);
|
|
expect(element.props('icon')).toBe(icon);
|
|
});
|
|
});
|
|
|
|
describe('maven metadata', () => {
|
|
beforeEach(() => {
|
|
mountComponent();
|
|
});
|
|
|
|
it.each`
|
|
name | finderFunction | text | icon
|
|
${'app'} | ${findMavenApp} | ${'App name: test-app'} | ${'information-o'}
|
|
${'group'} | ${findMavenGroup} | ${'App group: com.test.app'} | ${'information-o'}
|
|
`('$name element', ({ finderFunction, text, icon }) => {
|
|
const element = finderFunction();
|
|
expect(element.exists()).toBe(true);
|
|
expect(element.text()).toBe(text);
|
|
expect(element.props('icon')).toBe(icon);
|
|
});
|
|
});
|
|
});
|