diff options
Diffstat (limited to 'spec/frontend/alerts_settings/components/alerts_settings_wrapper_spec.js')
-rw-r--r-- | spec/frontend/alerts_settings/components/alerts_settings_wrapper_spec.js | 120 |
1 files changed, 75 insertions, 45 deletions
diff --git a/spec/frontend/alerts_settings/components/alerts_settings_wrapper_spec.js b/spec/frontend/alerts_settings/components/alerts_settings_wrapper_spec.js index 77fac6dd022..dd8ce838dfd 100644 --- a/spec/frontend/alerts_settings/components/alerts_settings_wrapper_spec.js +++ b/spec/frontend/alerts_settings/components/alerts_settings_wrapper_spec.js @@ -1,18 +1,18 @@ -import { GlLoadingIcon } from '@gitlab/ui'; +import { GlLoadingIcon, GlAlert } from '@gitlab/ui'; import { mount, createLocalVue } from '@vue/test-utils'; import AxiosMockAdapter from 'axios-mock-adapter'; +import { nextTick } from 'vue'; import VueApollo from 'vue-apollo'; import createHttpIntegrationMutation from 'ee_else_ce/alerts_settings/graphql/mutations/create_http_integration.mutation.graphql'; import updateHttpIntegrationMutation from 'ee_else_ce/alerts_settings/graphql/mutations/update_http_integration.mutation.graphql'; import createMockApollo from 'helpers/mock_apollo_helper'; import { useMockIntersectionObserver } from 'helpers/mock_dom_observer'; +import { extendedWrapper } from 'helpers/vue_test_utils_helper'; import waitForPromises from 'helpers/wait_for_promises'; import IntegrationsList from '~/alerts_settings/components/alerts_integrations_list.vue'; import AlertsSettingsForm from '~/alerts_settings/components/alerts_settings_form.vue'; -import AlertsSettingsWrapper, { - i18n, -} from '~/alerts_settings/components/alerts_settings_wrapper.vue'; -import { typeSet } from '~/alerts_settings/constants'; +import AlertsSettingsWrapper from '~/alerts_settings/components/alerts_settings_wrapper.vue'; +import { typeSet, i18n } from '~/alerts_settings/constants'; import createPrometheusIntegrationMutation from '~/alerts_settings/graphql/mutations/create_prometheus_integration.mutation.graphql'; import destroyHttpIntegrationMutation from '~/alerts_settings/graphql/mutations/destroy_http_integration.mutation.graphql'; import resetHttpTokenMutation from '~/alerts_settings/graphql/mutations/reset_http_token.mutation.graphql'; @@ -27,10 +27,12 @@ import { RESET_INTEGRATION_TOKEN_ERROR, UPDATE_INTEGRATION_ERROR, INTEGRATION_PAYLOAD_TEST_ERROR, + INTEGRATION_INACTIVE_PAYLOAD_TEST_ERROR, DELETE_INTEGRATION_ERROR, } from '~/alerts_settings/utils/error_messages'; import createFlash, { FLASH_TYPES } from '~/flash'; import axios from '~/lib/utils/axios_utils'; +import httpStatusCodes from '~/lib/utils/http_status'; import { createHttpVariables, updateHttpVariables, @@ -81,8 +83,9 @@ describe('AlertsSettingsWrapper', () => { const findLoader = () => wrapper.findComponent(IntegrationsList).findComponent(GlLoadingIcon); const findIntegrationsList = () => wrapper.findComponent(IntegrationsList); const findIntegrations = () => wrapper.find(IntegrationsList).findAll('table tbody tr'); - const findAddIntegrationBtn = () => wrapper.find('[data-testid="add-integration-btn"]'); + const findAddIntegrationBtn = () => wrapper.findByTestId('add-integration-btn'); const findAlertsSettingsForm = () => wrapper.findComponent(AlertsSettingsForm); + const findAlert = () => wrapper.findComponent(GlAlert); async function destroyHttpIntegration(localWrapper) { await jest.runOnlyPendingTimers(); @@ -94,32 +97,34 @@ describe('AlertsSettingsWrapper', () => { } async function awaitApolloDomMock() { - await wrapper.vm.$nextTick(); // kick off the DOM update + await nextTick(); // kick off the DOM update await jest.runOnlyPendingTimers(); // kick off the mocked GQL stuff (promises) - await wrapper.vm.$nextTick(); // kick off the DOM update for flash + await nextTick(); // kick off the DOM update for flash } const createComponent = ({ data = {}, provide = {}, loading = false } = {}) => { - wrapper = mount(AlertsSettingsWrapper, { - data() { - return { ...data }; - }, - provide: { - ...defaultAlertSettingsConfig, - ...provide, - }, - mocks: { - $apollo: { - mutate: jest.fn(), - query: jest.fn(), - queries: { - integrations: { - loading, + wrapper = extendedWrapper( + mount(AlertsSettingsWrapper, { + data() { + return { ...data }; + }, + provide: { + ...defaultAlertSettingsConfig, + ...provide, + }, + mocks: { + $apollo: { + mutate: jest.fn(), + query: jest.fn(), + queries: { + integrations: { + loading, + }, }, }, }, - }, - }); + }), + ); }; function createComponentWithApollo({ @@ -200,20 +205,29 @@ describe('AlertsSettingsWrapper', () => { loading: false, }); }); - it('calls `$apollo.mutate` with `createHttpIntegrationMutation`', () => { - jest.spyOn(wrapper.vm.$apollo, 'mutate').mockResolvedValue({ - data: { createHttpIntegrationMutation: { integration: { id: '1' } } }, + + describe('Create', () => { + beforeEach(() => { + jest.spyOn(wrapper.vm.$apollo, 'mutate').mockResolvedValue({ + data: { httpIntegrationCreate: { integration: { id: '1' }, errors: [] } }, + }); + findAlertsSettingsForm().vm.$emit('create-new-integration', { + type: typeSet.http, + variables: createHttpVariables, + }); }); - findAlertsSettingsForm().vm.$emit('create-new-integration', { - type: typeSet.http, - variables: createHttpVariables, + + it('calls `$apollo.mutate` with `createHttpIntegrationMutation`', () => { + expect(wrapper.vm.$apollo.mutate).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$apollo.mutate).toHaveBeenCalledWith({ + mutation: createHttpIntegrationMutation, + update: expect.anything(), + variables: createHttpVariables, + }); }); - expect(wrapper.vm.$apollo.mutate).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$apollo.mutate).toHaveBeenCalledWith({ - mutation: createHttpIntegrationMutation, - update: expect.anything(), - variables: createHttpVariables, + it('shows success alert', () => { + expect(findAlert().exists()).toBe(true); }); }); @@ -334,13 +348,29 @@ describe('AlertsSettingsWrapper', () => { expect(createFlash).toHaveBeenCalledWith({ message: UPDATE_INTEGRATION_ERROR }); }); - it('shows an error alert when integration test payload fails ', async () => { - const mock = new AxiosMockAdapter(axios); - mock.onPost(/(.*)/).replyOnce(403); - return wrapper.vm.testAlertPayload({ endpoint: '', data: '', token: '' }).then(() => { + describe('Test alert failure', () => { + let mock; + beforeEach(() => { + mock = new AxiosMockAdapter(axios); + }); + afterEach(() => { + mock.restore(); + }); + + it('shows an error alert when integration test payload is invalid ', async () => { + mock.onPost(/(.*)/).replyOnce(httpStatusCodes.UNPROCESSABLE_ENTITY); + await wrapper.vm.testAlertPayload({ endpoint: '', data: '', token: '' }); expect(createFlash).toHaveBeenCalledWith({ message: INTEGRATION_PAYLOAD_TEST_ERROR }); expect(createFlash).toHaveBeenCalledTimes(1); - mock.restore(); + }); + + it('shows an error alert when integration is not activated ', async () => { + mock.onPost(/(.*)/).replyOnce(httpStatusCodes.FORBIDDEN); + await wrapper.vm.testAlertPayload({ endpoint: '', data: '', token: '' }); + expect(createFlash).toHaveBeenCalledWith({ + message: INTEGRATION_INACTIVE_PAYLOAD_TEST_ERROR, + }); + expect(createFlash).toHaveBeenCalledTimes(1); }); }); @@ -354,7 +384,7 @@ describe('AlertsSettingsWrapper', () => { loading: false, }); - jest.spyOn(wrapper.vm.$apollo, 'mutate'); + jest.spyOn(wrapper.vm.$apollo, 'mutate').mockResolvedValueOnce({}); findIntegrationsList().vm.$emit('edit-integration', updateHttpVariables); expect(wrapper.vm.$apollo.mutate).toHaveBeenCalledWith({ mutation: updateCurrentHttpIntegrationMutation, @@ -372,7 +402,7 @@ describe('AlertsSettingsWrapper', () => { loading: false, }); - jest.spyOn(wrapper.vm.$apollo, 'mutate'); + jest.spyOn(wrapper.vm.$apollo, 'mutate').mockResolvedValue(); findIntegrationsList().vm.$emit('edit-integration', updatePrometheusVariables); expect(wrapper.vm.$apollo.mutate).toHaveBeenCalledWith({ mutation: updateCurrentPrometheusIntegrationMutation, @@ -414,7 +444,7 @@ describe('AlertsSettingsWrapper', () => { createComponentWithApollo(); await jest.runOnlyPendingTimers(); - await wrapper.vm.$nextTick(); + await nextTick(); expect(findIntegrations()).toHaveLength(4); }); @@ -426,7 +456,7 @@ describe('AlertsSettingsWrapper', () => { expect(destroyIntegrationHandler).toHaveBeenCalled(); - await wrapper.vm.$nextTick(); + await nextTick(); expect(findIntegrations()).toHaveLength(3); }); |