Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-05-04 18:09:12 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-05-04 18:09:12 +0300
commit856e2c64ee69b055b31a8ebbeee616f13a46505e (patch)
tree0ec9b70c8f1f74516631bf87281c175e127fedd2 /spec/frontend/group_settings
parent8ed0a009f0ae0de789fae01b3cc9bda54aa03965 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/group_settings')
-rw-r--r--spec/frontend/group_settings/components/shared_runners_form_spec.js167
1 files changed, 93 insertions, 74 deletions
diff --git a/spec/frontend/group_settings/components/shared_runners_form_spec.js b/spec/frontend/group_settings/components/shared_runners_form_spec.js
index 26e9cd39cfd..70a22c86e62 100644
--- a/spec/frontend/group_settings/components/shared_runners_form_spec.js
+++ b/spec/frontend/group_settings/components/shared_runners_form_spec.js
@@ -1,47 +1,46 @@
-import { GlLoadingIcon, GlAlert } from '@gitlab/ui';
-import { shallowMount } from '@vue/test-utils';
+import { GlAlert } from '@gitlab/ui';
import MockAxiosAdapter from 'axios-mock-adapter';
import { nextTick } from 'vue';
+import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import waitForPromises from 'helpers/wait_for_promises';
import SharedRunnersForm from '~/group_settings/components/shared_runners_form.vue';
import axios from '~/lib/utils/axios_utils';
-const provide = {
- updatePath: '/test/update',
- sharedRunnersAvailability: 'enabled',
- parentSharedRunnersAvailability: null,
- runnerDisabled: 'disabled',
- runnerEnabled: 'enabled',
- runnerAllowOverride: 'allow_override',
-};
-
-jest.mock('~/flash');
+const UPDATE_PATH = '/test/update';
+const RUNNER_ENABLED_VALUE = 'enabled';
+const RUNNER_DISABLED_VALUE = 'disabled_and_unoverridable';
+const RUNNER_ALLOW_OVERRIDE_VALUE = 'disabled_with_override';
describe('group_settings/components/shared_runners_form', () => {
let wrapper;
let mock;
- const createComponent = (provides = {}) => {
- wrapper = shallowMount(SharedRunnersForm, {
+ const createComponent = (provide = {}) => {
+ wrapper = shallowMountExtended(SharedRunnersForm, {
provide: {
+ updatePath: UPDATE_PATH,
+ sharedRunnersSetting: RUNNER_ENABLED_VALUE,
+ parentSharedRunnersSetting: null,
+ runnerEnabledValue: RUNNER_ENABLED_VALUE,
+ runnerDisabledValue: RUNNER_DISABLED_VALUE,
+ runnerAllowOverrideValue: RUNNER_ALLOW_OVERRIDE_VALUE,
...provide,
- ...provides,
},
});
};
- 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"]');
- const changeToggle = (toggle) => toggle.vm.$emit('change', !toggle.props('value'));
+ 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');
const getSharedRunnersSetting = () => JSON.parse(mock.history.put[0].data).shared_runners_setting;
- const isLoadingIconVisible = () => findLoadingIcon().exists();
beforeEach(() => {
mock = new MockAxiosAdapter(axios);
-
- mock.onPut(provide.updatePath).reply(200);
+ mock.onPut(UPDATE_PATH).reply(200);
});
afterEach(() => {
@@ -51,102 +50,122 @@ describe('group_settings/components/shared_runners_form', () => {
mock.restore();
});
- describe('with default', () => {
+ describe('default state', () => {
beforeEach(() => {
createComponent();
});
- it('loading icon does not exist', () => {
- expect(isLoadingIconVisible()).toBe(false);
+ it('"Enable shared runners" toggle is enabled', () => {
+ expect(findSharedRunnersToggle().props()).toMatchObject({
+ isLoading: false,
+ disabled: false,
+ });
});
- it('enabled toggle exists', () => {
- expect(findEnabledToggle().exists()).toBe(true);
+ it('"Override the group setting" is disabled', () => {
+ expect(findOverrideToggle().props()).toMatchObject({
+ isLoading: false,
+ disabled: true,
+ });
});
+ });
- it('override toggle does not exist', () => {
- expect(findOverrideToggle().exists()).toBe(false);
+ 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);
});
});
- describe('loading icon', () => {
- it('shows and hides the loading icon on request', async () => {
- createComponent();
+ 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);
+ });
+ });
- expect(isLoadingIconVisible()).toBe(false);
+ describe('loading state', () => {
+ beforeEach(() => {
+ createComponent();
+ });
- findEnabledToggle().vm.$emit('change', true);
+ it('is not loading by default', () => {
+ expect(findSharedRunnersToggle().props('isLoading')).toBe(false);
+ expect(findOverrideToggle().props('isLoading')).toBe(false);
+ });
+ it('is loading immediately after request', async () => {
+ findSharedRunnersToggle().vm.$emit('change', true);
await nextTick();
- expect(isLoadingIconVisible()).toBe(true);
+ 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();
+ expect(mock.history.put.length).toBe(1);
+ });
+
+ it('is not loading state after completed request', async () => {
+ findSharedRunnersToggle().vm.$emit('change', true);
await waitForPromises();
- expect(isLoadingIconVisible()).toBe(false);
+ expect(findSharedRunnersToggle().props('isLoading')).toBe(false);
+ expect(findOverrideToggle().props('isLoading')).toBe(false);
});
});
- describe('enable toggle', () => {
+ describe('"Enable shared runners" toggle', () => {
beforeEach(() => {
createComponent();
});
- it('enabling the toggle sends correct payload', async () => {
- findEnabledToggle().vm.$emit('change', true);
-
+ it('sends correct payload when turned on', async () => {
+ findSharedRunnersToggle().vm.$emit('change', true);
await waitForPromises();
- expect(getSharedRunnersSetting()).toEqual(provide.runnerEnabled);
- expect(findOverrideToggle().exists()).toBe(false);
+ expect(getSharedRunnersSetting()).toEqual(RUNNER_ENABLED_VALUE);
+ expect(findOverrideToggle().props('disabled')).toBe(true);
});
- it('disabling the toggle sends correct payload', async () => {
- findEnabledToggle().vm.$emit('change', false);
-
+ it('sends correct payload when turned off', async () => {
+ findSharedRunnersToggle().vm.$emit('change', false);
await waitForPromises();
- expect(getSharedRunnersSetting()).toEqual(provide.runnerDisabled);
- expect(findOverrideToggle().exists()).toBe(true);
+ expect(getSharedRunnersSetting()).toEqual(RUNNER_DISABLED_VALUE);
+ expect(findOverrideToggle().props('disabled')).toBe(false);
});
});
- describe('override toggle', () => {
+ describe('"Override the group setting" toggle', () => {
beforeEach(() => {
- createComponent({ sharedRunnersAvailability: provide.runnerAllowOverride });
+ createComponent({ sharedRunnersSetting: RUNNER_ALLOW_OVERRIDE_VALUE });
});
it('enabling the override toggle sends correct payload', async () => {
findOverrideToggle().vm.$emit('change', true);
-
await waitForPromises();
- expect(getSharedRunnersSetting()).toEqual(provide.runnerAllowOverride);
+ expect(getSharedRunnersSetting()).toEqual(RUNNER_ALLOW_OVERRIDE_VALUE);
});
it('disabling the override toggle sends correct payload', async () => {
findOverrideToggle().vm.$emit('change', false);
-
await waitForPromises();
- expect(getSharedRunnersSetting()).toEqual(provide.runnerDisabled);
- });
- });
-
- describe('toggle disabled state', () => {
- it(`toggles are not disabled with setting ${provide.runnerDisabled}`, () => {
- createComponent({ sharedRunnersAvailability: provide.runnerDisabled });
- expect(findEnabledToggle().props('disabled')).toBe(false);
- expect(findOverrideToggle().props('disabled')).toBe(false);
- });
-
- it('toggles are disabled', () => {
- createComponent({
- sharedRunnersAvailability: provide.runnerDisabled,
- parentSharedRunnersAvailability: provide.runnerDisabled,
- });
- expect(findEnabledToggle().props('disabled')).toBe(true);
- expect(findOverrideToggle().props('disabled')).toBe(true);
+ expect(getSharedRunnersSetting()).toEqual(RUNNER_DISABLED_VALUE);
});
});
@@ -156,16 +175,16 @@ describe('group_settings/components/shared_runners_form', () => {
${{ error: 'Undefined error' }} | ${'Undefined error Refresh the page and try again.'}
`(`with error $errorObj`, ({ errorObj, message }) => {
beforeEach(async () => {
- mock.onPut(provide.updatePath).reply(500, errorObj);
+ mock.onPut(UPDATE_PATH).reply(500, errorObj);
createComponent();
- changeToggle(findEnabledToggle());
+ findSharedRunnersToggle().vm.$emit('change', false);
await waitForPromises();
});
it('error should be shown', () => {
- expect(findErrorAlert().text()).toBe(message);
+ expect(findAlert('danger').text()).toBe(message);
});
});
});