80 lines
2.5 KiB
JavaScript
80 lines
2.5 KiB
JavaScript
import MockAdaptor from 'axios-mock-adapter';
|
|
import IntegrationSettingsForm from '~/integrations/integration_settings_form';
|
|
import eventHub from '~/integrations/edit/event_hub';
|
|
import axios from '~/lib/utils/axios_utils';
|
|
import { SAVE_INTEGRATION_EVENT } from '~/integrations/constants';
|
|
import waitForPromises from 'helpers/wait_for_promises';
|
|
|
|
jest.mock('~/vue_shared/plugins/global_toast');
|
|
jest.mock('lodash/delay', () => (callback) => callback());
|
|
|
|
const FIXTURE = 'services/edit_service.html';
|
|
const mockFormSelector = '.js-integration-settings-form';
|
|
|
|
describe('IntegrationSettingsForm', () => {
|
|
let integrationSettingsForm;
|
|
|
|
const mockStoreDispatch = () => jest.spyOn(integrationSettingsForm.vue.$store, 'dispatch');
|
|
|
|
beforeEach(() => {
|
|
loadFixtures(FIXTURE);
|
|
|
|
integrationSettingsForm = new IntegrationSettingsForm(mockFormSelector);
|
|
integrationSettingsForm.init();
|
|
});
|
|
|
|
afterEach(() => {
|
|
eventHub.dispose(); // clear event hub handlers
|
|
});
|
|
|
|
describe('constructor', () => {
|
|
it('should initialize form element refs on class object', () => {
|
|
expect(integrationSettingsForm.$form).toBeDefined();
|
|
expect(integrationSettingsForm.$form.nodeName).toBe('FORM');
|
|
expect(integrationSettingsForm.formSelector).toBe(mockFormSelector);
|
|
});
|
|
|
|
it('should initialize form metadata on class object', () => {
|
|
expect(integrationSettingsForm.testEndPoint).toBeDefined();
|
|
});
|
|
});
|
|
|
|
describe('event handling', () => {
|
|
let mockAxios;
|
|
|
|
beforeEach(() => {
|
|
mockAxios = new MockAdaptor(axios);
|
|
jest.spyOn(axios, 'put');
|
|
jest.spyOn(integrationSettingsForm.$form, 'submit');
|
|
});
|
|
|
|
afterEach(() => {
|
|
mockAxios.restore();
|
|
});
|
|
|
|
describe('when event hub receives `SAVE_INTEGRATION_EVENT`', () => {
|
|
describe('when form is valid', () => {
|
|
it('should submit the form', async () => {
|
|
eventHub.$emit(SAVE_INTEGRATION_EVENT, true);
|
|
await waitForPromises();
|
|
|
|
expect(integrationSettingsForm.$form.submit).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|
|
|
|
describe('when form is invalid', () => {
|
|
it('should dispatch `setIsSaving` with `false` and not submit form', async () => {
|
|
const dispatchSpy = mockStoreDispatch();
|
|
|
|
eventHub.$emit(SAVE_INTEGRATION_EVENT, false);
|
|
|
|
await waitForPromises();
|
|
|
|
expect(dispatchSpy).toHaveBeenCalledWith('setIsSaving', false);
|
|
expect(integrationSettingsForm.$form.submit).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|