debian-mirror-gitlab/spec/frontend/group_settings/components/shared_runners_form_spec.js

171 lines
5 KiB
JavaScript
Raw Normal View History

2021-01-03 14:25:43 +05:30
import { GlLoadingIcon, GlAlert } from '@gitlab/ui';
2021-03-11 19:13:27 +05:30
import { shallowMount } from '@vue/test-utils';
2021-01-03 14:25:43 +05:30
import MockAxiosAdapter from 'axios-mock-adapter';
import waitForPromises from 'helpers/wait_for_promises';
import SharedRunnersForm from '~/group_settings/components/shared_runners_form.vue';
import axios from '~/lib/utils/axios_utils';
2021-12-11 22:18:48 +05:30
const provide = {
updatePath: '/test/update',
sharedRunnersAvailability: 'enabled',
parentSharedRunnersAvailability: null,
runnerDisabled: 'disabled',
runnerEnabled: 'enabled',
runnerAllowOverride: 'allow_override',
};
2021-01-03 14:25:43 +05:30
jest.mock('~/flash');
describe('group_settings/components/shared_runners_form', () => {
let wrapper;
let mock;
2021-12-11 22:18:48 +05:30
const createComponent = (provides = {}) => {
2021-01-03 14:25:43 +05:30
wrapper = shallowMount(SharedRunnersForm, {
2021-12-11 22:18:48 +05:30
provide: {
...provide,
...provides,
2021-01-03 14:25:43 +05:30
},
});
};
const findLoadingIcon = () => wrapper.find(GlLoadingIcon);
const findErrorAlert = () => wrapper.find(GlAlert);
const findEnabledToggle = () => wrapper.find('[data-testid="enable-runners-toggle"]');
const findOverrideToggle = () => wrapper.find('[data-testid="override-runners-toggle"]');
2021-03-08 18:12:59 +05:30
const changeToggle = (toggle) => toggle.vm.$emit('change', !toggle.props('value'));
2021-12-11 22:18:48 +05:30
const getSharedRunnersSetting = () => JSON.parse(mock.history.put[0].data).shared_runners_setting;
2021-01-03 14:25:43 +05:30
const isLoadingIconVisible = () => findLoadingIcon().exists();
beforeEach(() => {
mock = new MockAxiosAdapter(axios);
2021-12-11 22:18:48 +05:30
mock.onPut(provide.updatePath).reply(200);
2021-01-03 14:25:43 +05:30
});
afterEach(() => {
wrapper.destroy();
wrapper = null;
mock.restore();
});
describe('with default', () => {
beforeEach(() => {
createComponent();
});
it('loading icon does not exist', () => {
expect(isLoadingIconVisible()).toBe(false);
});
it('enabled toggle exists', () => {
expect(findEnabledToggle().exists()).toBe(true);
});
it('override toggle does not exist', () => {
expect(findOverrideToggle().exists()).toBe(false);
});
});
describe('loading icon', () => {
it('shows and hides the loading icon on request', async () => {
createComponent();
expect(isLoadingIconVisible()).toBe(false);
findEnabledToggle().vm.$emit('change', true);
await wrapper.vm.$nextTick();
expect(isLoadingIconVisible()).toBe(true);
await waitForPromises();
expect(isLoadingIconVisible()).toBe(false);
});
});
describe('enable toggle', () => {
beforeEach(() => {
createComponent();
});
it('enabling the toggle sends correct payload', async () => {
findEnabledToggle().vm.$emit('change', true);
await waitForPromises();
2021-12-11 22:18:48 +05:30
expect(getSharedRunnersSetting()).toEqual(provide.runnerEnabled);
2021-01-03 14:25:43 +05:30
expect(findOverrideToggle().exists()).toBe(false);
});
it('disabling the toggle sends correct payload', async () => {
findEnabledToggle().vm.$emit('change', false);
await waitForPromises();
2021-12-11 22:18:48 +05:30
expect(getSharedRunnersSetting()).toEqual(provide.runnerDisabled);
2021-01-03 14:25:43 +05:30
expect(findOverrideToggle().exists()).toBe(true);
});
});
describe('override toggle', () => {
beforeEach(() => {
2021-12-11 22:18:48 +05:30
createComponent({ sharedRunnersAvailability: provide.runnerAllowOverride });
2021-01-03 14:25:43 +05:30
});
it('enabling the override toggle sends correct payload', async () => {
findOverrideToggle().vm.$emit('change', true);
await waitForPromises();
2021-12-11 22:18:48 +05:30
expect(getSharedRunnersSetting()).toEqual(provide.runnerAllowOverride);
2021-01-03 14:25:43 +05:30
});
it('disabling the override toggle sends correct payload', async () => {
findOverrideToggle().vm.$emit('change', false);
await waitForPromises();
2021-12-11 22:18:48 +05:30
expect(getSharedRunnersSetting()).toEqual(provide.runnerDisabled);
2021-01-03 14:25:43 +05:30
});
});
describe('toggle disabled state', () => {
2021-12-11 22:18:48 +05:30
it(`toggles are not disabled with setting ${provide.runnerDisabled}`, () => {
createComponent({ sharedRunnersAvailability: provide.runnerDisabled });
2021-01-03 14:25:43 +05:30
expect(findEnabledToggle().props('disabled')).toBe(false);
expect(findOverrideToggle().props('disabled')).toBe(false);
});
it('toggles are disabled', () => {
createComponent({
2021-12-11 22:18:48 +05:30
sharedRunnersAvailability: provide.runnerDisabled,
parentSharedRunnersAvailability: provide.runnerDisabled,
2021-01-03 14:25:43 +05:30
});
expect(findEnabledToggle().props('disabled')).toBe(true);
expect(findOverrideToggle().props('disabled')).toBe(true);
});
});
describe.each`
errorObj | message
${{}} | ${'An error occurred while updating configuration. Refresh the page and try again.'}
${{ error: 'Undefined error' }} | ${'Undefined error Refresh the page and try again.'}
`(`with error $errorObj`, ({ errorObj, message }) => {
beforeEach(async () => {
2021-12-11 22:18:48 +05:30
mock.onPut(provide.updatePath).reply(500, errorObj);
2021-01-03 14:25:43 +05:30
createComponent();
changeToggle(findEnabledToggle());
await waitForPromises();
});
it('error should be shown', () => {
expect(findErrorAlert().text()).toBe(message);
});
});
});