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

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

194 lines
6.1 KiB
JavaScript
Raw Normal View History

2022-07-16 23:28:13 +05:30
import { GlAlert } from '@gitlab/ui';
2022-04-04 11:22:00 +05:30
import { nextTick } from 'vue';
2022-07-16 23:28:13 +05:30
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
2021-01-03 14:25:43 +05:30
import waitForPromises from 'helpers/wait_for_promises';
import SharedRunnersForm from '~/group_settings/components/shared_runners_form.vue';
2022-08-27 11:52:29 +05:30
import { updateGroup } from '~/api/groups_api';
2021-01-03 14:25:43 +05:30
2022-08-27 11:52:29 +05:30
jest.mock('~/api/groups_api');
const GROUP_ID = '99';
2022-07-16 23:28:13 +05:30
const RUNNER_ENABLED_VALUE = 'enabled';
const RUNNER_DISABLED_VALUE = 'disabled_and_unoverridable';
const RUNNER_ALLOW_OVERRIDE_VALUE = 'disabled_with_override';
2021-01-03 14:25:43 +05:30
describe('group_settings/components/shared_runners_form', () => {
let wrapper;
2022-07-16 23:28:13 +05:30
const createComponent = (provide = {}) => {
wrapper = shallowMountExtended(SharedRunnersForm, {
2021-12-11 22:18:48 +05:30
provide: {
2022-08-27 11:52:29 +05:30
groupId: GROUP_ID,
2022-07-16 23:28:13 +05:30
sharedRunnersSetting: RUNNER_ENABLED_VALUE,
parentSharedRunnersSetting: null,
runnerEnabledValue: RUNNER_ENABLED_VALUE,
runnerDisabledValue: RUNNER_DISABLED_VALUE,
runnerAllowOverrideValue: RUNNER_ALLOW_OVERRIDE_VALUE,
2021-12-11 22:18:48 +05:30
...provide,
2021-01-03 14:25:43 +05:30
},
});
};
2022-07-16 23:28:13 +05:30
const findAlert = (variant) =>
wrapper
.findAllComponents(GlAlert)
.filter((w) => w.props('variant') === variant)
.at(0);
const findSharedRunnersToggle = () => wrapper.findByTestId('shared-runners-toggle');
const findOverrideToggle = () => wrapper.findByTestId('override-runners-toggle');
2022-08-27 11:52:29 +05:30
const getSharedRunnersSetting = () => {
return updateGroup.mock.calls[0][1].shared_runners_setting;
};
2021-01-03 14:25:43 +05:30
beforeEach(() => {
2022-08-27 11:52:29 +05:30
updateGroup.mockResolvedValue({});
2021-01-03 14:25:43 +05:30
});
afterEach(() => {
wrapper.destroy();
wrapper = null;
2022-08-27 11:52:29 +05:30
updateGroup.mockReset();
2021-01-03 14:25:43 +05:30
});
2022-07-16 23:28:13 +05:30
describe('default state', () => {
2021-01-03 14:25:43 +05:30
beforeEach(() => {
createComponent();
});
2022-07-16 23:28:13 +05:30
it('"Enable shared runners" toggle is enabled', () => {
expect(findSharedRunnersToggle().props()).toMatchObject({
isLoading: false,
disabled: false,
});
2021-01-03 14:25:43 +05:30
});
2022-07-16 23:28:13 +05:30
it('"Override the group setting" is disabled', () => {
expect(findOverrideToggle().props()).toMatchObject({
isLoading: false,
disabled: true,
});
2021-01-03 14:25:43 +05:30
});
2022-07-16 23:28:13 +05:30
});
2021-01-03 14:25:43 +05:30
2022-07-16 23:28:13 +05:30
describe('When group disabled shared runners', () => {
it(`toggles are not disabled with setting ${RUNNER_DISABLED_VALUE}`, () => {
createComponent({ sharedRunnersSetting: RUNNER_DISABLED_VALUE });
expect(findSharedRunnersToggle().props('disabled')).toBe(false);
expect(findOverrideToggle().props('disabled')).toBe(false);
2021-01-03 14:25:43 +05:30
});
});
2022-07-16 23:28:13 +05:30
describe('When parent group disabled shared runners', () => {
it('toggles are disabled', () => {
createComponent({
sharedRunnersSetting: RUNNER_DISABLED_VALUE,
parentSharedRunnersSetting: RUNNER_DISABLED_VALUE,
});
expect(findSharedRunnersToggle().props('disabled')).toBe(true);
expect(findOverrideToggle().props('disabled')).toBe(true);
expect(findAlert('warning').exists()).toBe(true);
});
});
2021-01-03 14:25:43 +05:30
2022-07-16 23:28:13 +05:30
describe('loading state', () => {
beforeEach(() => {
createComponent();
});
2021-01-03 14:25:43 +05:30
2022-07-16 23:28:13 +05:30
it('is not loading by default', () => {
expect(findSharedRunnersToggle().props('isLoading')).toBe(false);
expect(findOverrideToggle().props('isLoading')).toBe(false);
});
2021-01-03 14:25:43 +05:30
2022-07-16 23:28:13 +05:30
it('is loading immediately after request', async () => {
findSharedRunnersToggle().vm.$emit('change', true);
2022-04-04 11:22:00 +05:30
await nextTick();
2021-01-03 14:25:43 +05:30
2022-07-16 23:28:13 +05:30
expect(findSharedRunnersToggle().props('isLoading')).toBe(true);
expect(findOverrideToggle().props('isLoading')).toBe(true);
});
it('does not update settings while loading', async () => {
findSharedRunnersToggle().vm.$emit('change', true);
findSharedRunnersToggle().vm.$emit('change', false);
await waitForPromises();
2021-01-03 14:25:43 +05:30
2022-08-27 11:52:29 +05:30
expect(updateGroup).toHaveBeenCalledTimes(1);
2022-07-16 23:28:13 +05:30
});
it('is not loading state after completed request', async () => {
findSharedRunnersToggle().vm.$emit('change', true);
2021-01-03 14:25:43 +05:30
await waitForPromises();
2022-07-16 23:28:13 +05:30
expect(findSharedRunnersToggle().props('isLoading')).toBe(false);
expect(findOverrideToggle().props('isLoading')).toBe(false);
2021-01-03 14:25:43 +05:30
});
});
2022-07-16 23:28:13 +05:30
describe('"Enable shared runners" toggle', () => {
2021-01-03 14:25:43 +05:30
beforeEach(() => {
createComponent();
});
2022-07-16 23:28:13 +05:30
it('sends correct payload when turned on', async () => {
findSharedRunnersToggle().vm.$emit('change', true);
2021-01-03 14:25:43 +05:30
await waitForPromises();
2022-07-16 23:28:13 +05:30
expect(getSharedRunnersSetting()).toEqual(RUNNER_ENABLED_VALUE);
expect(findOverrideToggle().props('disabled')).toBe(true);
2021-01-03 14:25:43 +05:30
});
2022-07-16 23:28:13 +05:30
it('sends correct payload when turned off', async () => {
findSharedRunnersToggle().vm.$emit('change', false);
2021-01-03 14:25:43 +05:30
await waitForPromises();
2022-07-16 23:28:13 +05:30
expect(getSharedRunnersSetting()).toEqual(RUNNER_DISABLED_VALUE);
expect(findOverrideToggle().props('disabled')).toBe(false);
2021-01-03 14:25:43 +05:30
});
});
2022-07-16 23:28:13 +05:30
describe('"Override the group setting" toggle', () => {
2021-01-03 14:25:43 +05:30
beforeEach(() => {
2022-07-16 23:28:13 +05:30
createComponent({ sharedRunnersSetting: RUNNER_ALLOW_OVERRIDE_VALUE });
2021-01-03 14:25:43 +05:30
});
it('enabling the override toggle sends correct payload', async () => {
findOverrideToggle().vm.$emit('change', true);
await waitForPromises();
2022-07-16 23:28:13 +05:30
expect(getSharedRunnersSetting()).toEqual(RUNNER_ALLOW_OVERRIDE_VALUE);
2021-01-03 14:25:43 +05:30
});
it('disabling the override toggle sends correct payload', async () => {
findOverrideToggle().vm.$emit('change', false);
await waitForPromises();
2022-07-16 23:28:13 +05:30
expect(getSharedRunnersSetting()).toEqual(RUNNER_DISABLED_VALUE);
2021-01-03 14:25:43 +05:30
});
});
describe.each`
2022-08-27 11:52:29 +05:30
errorData | message
2021-01-03 14:25:43 +05:30
${{}} | ${'An error occurred while updating configuration. Refresh the page and try again.'}
${{ error: 'Undefined error' }} | ${'Undefined error Refresh the page and try again.'}
2022-08-27 11:52:29 +05:30
`(`with error $errorObj`, ({ errorData, message }) => {
2021-01-03 14:25:43 +05:30
beforeEach(async () => {
2022-08-27 11:52:29 +05:30
updateGroup.mockRejectedValue({
response: { data: errorData },
});
2021-01-03 14:25:43 +05:30
createComponent();
2022-07-16 23:28:13 +05:30
findSharedRunnersToggle().vm.$emit('change', false);
2021-01-03 14:25:43 +05:30
await waitForPromises();
});
it('error should be shown', () => {
2022-07-16 23:28:13 +05:30
expect(findAlert('danger').text()).toBe(message);
2021-01-03 14:25:43 +05:30
});
});
});