154 lines
4.3 KiB
JavaScript
154 lines
4.3 KiB
JavaScript
|
import { GlSprintf, GlToggle, GlFormGroup, GlFormInput } from '@gitlab/ui';
|
||
|
import { shallowMount } from '@vue/test-utils';
|
||
|
import component from '~/packages_and_registries/settings/group/components/maven_settings.vue';
|
||
|
|
||
|
import {
|
||
|
MAVEN_TITLE,
|
||
|
MAVEN_SETTINGS_SUBTITLE,
|
||
|
MAVEN_DUPLICATES_ALLOWED_DISABLED,
|
||
|
MAVEN_DUPLICATES_ALLOWED_ENABLED,
|
||
|
MAVEN_SETTING_EXCEPTION_TITLE,
|
||
|
MAVEN_SETTINGS_EXCEPTION_LEGEND,
|
||
|
} from '~/packages_and_registries/settings/group/constants';
|
||
|
|
||
|
describe('Maven Settings', () => {
|
||
|
let wrapper;
|
||
|
|
||
|
const defaultProps = {
|
||
|
mavenDuplicatesAllowed: false,
|
||
|
mavenDuplicateExceptionRegex: 'foo',
|
||
|
};
|
||
|
|
||
|
const mountComponent = (propsData = defaultProps) => {
|
||
|
wrapper = shallowMount(component, {
|
||
|
propsData,
|
||
|
stubs: {
|
||
|
GlSprintf,
|
||
|
},
|
||
|
});
|
||
|
};
|
||
|
|
||
|
afterEach(() => {
|
||
|
wrapper.destroy();
|
||
|
wrapper = null;
|
||
|
});
|
||
|
|
||
|
const findTitle = () => wrapper.find('h5');
|
||
|
const findSubTitle = () => wrapper.find('p');
|
||
|
const findToggle = () => wrapper.find(GlToggle);
|
||
|
const findToggleLabel = () => wrapper.find('[data-testid="toggle-label"');
|
||
|
|
||
|
const findInputGroup = () => wrapper.find(GlFormGroup);
|
||
|
const findInput = () => wrapper.find(GlFormInput);
|
||
|
|
||
|
it('has a title', () => {
|
||
|
mountComponent();
|
||
|
|
||
|
expect(findTitle().exists()).toBe(true);
|
||
|
expect(findTitle().text()).toBe(MAVEN_TITLE);
|
||
|
});
|
||
|
|
||
|
it('has a subtitle', () => {
|
||
|
mountComponent();
|
||
|
|
||
|
expect(findSubTitle().exists()).toBe(true);
|
||
|
expect(findSubTitle().text()).toBe(MAVEN_SETTINGS_SUBTITLE);
|
||
|
});
|
||
|
|
||
|
it('has a toggle', () => {
|
||
|
mountComponent();
|
||
|
|
||
|
expect(findToggle().exists()).toBe(true);
|
||
|
expect(findToggle().props('value')).toBe(defaultProps.mavenDuplicatesAllowed);
|
||
|
});
|
||
|
|
||
|
it('toggle emits an update event', () => {
|
||
|
mountComponent();
|
||
|
|
||
|
findToggle().vm.$emit('change', false);
|
||
|
|
||
|
expect(wrapper.emitted('update')).toEqual([[{ mavenDuplicatesAllowed: false }]]);
|
||
|
});
|
||
|
|
||
|
describe('when the duplicates are disabled', () => {
|
||
|
it('the toggle has the disabled message', () => {
|
||
|
mountComponent();
|
||
|
|
||
|
expect(findToggleLabel().exists()).toBe(true);
|
||
|
expect(findToggleLabel().text()).toMatchInterpolatedText(MAVEN_DUPLICATES_ALLOWED_DISABLED);
|
||
|
});
|
||
|
|
||
|
it('shows a form group with an input field', () => {
|
||
|
mountComponent();
|
||
|
|
||
|
expect(findInputGroup().exists()).toBe(true);
|
||
|
|
||
|
expect(findInputGroup().attributes()).toMatchObject({
|
||
|
'label-for': 'maven-duplicated-settings-regex-input',
|
||
|
label: MAVEN_SETTING_EXCEPTION_TITLE,
|
||
|
description: MAVEN_SETTINGS_EXCEPTION_LEGEND,
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('shows an input field', () => {
|
||
|
mountComponent();
|
||
|
|
||
|
expect(findInput().exists()).toBe(true);
|
||
|
|
||
|
expect(findInput().attributes()).toMatchObject({
|
||
|
id: 'maven-duplicated-settings-regex-input',
|
||
|
value: defaultProps.mavenDuplicateExceptionRegex,
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('input change event emits an update event', () => {
|
||
|
mountComponent();
|
||
|
|
||
|
findInput().vm.$emit('change', 'bar');
|
||
|
|
||
|
expect(wrapper.emitted('update')).toEqual([[{ mavenDuplicateExceptionRegex: 'bar' }]]);
|
||
|
});
|
||
|
|
||
|
describe('valid state', () => {
|
||
|
it('form group has correct props', () => {
|
||
|
mountComponent();
|
||
|
|
||
|
expect(findInputGroup().attributes()).toMatchObject({
|
||
|
state: 'true',
|
||
|
'invalid-feedback': '',
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('invalid state', () => {
|
||
|
it('form group has correct props', () => {
|
||
|
const propsWithError = {
|
||
|
...defaultProps,
|
||
|
mavenDuplicateExceptionRegexError: 'some error string',
|
||
|
};
|
||
|
|
||
|
mountComponent(propsWithError);
|
||
|
|
||
|
expect(findInputGroup().attributes()).toMatchObject({
|
||
|
'invalid-feedback': propsWithError.mavenDuplicateExceptionRegexError,
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('when the duplicates are enabled', () => {
|
||
|
it('has the correct toggle label', () => {
|
||
|
mountComponent({ ...defaultProps, mavenDuplicatesAllowed: true });
|
||
|
|
||
|
expect(findToggleLabel().exists()).toBe(true);
|
||
|
expect(findToggleLabel().text()).toMatchInterpolatedText(MAVEN_DUPLICATES_ALLOWED_ENABLED);
|
||
|
});
|
||
|
|
||
|
it('hides the form input group', () => {
|
||
|
mountComponent({ ...defaultProps, mavenDuplicatesAllowed: true });
|
||
|
|
||
|
expect(findInputGroup().exists()).toBe(false);
|
||
|
});
|
||
|
});
|
||
|
});
|