diff options
Diffstat (limited to 'spec/frontend/packages_and_registries/settings/group/components/package_settings_spec.js')
-rw-r--r-- | spec/frontend/packages_and_registries/settings/group/components/package_settings_spec.js | 115 |
1 files changed, 79 insertions, 36 deletions
diff --git a/spec/frontend/packages_and_registries/settings/group/components/package_settings_spec.js b/spec/frontend/packages_and_registries/settings/group/components/package_settings_spec.js index 274930ce668..13eba39ec8c 100644 --- a/spec/frontend/packages_and_registries/settings/group/components/package_settings_spec.js +++ b/spec/frontend/packages_and_registries/settings/group/components/package_settings_spec.js @@ -1,13 +1,13 @@ import Vue, { nextTick } from 'vue'; +import { GlToggle } from '@gitlab/ui'; import VueApollo from 'vue-apollo'; -import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; +import { mountExtended, shallowMountExtended } from 'helpers/vue_test_utils_helper'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; -import DuplicatesSettings from '~/packages_and_registries/settings/group/components/duplicates_settings.vue'; -import GenericSettings from '~/packages_and_registries/settings/group/components/generic_settings.vue'; +import ExceptionsInput from '~/packages_and_registries/settings/group/components/exceptions_input.vue'; import component from '~/packages_and_registries/settings/group/components/packages_settings.vue'; -import MavenSettings from '~/packages_and_registries/settings/group/components/maven_settings.vue'; import { + DUPLICATES_TOGGLE_LABEL, PACKAGE_SETTINGS_HEADER, PACKAGE_SETTINGS_DESCRIPTION, } from '~/packages_and_registries/settings/group/constants'; @@ -35,6 +35,7 @@ describe('Packages Settings', () => { }; const mountComponent = ({ + mountFn = shallowMountExtended, mutationResolver = jest.fn().mockResolvedValue(groupPackageSettingsMutationMock()), } = {}) => { Vue.use(VueApollo); @@ -43,7 +44,7 @@ describe('Packages Settings', () => { apolloProvider = createMockApollo(requestHandlers); - wrapper = shallowMountExtended(component, { + wrapper = mountFn(component, { apolloProvider, provide: defaultProvide, propsData: { @@ -51,8 +52,6 @@ describe('Packages Settings', () => { }, stubs: { SettingsBlock, - MavenSettings, - GenericSettings, }, }); }; @@ -63,11 +62,15 @@ describe('Packages Settings', () => { const findSettingsBlock = () => wrapper.findComponent(SettingsBlock); const findDescription = () => wrapper.findByTestId('description'); - const findMavenSettings = () => wrapper.findComponent(MavenSettings); - const findMavenDuplicatedSettings = () => findMavenSettings().findComponent(DuplicatesSettings); - const findGenericSettings = () => wrapper.findComponent(GenericSettings); - const findGenericDuplicatedSettings = () => - findGenericSettings().findComponent(DuplicatesSettings); + const findMavenSettings = () => wrapper.findByTestId('maven-settings'); + const findGenericSettings = () => wrapper.findByTestId('generic-settings'); + + const findMavenDuplicatedSettingsToggle = () => findMavenSettings().findComponent(GlToggle); + const findGenericDuplicatedSettingsToggle = () => findGenericSettings().findComponent(GlToggle); + const findMavenDuplicatedSettingsExceptionsInput = () => + findMavenSettings().findComponent(ExceptionsInput); + const findGenericDuplicatedSettingsExceptionsInput = () => + findGenericSettings().findComponent(ExceptionsInput); const fillApolloCache = () => { apolloProvider.defaultClient.cache.writeQuery({ @@ -80,7 +83,7 @@ describe('Packages Settings', () => { }; const emitMavenSettingsUpdate = (override) => { - findMavenDuplicatedSettings().vm.$emit('update', { + findGenericDuplicatedSettingsExceptionsInput().vm.$emit('update', { mavenDuplicateExceptionRegex: ')', ...override, }); @@ -106,27 +109,46 @@ describe('Packages Settings', () => { describe('maven settings', () => { it('exists', () => { - mountComponent(); + mountComponent({ mountFn: mountExtended }); + + expect(findMavenSettings().find('td').text()).toBe('Maven'); + }); + + it('renders toggle', () => { + mountComponent({ mountFn: mountExtended }); - expect(findMavenSettings().exists()).toBe(true); + const { mavenDuplicatesAllowed } = packageSettings(); + + expect(findMavenDuplicatedSettingsToggle().exists()).toBe(true); + + expect(findMavenDuplicatedSettingsToggle().props()).toMatchObject({ + label: DUPLICATES_TOGGLE_LABEL, + value: mavenDuplicatesAllowed, + disabled: false, + labelPosition: 'hidden', + }); }); - it('assigns duplication allowness and exception props', async () => { - mountComponent(); + it('renders ExceptionsInput and assigns duplication allowness and exception props', () => { + mountComponent({ mountFn: mountExtended }); const { mavenDuplicatesAllowed, mavenDuplicateExceptionRegex } = packageSettings(); - expect(findMavenDuplicatedSettings().props()).toMatchObject({ + expect(findMavenDuplicatedSettingsExceptionsInput().exists()).toBe(true); + + expect(findMavenDuplicatedSettingsExceptionsInput().props()).toMatchObject({ duplicatesAllowed: mavenDuplicatesAllowed, duplicateExceptionRegex: mavenDuplicateExceptionRegex, duplicateExceptionRegexError: '', loading: false, + name: 'mavenDuplicateExceptionRegex', + id: 'maven-duplicated-settings-regex-input', }); }); it('on update event calls the mutation', () => { const mutationResolver = jest.fn().mockResolvedValue(groupPackageSettingsMutationMock()); - mountComponent({ mutationResolver }); + mountComponent({ mountFn: mountExtended, mutationResolver }); fillApolloCache(); @@ -140,31 +162,47 @@ describe('Packages Settings', () => { describe('generic settings', () => { it('exists', () => { - mountComponent(); + mountComponent({ mountFn: mountExtended }); - expect(findGenericSettings().exists()).toBe(true); + expect(findGenericSettings().find('td').text()).toBe('Generic'); }); - it('assigns duplication allowness and exception props', async () => { - mountComponent(); + it('renders toggle', () => { + mountComponent({ mountFn: mountExtended }); + + const { genericDuplicatesAllowed } = packageSettings(); + + expect(findGenericDuplicatedSettingsToggle().exists()).toBe(true); + expect(findGenericDuplicatedSettingsToggle().props()).toMatchObject({ + label: DUPLICATES_TOGGLE_LABEL, + value: genericDuplicatesAllowed, + disabled: false, + labelPosition: 'hidden', + }); + }); + + it('renders ExceptionsInput and assigns duplication allowness and exception props', async () => { + mountComponent({ mountFn: mountExtended }); const { genericDuplicatesAllowed, genericDuplicateExceptionRegex } = packageSettings(); - expect(findGenericDuplicatedSettings().props()).toMatchObject({ + expect(findGenericDuplicatedSettingsExceptionsInput().props()).toMatchObject({ duplicatesAllowed: genericDuplicatesAllowed, duplicateExceptionRegex: genericDuplicateExceptionRegex, duplicateExceptionRegexError: '', loading: false, + name: 'genericDuplicateExceptionRegex', + id: 'generic-duplicated-settings-regex-input', }); }); it('on update event calls the mutation', async () => { const mutationResolver = jest.fn().mockResolvedValue(groupPackageSettingsMutationMock()); - mountComponent({ mutationResolver }); + mountComponent({ mountFn: mountExtended, mutationResolver }); fillApolloCache(); - findMavenDuplicatedSettings().vm.$emit('update', { + findGenericDuplicatedSettingsExceptionsInput().vm.$emit('update', { genericDuplicateExceptionRegex: ')', }); @@ -176,9 +214,11 @@ describe('Packages Settings', () => { describe('settings update', () => { describe('success state', () => { - it('emits a success event', async () => { - mountComponent(); + beforeEach(() => { + mountComponent({ mountFn: mountExtended }); + }); + it('emits a success event', async () => { fillApolloCache(); emitMavenSettingsUpdate(); @@ -189,11 +229,12 @@ describe('Packages Settings', () => { it('has an optimistic response', () => { const mavenDuplicateExceptionRegex = 'latest[main]something'; - mountComponent(); fillApolloCache(); - expect(findMavenDuplicatedSettings().props('duplicateExceptionRegex')).toBe(''); + expect( + findGenericDuplicatedSettingsExceptionsInput().props('duplicateExceptionRegex'), + ).toBe(''); emitMavenSettingsUpdate({ mavenDuplicateExceptionRegex }); @@ -209,7 +250,7 @@ describe('Packages Settings', () => { // note this is a complex test that covers all the path around errors that are shown in the form // it's one single it case, due to the expensive preparation and execution const mutationResolver = jest.fn().mockResolvedValue(groupPackageSettingsMutationErrorMock); - mountComponent({ mutationResolver }); + mountComponent({ mountFn: mountExtended, mutationResolver }); fillApolloCache(); @@ -218,9 +259,9 @@ describe('Packages Settings', () => { await waitForPromises(); // errors are bound to the component - expect(findMavenDuplicatedSettings().props('duplicateExceptionRegexError')).toBe( - groupPackageSettingsMutationErrorMock.errors[0].extensions.problems[0].message, - ); + expect( + findMavenDuplicatedSettingsExceptionsInput().props('duplicateExceptionRegexError'), + ).toBe(groupPackageSettingsMutationErrorMock.errors[0].extensions.problems[0].message); // general error message is shown @@ -231,7 +272,9 @@ describe('Packages Settings', () => { await nextTick(); // errors are reset on mutation call - expect(findMavenDuplicatedSettings().props('duplicateExceptionRegexError')).toBe(''); + expect( + findMavenDuplicatedSettingsExceptionsInput().props('duplicateExceptionRegexError'), + ).toBe(''); }); it.each` @@ -239,7 +282,7 @@ describe('Packages Settings', () => { ${'local'} | ${jest.fn().mockResolvedValue(groupPackageSettingsMutationMock({ errors: ['foo'] }))} ${'network'} | ${jest.fn().mockRejectedValue()} `('mutation payload with $type error', async ({ mutationResolver }) => { - mountComponent({ mutationResolver }); + mountComponent({ mountFn: mountExtended, mutationResolver }); fillApolloCache(); emitMavenSettingsUpdate(); |