diff options
Diffstat (limited to 'spec/frontend/alerts_settings')
4 files changed, 3 insertions, 282 deletions
diff --git a/spec/frontend/alerts_settings/__snapshots__/alerts_settings_form_old_spec.js.snap b/spec/frontend/alerts_settings/__snapshots__/alerts_settings_form_old_spec.js.snap deleted file mode 100644 index 9306bf24baf..00000000000 --- a/spec/frontend/alerts_settings/__snapshots__/alerts_settings_form_old_spec.js.snap +++ /dev/null @@ -1,47 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`AlertsSettingsFormOld with default values renders the initial template 1`] = ` -"<gl-form-stub> - <h5 class=\\"gl-font-lg gl-my-5\\"></h5> - <!----> - <div data-testid=\\"alert-settings-description\\"> - <p> - <gl-sprintf-stub message=\\"You must provide this URL and authorization key to authorize an external service to send alerts to GitLab. You can provide this URL and key to multiple services. After configuring an external service, alerts from your service will display on the GitLab %{linkStart}Alerts%{linkEnd} page.\\"></gl-sprintf-stub> - </p> - <p> - <gl-sprintf-stub message=\\"Review your external service's documentation to learn where to provide this information to your external service, and the %{linkStart}GitLab documentation%{linkEnd} to learn more about configuring your endpoint.\\"></gl-sprintf-stub> - </p> - </div> - <gl-form-group-stub label-for=\\"integration-type\\" label=\\"Integration\\"> - <gl-form-select-stub id=\\"integration-type\\" options=\\"[object Object],[object Object],[object Object]\\" data-testid=\\"alert-settings-select\\" value=\\"HTTP\\"></gl-form-select-stub> <span class=\\"gl-text-gray-500\\"><gl-sprintf-stub message=\\"Learn more about our our upcoming %{linkStart}integrations%{linkEnd}\\"></gl-sprintf-stub></span> - </gl-form-group-stub> - <gl-form-group-stub label=\\"Active\\" label-for=\\"active\\"> - <toggle-button-stub id=\\"active\\"></toggle-button-stub> - </gl-form-group-stub> - <!----> - <gl-form-group-stub label=\\"Webhook URL\\" label-for=\\"url\\"> - <gl-form-input-group-stub value=\\"/alerts/notify.json\\" predefinedoptions=\\"[object Object]\\" id=\\"url\\" readonly=\\"\\"></gl-form-input-group-stub> <span class=\\"gl-text-gray-500\\"> - - </span> - </gl-form-group-stub> - <gl-form-group-stub label-for=\\"authorization-key\\"> - <gl-form-input-group-stub value=\\"\\" predefinedoptions=\\"[object Object]\\" id=\\"authorization-key\\" readonly=\\"\\" class=\\"gl-mb-2\\"></gl-form-input-group-stub> - <gl-button-stub category=\\"primary\\" variant=\\"default\\" size=\\"medium\\" icon=\\"\\" buttontextclasses=\\"\\" disabled=\\"true\\" class=\\"gl-mt-3\\" role=\\"button\\" tabindex=\\"0\\">Reset key</gl-button-stub> - <gl-modal-stub modalid=\\"tokenModal\\" titletag=\\"h4\\" modalclass=\\"\\" size=\\"md\\" title=\\"Reset key\\" ok-title=\\"Reset key\\" ok-variant=\\"danger\\"> - Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in. - </gl-modal-stub> - </gl-form-group-stub> - <gl-form-group-stub label=\\"Alert test payload\\" label-for=\\"alert-json\\"> - <gl-form-textarea-stub noresize=\\"true\\" id=\\"alert-json\\" disabled=\\"true\\" state=\\"true\\" placeholder=\\"Enter test alert JSON....\\" rows=\\"6\\" max-rows=\\"10\\"></gl-form-textarea-stub> - </gl-form-group-stub> - <gl-button-stub category=\\"primary\\" variant=\\"default\\" size=\\"medium\\" icon=\\"\\" buttontextclasses=\\"\\" disabled=\\"true\\">Test alert payload</gl-button-stub> - <div class=\\"footer-block row-content-block gl-display-flex gl-justify-content-space-between\\"> - <gl-button-stub category=\\"primary\\" variant=\\"success\\" size=\\"medium\\" icon=\\"\\" buttontextclasses=\\"\\" disabled=\\"true\\"> - Save changes - </gl-button-stub> - <gl-button-stub category=\\"primary\\" variant=\\"default\\" size=\\"medium\\" icon=\\"\\" buttontextclasses=\\"\\" disabled=\\"true\\"> - Cancel - </gl-button-stub> - </div> -</gl-form-stub>" -`; diff --git a/spec/frontend/alerts_settings/alerts_integrations_list_spec.js b/spec/frontend/alerts_settings/alerts_integrations_list_spec.js index 90bb38f0c2b..3a7392f64f7 100644 --- a/spec/frontend/alerts_settings/alerts_integrations_list_spec.js +++ b/spec/frontend/alerts_settings/alerts_integrations_list_spec.js @@ -35,9 +35,6 @@ describe('AlertIntegrationsList', () => { integrations: mockIntegrations, ...props, }, - provide: { - glFeatures: { httpIntegrationsList: true }, - }, stubs: { GlIcon: true, GlButton: true, diff --git a/spec/frontend/alerts_settings/alerts_settings_form_old_spec.js b/spec/frontend/alerts_settings/alerts_settings_form_old_spec.js deleted file mode 100644 index 3d0dfb44d63..00000000000 --- a/spec/frontend/alerts_settings/alerts_settings_form_old_spec.js +++ /dev/null @@ -1,204 +0,0 @@ -import { shallowMount } from '@vue/test-utils'; -import { GlModal, GlAlert } from '@gitlab/ui'; -import AlertsSettingsForm from '~/alerts_settings/components/alerts_settings_form_old.vue'; -import ToggleButton from '~/vue_shared/components/toggle_button.vue'; -import { i18n } from '~/alerts_settings/constants'; -import service from '~/alerts_settings/services'; -import { defaultAlertSettingsConfig } from './util'; - -jest.mock('~/alerts_settings/services'); - -describe('AlertsSettingsFormOld', () => { - let wrapper; - - const createComponent = ({ methods } = {}, data) => { - wrapper = shallowMount(AlertsSettingsForm, { - data() { - return { ...data }; - }, - provide: { - ...defaultAlertSettingsConfig, - }, - methods, - }); - }; - - const findSelect = () => wrapper.find('[data-testid="alert-settings-select"]'); - const findJsonInput = () => wrapper.find('#alert-json'); - const findUrl = () => wrapper.find('#url'); - const findAuthorizationKey = () => wrapper.find('#authorization-key'); - const findApiUrl = () => wrapper.find('#api-url'); - - beforeEach(() => { - setFixtures(` - <div> - <span class="js-service-active-status fa fa-circle" data-value="true"></span> - <span class="js-service-active-status fa fa-power-off" data-value="false"></span> - </div>`); - }); - - afterEach(() => { - if (wrapper) { - wrapper.destroy(); - wrapper = null; - } - }); - - describe('with default values', () => { - beforeEach(() => { - createComponent(); - }); - - it('renders the initial template', () => { - expect(wrapper.html()).toMatchSnapshot(); - }); - }); - - describe('reset key', () => { - it('triggers resetKey method', () => { - const resetKey = jest.fn(); - const methods = { resetKey }; - createComponent({ methods }); - - wrapper.find(GlModal).vm.$emit('ok'); - - expect(resetKey).toHaveBeenCalled(); - }); - - it('updates the authorization key on success', () => { - createComponent( - {}, - { - token: 'newToken', - }, - ); - - expect(findAuthorizationKey().attributes('value')).toBe('newToken'); - }); - - it('shows a alert message on error', () => { - service.updateGenericKey.mockRejectedValueOnce({}); - - createComponent(); - - return wrapper.vm.resetKey().then(() => { - expect(wrapper.find(GlAlert).exists()).toBe(true); - }); - }); - }); - - describe('activate toggle', () => { - it('triggers toggleActivated method', () => { - const toggleService = jest.fn(); - const methods = { toggleService }; - createComponent({ methods }); - - wrapper.find(ToggleButton).vm.$emit('change', true); - expect(toggleService).toHaveBeenCalled(); - }); - - describe('error is encountered', () => { - it('restores previous value', () => { - service.updateGenericKey.mockRejectedValueOnce({}); - createComponent(); - return wrapper.vm.resetKey().then(() => { - expect(wrapper.find(ToggleButton).props('value')).toBe(false); - }); - }); - }); - }); - - describe('prometheus is active', () => { - beforeEach(() => { - createComponent( - {}, - { - selectedIntegration: 'PROMETHEUS', - }, - ); - }); - - it('renders a valid "select"', () => { - expect(findSelect().exists()).toBe(true); - }); - - it('shows the API URL input', () => { - expect(findApiUrl().exists()).toBe(true); - }); - - it('shows the correct default API URL', () => { - expect(findUrl().attributes('value')).toBe(defaultAlertSettingsConfig.prometheus.url); - }); - }); - - describe('Opsgenie is active', () => { - beforeEach(() => { - createComponent( - {}, - { - selectedIntegration: 'OPSGENIE', - }, - ); - }); - - it('shows a input for the Opsgenie target URL', () => { - expect(findApiUrl().exists()).toBe(true); - }); - }); - - describe('trigger test alert', () => { - beforeEach(() => { - createComponent({}); - }); - - it('should enable the JSON input', () => { - expect(findJsonInput().exists()).toBe(true); - expect(findJsonInput().props('value')).toBe(null); - }); - - it('should validate JSON input', async () => { - createComponent(true, { - testAlertJson: '{ "value": "test" }', - }); - - findJsonInput().vm.$emit('change'); - - await wrapper.vm.$nextTick(); - - expect(findJsonInput().attributes('state')).toBe('true'); - }); - - describe('alert service is toggled', () => { - describe('error handling', () => { - const toggleService = true; - - it('should show generic error', async () => { - service.updateGenericActive.mockRejectedValueOnce({}); - - createComponent(); - - await wrapper.vm.toggleActivated(toggleService); - expect(wrapper.vm.active).toBe(false); - expect(wrapper.find(GlAlert).attributes('variant')).toBe('danger'); - expect(wrapper.find(GlAlert).text()).toBe(i18n.errorMsg); - }); - - it('should show first field specific error when available', async () => { - const err1 = "can't be blank"; - const err2 = 'is not a valid URL'; - const key = 'api_url'; - service.updateGenericActive.mockRejectedValueOnce({ - response: { data: { errors: { [key]: [err1, err2] } } }, - }); - - createComponent(); - - await wrapper.vm.toggleActivated(toggleService); - - expect(wrapper.find(GlAlert).text()).toContain(i18n.errorMsg); - expect(wrapper.find(GlAlert).text()).toContain(`${key} ${err1}`); - }); - }); - }); - }); -}); diff --git a/spec/frontend/alerts_settings/alerts_settings_wrapper_spec.js b/spec/frontend/alerts_settings/alerts_settings_wrapper_spec.js index 7384cf9a095..91fb85e3b3e 100644 --- a/spec/frontend/alerts_settings/alerts_settings_wrapper_spec.js +++ b/spec/frontend/alerts_settings/alerts_settings_wrapper_spec.js @@ -5,7 +5,6 @@ import waitForPromises from 'helpers/wait_for_promises'; import { GlLoadingIcon, GlAlert } from '@gitlab/ui'; import { useMockIntersectionObserver } from 'helpers/mock_dom_observer'; import AlertsSettingsWrapper from '~/alerts_settings/components/alerts_settings_wrapper.vue'; -import AlertsSettingsFormOld from '~/alerts_settings/components/alerts_settings_form_old.vue'; import AlertsSettingsFormNew from '~/alerts_settings/components/alerts_settings_form_new.vue'; import IntegrationsList from '~/alerts_settings/components/alerts_integrations_list.vue'; import getIntegrationsQuery from '~/alerts_settings/graphql/queries/get_integrations.query.graphql'; @@ -75,7 +74,6 @@ describe('AlertsSettingsWrapper', () => { }, provide: { ...defaultAlertSettingsConfig, - glFeatures: { httpIntegrationsList: false }, ...provide, }, mocks: { @@ -110,7 +108,6 @@ describe('AlertsSettingsWrapper', () => { apolloProvider: fakeApollo, provide: { ...defaultAlertSettingsConfig, - glFeatures: { httpIntegrationsList: true }, }, }); } @@ -122,27 +119,16 @@ describe('AlertsSettingsWrapper', () => { } }); - describe('with httpIntegrationsList feature flag disabled', () => { - it('renders data driven alerts integrations list and old form by default', () => { - createComponent(); - expect(wrapper.find(IntegrationsList).exists()).toBe(true); - expect(wrapper.find(AlertsSettingsFormOld).exists()).toBe(true); - expect(wrapper.find(AlertsSettingsFormNew).exists()).toBe(false); - }); - }); - - describe('with httpIntegrationsList feature flag enabled', () => { + describe('rendered via default permissions', () => { it('renders the GraphQL alerts integrations list and new form', () => { - createComponent({ provide: { glFeatures: { httpIntegrationsList: true } } }); + createComponent(); expect(wrapper.find(IntegrationsList).exists()).toBe(true); - expect(wrapper.find(AlertsSettingsFormOld).exists()).toBe(false); expect(wrapper.find(AlertsSettingsFormNew).exists()).toBe(true); }); it('uses a loading state inside the IntegrationsList table', () => { createComponent({ data: { integrations: {} }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: true, }); expect(wrapper.find(IntegrationsList).exists()).toBe(true); @@ -152,7 +138,6 @@ describe('AlertsSettingsWrapper', () => { it('renders the IntegrationsList table using the API data', () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); expect(findLoader().exists()).toBe(false); @@ -162,7 +147,6 @@ describe('AlertsSettingsWrapper', () => { it('calls `$apollo.mutate` with `createHttpIntegrationMutation`', () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); @@ -185,7 +169,6 @@ describe('AlertsSettingsWrapper', () => { it('calls `$apollo.mutate` with `updateHttpIntegrationMutation`', () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); @@ -206,7 +189,6 @@ describe('AlertsSettingsWrapper', () => { it('calls `$apollo.mutate` with `resetHttpTokenMutation`', () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); @@ -229,7 +211,6 @@ describe('AlertsSettingsWrapper', () => { it('calls `$apollo.mutate` with `createPrometheusIntegrationMutation`', () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); @@ -252,7 +233,6 @@ describe('AlertsSettingsWrapper', () => { it('calls `$apollo.mutate` with `updatePrometheusIntegrationMutation`', () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); @@ -273,7 +253,6 @@ describe('AlertsSettingsWrapper', () => { it('calls `$apollo.mutate` with `resetPrometheusTokenMutation`', () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); @@ -296,7 +275,6 @@ describe('AlertsSettingsWrapper', () => { it('shows an error alert when integration creation fails ', async () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); @@ -311,7 +289,6 @@ describe('AlertsSettingsWrapper', () => { it('shows an error alert when integration token reset fails ', async () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); @@ -326,7 +303,6 @@ describe('AlertsSettingsWrapper', () => { it('shows an error alert when integration update fails ', async () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); @@ -341,7 +317,6 @@ describe('AlertsSettingsWrapper', () => { it('shows an error alert when integration test payload fails ', async () => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true } }, loading: false, }); @@ -405,7 +380,7 @@ describe('AlertsSettingsWrapper', () => { it.each([true, false])('it shows/hides the alert when opsgenie is %s', active => { createComponent({ data: { integrations: { list: mockIntegrations }, currentIntegration: mockIntegrations[0] }, - provide: { glFeatures: { httpIntegrationsList: true }, opsgenie: { active } }, + provide: { opsgenie: { active } }, loading: false, }); |