diff options
Diffstat (limited to 'spec/frontend/packages_and_registries/settings/group/components/maven_settings_spec.js')
-rw-r--r-- | spec/frontend/packages_and_registries/settings/group/components/maven_settings_spec.js | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/spec/frontend/packages_and_registries/settings/group/components/maven_settings_spec.js b/spec/frontend/packages_and_registries/settings/group/components/maven_settings_spec.js new file mode 100644 index 00000000000..2433c50ff24 --- /dev/null +++ b/spec/frontend/packages_and_registries/settings/group/components/maven_settings_spec.js @@ -0,0 +1,153 @@ +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); + }); + }); +}); |