diff options
Diffstat (limited to 'spec/frontend/environments/environment_actions_spec.js')
-rw-r--r-- | spec/frontend/environments/environment_actions_spec.js | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/spec/frontend/environments/environment_actions_spec.js b/spec/frontend/environments/environment_actions_spec.js index db78a6b0cdd..1b68a692db8 100644 --- a/spec/frontend/environments/environment_actions_spec.js +++ b/spec/frontend/environments/environment_actions_spec.js @@ -1,9 +1,13 @@ import { GlDropdown, GlDropdownItem, GlLoadingIcon, GlIcon } from '@gitlab/ui'; import { shallowMount, mount } from '@vue/test-utils'; +import Vue from 'vue'; +import VueApollo from 'vue-apollo'; import { TEST_HOST } from 'helpers/test_constants'; import { createMockDirective, getBinding } from 'helpers/vue_mock_directive'; import EnvironmentActions from '~/environments/components/environment_actions.vue'; import eventHub from '~/environments/event_hub'; +import actionMutation from '~/environments/graphql/mutations/action.mutation.graphql'; +import createMockApollo from 'helpers/mock_apollo_helper'; const scheduledJobAction = { name: 'scheduled action', @@ -25,12 +29,13 @@ describe('EnvironmentActions Component', () => { const findEnvironmentActionsButton = () => wrapper.find('[data-testid="environment-actions-button"]'); - function createComponent(props, { mountFn = shallowMount } = {}) { + function createComponent(props, { mountFn = shallowMount, options = {} } = {}) { wrapper = mountFn(EnvironmentActions, { propsData: { actions: [], ...props }, directives: { GlTooltip: createMockDirective(), }, + ...options, }); } @@ -150,4 +155,32 @@ describe('EnvironmentActions Component', () => { expect(findDropdownItem(expiredJobAction).text()).toContain('00:00:00'); }); }); + + describe('graphql', () => { + Vue.use(VueApollo); + + const action = { + name: 'bar', + play_path: 'https://gitlab.com/play', + }; + + let mockApollo; + + beforeEach(() => { + mockApollo = createMockApollo(); + createComponent( + { actions: [action], graphql: true }, + { options: { apolloProvider: mockApollo } }, + ); + }); + + it('should trigger a graphql mutation on click', () => { + jest.spyOn(mockApollo.defaultClient, 'mutate'); + findDropdownItem(action).vm.$emit('click'); + expect(mockApollo.defaultClient.mutate).toHaveBeenCalledWith({ + mutation: actionMutation, + variables: { action }, + }); + }); + }); }); |