debian-mirror-gitlab/spec/frontend/projects/settings_service_desk/components/service_desk_root_spec.js

165 lines
5.1 KiB
JavaScript
Raw Normal View History

2021-03-11 19:13:27 +05:30
import { GlAlert } from '@gitlab/ui';
import { shallowMount } from '@vue/test-utils';
2020-07-28 23:09:34 +05:30
import AxiosMockAdapter from 'axios-mock-adapter';
import waitForPromises from 'helpers/wait_for_promises';
import axios from '~/lib/utils/axios_utils';
import httpStatusCodes from '~/lib/utils/http_status';
2021-03-11 19:13:27 +05:30
import ServiceDeskRoot from '~/projects/settings_service_desk/components/service_desk_root.vue';
import ServiceDeskSetting from '~/projects/settings_service_desk/components/service_desk_setting.vue';
2020-07-28 23:09:34 +05:30
describe('ServiceDeskRoot', () => {
let axiosMock;
let wrapper;
let spy;
2021-03-11 19:13:27 +05:30
const provideData = {
customEmail: 'custom.email@example.com',
customEmailEnabled: true,
endpoint: '/gitlab-org/gitlab-test/service_desk',
initialIncomingEmail: 'servicedeskaddress@example.com',
initialIsEnabled: true,
outgoingName: 'GitLab Support Bot',
projectKey: 'key',
selectedTemplate: 'Bug',
2021-12-11 22:18:48 +05:30
selectedFileTemplateProjectId: 42,
2021-03-11 19:13:27 +05:30
templates: ['Bug', 'Documentation'],
};
const getAlertText = () => wrapper.find(GlAlert).text();
const createComponent = () => shallowMount(ServiceDeskRoot, { provide: provideData });
2020-07-28 23:09:34 +05:30
beforeEach(() => {
axiosMock = new AxiosMockAdapter(axios);
2021-03-11 19:13:27 +05:30
spy = jest.spyOn(axios, 'put');
2020-07-28 23:09:34 +05:30
});
afterEach(() => {
axiosMock.restore();
wrapper.destroy();
if (spy) {
spy.mockRestore();
}
});
2021-03-11 19:13:27 +05:30
describe('ServiceDeskSetting component', () => {
it('is rendered', () => {
wrapper = createComponent();
expect(wrapper.find(ServiceDeskSetting).props()).toEqual({
customEmail: provideData.customEmail,
customEmailEnabled: provideData.customEmailEnabled,
incomingEmail: provideData.initialIncomingEmail,
initialOutgoingName: provideData.outgoingName,
initialProjectKey: provideData.projectKey,
initialSelectedTemplate: provideData.selectedTemplate,
2021-12-11 22:18:48 +05:30
initialSelectedFileTemplateProjectId: provideData.selectedFileTemplateProjectId,
2021-03-11 19:13:27 +05:30
isEnabled: provideData.initialIsEnabled,
isTemplateSaving: false,
templates: provideData.templates,
});
});
describe('toggle event', () => {
describe('when toggling service desk on', () => {
beforeEach(async () => {
wrapper = createComponent();
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
wrapper.find(ServiceDeskSetting).vm.$emit('toggle', true);
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
await waitForPromises();
});
it('sends a request to turn service desk on', () => {
axiosMock.onPut(provideData.endpoint).replyOnce(httpStatusCodes.OK);
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
expect(spy).toHaveBeenCalledWith(provideData.endpoint, { service_desk_enabled: true });
});
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
it('shows a message when there is an error', () => {
axiosMock.onPut(provideData.endpoint).networkError();
expect(getAlertText()).toContain('An error occurred while enabling Service Desk.');
});
2020-07-28 23:09:34 +05:30
});
2021-03-11 19:13:27 +05:30
describe('when toggling service desk off', () => {
beforeEach(async () => {
wrapper = createComponent();
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
wrapper.find(ServiceDeskSetting).vm.$emit('toggle', false);
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
await waitForPromises();
});
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
it('sends a request to turn service desk off', () => {
axiosMock.onPut(provideData.endpoint).replyOnce(httpStatusCodes.OK);
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
expect(spy).toHaveBeenCalledWith(provideData.endpoint, { service_desk_enabled: false });
});
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
it('shows a message when there is an error', () => {
axiosMock.onPut(provideData.endpoint).networkError();
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
expect(getAlertText()).toContain('An error occurred while disabling Service Desk.');
});
});
2020-07-28 23:09:34 +05:30
});
2021-03-11 19:13:27 +05:30
describe('save event', () => {
describe('successful request', () => {
beforeEach(async () => {
axiosMock.onPut(provideData.endpoint).replyOnce(httpStatusCodes.OK);
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
wrapper = createComponent();
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
const payload = {
selectedTemplate: 'Bug',
outgoingName: 'GitLab Support Bot',
projectKey: 'key',
};
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
wrapper.find(ServiceDeskSetting).vm.$emit('save', payload);
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
await waitForPromises();
});
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
it('sends a request to update template', async () => {
expect(spy).toHaveBeenCalledWith(provideData.endpoint, {
issue_template_key: 'Bug',
outgoing_name: 'GitLab Support Bot',
project_key: 'key',
service_desk_enabled: true,
});
});
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
it('shows success message', () => {
expect(getAlertText()).toContain('Changes saved.');
});
2020-07-28 23:09:34 +05:30
});
2021-03-11 19:13:27 +05:30
describe('unsuccessful request', () => {
beforeEach(async () => {
axiosMock.onPut(provideData.endpoint).networkError();
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
wrapper = createComponent();
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
const payload = {
selectedTemplate: 'Bug',
outgoingName: 'GitLab Support Bot',
projectKey: 'key',
};
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
wrapper.find(ServiceDeskSetting).vm.$emit('save', payload);
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
await waitForPromises();
});
2020-07-28 23:09:34 +05:30
2021-03-11 19:13:27 +05:30
it('shows an error message', () => {
2021-04-17 20:07:23 +05:30
expect(getAlertText()).toContain('An error occurred while saving changes:');
2021-03-11 19:13:27 +05:30
});
2020-07-28 23:09:34 +05:30
});
2021-01-29 00:20:46 +05:30
});
});
2020-07-28 23:09:34 +05:30
});