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:
Diffstat (limited to 'spec/frontend/create_cluster/gke_cluster')
-rw-r--r--spec/frontend/create_cluster/gke_cluster/components/gke_machine_type_dropdown_spec.js129
-rw-r--r--spec/frontend/create_cluster/gke_cluster/components/gke_network_dropdown_spec.js137
-rw-r--r--spec/frontend/create_cluster/gke_cluster/components/gke_project_id_dropdown_spec.js137
-rw-r--r--spec/frontend/create_cluster/gke_cluster/components/gke_submit_button_spec.js51
-rw-r--r--spec/frontend/create_cluster/gke_cluster/components/gke_subnetwork_dropdown_spec.js111
-rw-r--r--spec/frontend/create_cluster/gke_cluster/components/gke_zone_dropdown_spec.js103
-rw-r--r--spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js47
-rw-r--r--spec/frontend/create_cluster/gke_cluster/helpers.js64
-rw-r--r--spec/frontend/create_cluster/gke_cluster/mock_data.js75
-rw-r--r--spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js141
-rw-r--r--spec/frontend/create_cluster/gke_cluster/stores/getters_spec.js103
-rw-r--r--spec/frontend/create_cluster/gke_cluster/stores/mutations_spec.js32
12 files changed, 0 insertions, 1130 deletions
diff --git a/spec/frontend/create_cluster/gke_cluster/components/gke_machine_type_dropdown_spec.js b/spec/frontend/create_cluster/gke_cluster/components/gke_machine_type_dropdown_spec.js
deleted file mode 100644
index f46b84da939..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/components/gke_machine_type_dropdown_spec.js
+++ /dev/null
@@ -1,129 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import Vue, { nextTick } from 'vue';
-import Vuex from 'vuex';
-import GkeMachineTypeDropdown from '~/create_cluster/gke_cluster/components/gke_machine_type_dropdown.vue';
-import createState from '~/create_cluster/gke_cluster/store/state';
-import DropdownButton from '~/vue_shared/components/dropdown/dropdown_button.vue';
-import DropdownHiddenInput from '~/vue_shared/components/dropdown/dropdown_hidden_input.vue';
-import { selectedMachineTypeMock, gapiMachineTypesResponseMock } from '../mock_data';
-
-const componentConfig = {
- fieldId: 'cluster_provider_gcp_attributes_gcp_machine_type',
- fieldName: 'cluster[provider_gcp_attributes][gcp_machine_type]',
-};
-const setMachineType = jest.fn();
-
-const LABELS = {
- LOADING: 'Fetching machine types',
- DISABLED_NO_PROJECT: 'Select project and zone to choose machine type',
- DISABLED_NO_ZONE: 'Select zone to choose machine type',
- DEFAULT: 'Select machine type',
-};
-
-Vue.use(Vuex);
-
-const createComponent = (store, propsData = componentConfig) =>
- shallowMount(GkeMachineTypeDropdown, {
- propsData,
- store,
- });
-
-const createStore = (initialState = {}, getters = {}) =>
- new Vuex.Store({
- state: {
- ...createState(),
- ...initialState,
- },
- getters: {
- hasZone: () => false,
- ...getters,
- },
- actions: {
- setMachineType,
- },
- });
-
-describe('GkeMachineTypeDropdown', () => {
- let wrapper;
- let store;
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- const dropdownButtonLabel = () => wrapper.find(DropdownButton).props('toggleText');
- const dropdownHiddenInputValue = () => wrapper.find(DropdownHiddenInput).props('value');
-
- describe('shows various toggle text depending on state', () => {
- it('returns disabled state toggle text when no project and zone are selected', () => {
- store = createStore({
- projectHasBillingEnabled: false,
- });
- wrapper = createComponent(store);
-
- expect(dropdownButtonLabel()).toBe(LABELS.DISABLED_NO_PROJECT);
- });
-
- it('returns disabled state toggle text when no zone is selected', () => {
- store = createStore({
- projectHasBillingEnabled: true,
- });
- wrapper = createComponent(store);
-
- expect(dropdownButtonLabel()).toBe(LABELS.DISABLED_NO_ZONE);
- });
-
- it('returns loading toggle text', async () => {
- store = createStore();
- wrapper = createComponent(store);
-
- // setData usage is discouraged. See https://gitlab.com/groups/gitlab-org/-/epics/7330 for details
- // eslint-disable-next-line no-restricted-syntax
- wrapper.setData({ isLoading: true });
-
- await nextTick();
- expect(dropdownButtonLabel()).toBe(LABELS.LOADING);
- });
-
- it('returns default toggle text', () => {
- store = createStore(
- {
- projectHasBillingEnabled: true,
- },
- { hasZone: () => true },
- );
- wrapper = createComponent(store);
-
- expect(dropdownButtonLabel()).toBe(LABELS.DEFAULT);
- });
-
- it('returns machine type name if machine type selected', () => {
- store = createStore(
- {
- projectHasBillingEnabled: true,
- selectedMachineType: selectedMachineTypeMock,
- },
- { hasZone: () => true },
- );
- wrapper = createComponent(store);
-
- expect(dropdownButtonLabel()).toBe(selectedMachineTypeMock);
- });
- });
-
- describe('form input', () => {
- it('reflects new value when dropdown item is clicked', async () => {
- store = createStore({
- machineTypes: gapiMachineTypesResponseMock.items,
- });
- wrapper = createComponent(store);
-
- expect(dropdownHiddenInputValue()).toBe('');
-
- wrapper.find('.dropdown-content button').trigger('click');
-
- await nextTick();
- expect(setMachineType).toHaveBeenCalledWith(expect.anything(), selectedMachineTypeMock);
- });
- });
-});
diff --git a/spec/frontend/create_cluster/gke_cluster/components/gke_network_dropdown_spec.js b/spec/frontend/create_cluster/gke_cluster/components/gke_network_dropdown_spec.js
deleted file mode 100644
index addb0ef72a0..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/components/gke_network_dropdown_spec.js
+++ /dev/null
@@ -1,137 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import Vue from 'vue';
-import Vuex from 'vuex';
-import ClusterFormDropdown from '~/create_cluster/components/cluster_form_dropdown.vue';
-import GkeNetworkDropdown from '~/create_cluster/gke_cluster/components/gke_network_dropdown.vue';
-import createClusterDropdownState from '~/create_cluster/store/cluster_dropdown/state';
-
-Vue.use(Vuex);
-
-describe('GkeNetworkDropdown', () => {
- let wrapper;
- let store;
- const defaultProps = { fieldName: 'field-name' };
- const selectedNetwork = { selfLink: '123456' };
- const projectId = '6789';
- const region = 'east-1';
- const setNetwork = jest.fn();
- const setSubnetwork = jest.fn();
- const fetchSubnetworks = jest.fn();
-
- const buildStore = ({ clusterDropdownState } = {}) =>
- new Vuex.Store({
- state: {
- selectedNetwork,
- },
- actions: {
- setNetwork,
- setSubnetwork,
- },
- getters: {
- hasZone: () => false,
- region: () => region,
- projectId: () => projectId,
- },
- modules: {
- networks: {
- namespaced: true,
- state: {
- ...createClusterDropdownState(),
- ...(clusterDropdownState || {}),
- },
- },
- subnetworks: {
- namespaced: true,
- actions: {
- fetchItems: fetchSubnetworks,
- },
- },
- },
- });
-
- const buildWrapper = (propsData = defaultProps) =>
- shallowMount(GkeNetworkDropdown, {
- propsData,
- store,
- });
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- it('sets correct field-name', () => {
- const fieldName = 'field-name';
-
- store = buildStore();
- wrapper = buildWrapper({ fieldName });
-
- expect(wrapper.find(ClusterFormDropdown).props('fieldName')).toBe(fieldName);
- });
-
- it('sets selected network as the dropdown value', () => {
- store = buildStore();
- wrapper = buildWrapper();
-
- expect(wrapper.find(ClusterFormDropdown).props('value')).toBe(selectedNetwork);
- });
-
- it('maps networks store items to the dropdown items property', () => {
- const items = [{ name: 'network' }];
-
- store = buildStore({ clusterDropdownState: { items } });
- wrapper = buildWrapper();
-
- expect(wrapper.find(ClusterFormDropdown).props('items')).toBe(items);
- });
-
- describe('when network dropdown store is loading items', () => {
- it('sets network dropdown as loading', () => {
- store = buildStore({ clusterDropdownState: { isLoadingItems: true } });
- wrapper = buildWrapper();
-
- expect(wrapper.find(ClusterFormDropdown).props('loading')).toBe(true);
- });
- });
-
- describe('when there is no selected zone', () => {
- it('disables the network dropdown', () => {
- store = buildStore();
- wrapper = buildWrapper();
-
- expect(wrapper.find(ClusterFormDropdown).props('disabled')).toBe(true);
- });
- });
-
- describe('when an error occurs while loading networks', () => {
- it('sets the network dropdown as having errors', () => {
- store = buildStore({ clusterDropdownState: { loadingItemsError: new Error() } });
- wrapper = buildWrapper();
-
- expect(wrapper.find(ClusterFormDropdown).props('hasErrors')).toBe(true);
- });
- });
-
- describe('when dropdown emits input event', () => {
- beforeEach(() => {
- store = buildStore();
- wrapper = buildWrapper();
- wrapper.find(ClusterFormDropdown).vm.$emit('input', selectedNetwork);
- });
-
- it('cleans selected subnetwork', () => {
- expect(setSubnetwork).toHaveBeenCalledWith(expect.anything(), '');
- });
-
- it('dispatches the setNetwork action', () => {
- expect(setNetwork).toHaveBeenCalledWith(expect.anything(), selectedNetwork);
- });
-
- it('fetches subnetworks for the selected project, region, and network', () => {
- expect(fetchSubnetworks).toHaveBeenCalledWith(expect.anything(), {
- project: projectId,
- region,
- network: selectedNetwork.selfLink,
- });
- });
- });
-});
diff --git a/spec/frontend/create_cluster/gke_cluster/components/gke_project_id_dropdown_spec.js b/spec/frontend/create_cluster/gke_cluster/components/gke_project_id_dropdown_spec.js
deleted file mode 100644
index 36f8d4bd1e8..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/components/gke_project_id_dropdown_spec.js
+++ /dev/null
@@ -1,137 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import Vue, { nextTick } from 'vue';
-import Vuex from 'vuex';
-import GkeProjectIdDropdown from '~/create_cluster/gke_cluster/components/gke_project_id_dropdown.vue';
-import createState from '~/create_cluster/gke_cluster/store/state';
-import DropdownButton from '~/vue_shared/components/dropdown/dropdown_button.vue';
-import DropdownHiddenInput from '~/vue_shared/components/dropdown/dropdown_hidden_input.vue';
-import { selectedProjectMock, gapiProjectsResponseMock } from '../mock_data';
-
-const componentConfig = {
- docsUrl: 'https://console.cloud.google.com/home/dashboard',
- fieldId: 'cluster_provider_gcp_attributes_gcp_project_id',
- fieldName: 'cluster[provider_gcp_attributes][gcp_project_id]',
-};
-
-const LABELS = {
- LOADING: 'Fetching projects',
- VALIDATING_PROJECT_BILLING: 'Validating project billing status',
- DEFAULT: 'Select project',
- EMPTY: 'No projects found',
-};
-
-Vue.use(Vuex);
-
-describe('GkeProjectIdDropdown', () => {
- let wrapper;
- let vuexStore;
- let setProject;
-
- beforeEach(() => {
- setProject = jest.fn();
- });
-
- const createStore = (initialState = {}, getters = {}) =>
- new Vuex.Store({
- state: {
- ...createState(),
- ...initialState,
- },
- actions: {
- fetchProjects: jest.fn().mockResolvedValueOnce([]),
- setProject,
- },
- getters: {
- hasProject: () => false,
- ...getters,
- },
- });
-
- const createComponent = (store, propsData = componentConfig) =>
- shallowMount(GkeProjectIdDropdown, {
- propsData,
- store,
- });
-
- const bootstrap = (initialState, getters) => {
- vuexStore = createStore(initialState, getters);
- wrapper = createComponent(vuexStore);
- };
-
- const dropdownButtonLabel = () => wrapper.find(DropdownButton).props('toggleText');
- const dropdownHiddenInputValue = () => wrapper.find(DropdownHiddenInput).props('value');
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- describe('toggleText', () => {
- it('returns loading toggle text', () => {
- bootstrap();
-
- expect(dropdownButtonLabel()).toBe(LABELS.LOADING);
- });
-
- it('returns project billing validation text', () => {
- bootstrap({ isValidatingProjectBilling: true });
-
- expect(dropdownButtonLabel()).toBe(LABELS.VALIDATING_PROJECT_BILLING);
- });
-
- it('returns default toggle text', async () => {
- bootstrap();
-
- // setData usage is discouraged. See https://gitlab.com/groups/gitlab-org/-/epics/7330 for details
- // eslint-disable-next-line no-restricted-syntax
- wrapper.setData({ isLoading: false });
-
- await nextTick();
- expect(dropdownButtonLabel()).toBe(LABELS.DEFAULT);
- });
-
- it('returns project name if project selected', async () => {
- bootstrap(
- {
- selectedProject: selectedProjectMock,
- },
- {
- hasProject: () => true,
- },
- );
- // setData usage is discouraged. See https://gitlab.com/groups/gitlab-org/-/epics/7330 for details
- // eslint-disable-next-line no-restricted-syntax
- wrapper.setData({ isLoading: false });
-
- await nextTick();
- expect(dropdownButtonLabel()).toBe(selectedProjectMock.name);
- });
-
- it('returns empty toggle text', async () => {
- bootstrap({
- projects: null,
- });
- // setData usage is discouraged. See https://gitlab.com/groups/gitlab-org/-/epics/7330 for details
- // eslint-disable-next-line no-restricted-syntax
- wrapper.setData({ isLoading: false });
-
- await nextTick();
- expect(dropdownButtonLabel()).toBe(LABELS.EMPTY);
- });
- });
-
- describe('selectItem', () => {
- it('reflects new value when dropdown item is clicked', async () => {
- bootstrap({ projects: gapiProjectsResponseMock.projects });
-
- expect(dropdownHiddenInputValue()).toBe('');
-
- wrapper.find('.dropdown-content button').trigger('click');
-
- await nextTick();
- expect(setProject).toHaveBeenCalledWith(
- expect.anything(),
- gapiProjectsResponseMock.projects[0],
- );
- });
- });
-});
diff --git a/spec/frontend/create_cluster/gke_cluster/components/gke_submit_button_spec.js b/spec/frontend/create_cluster/gke_cluster/components/gke_submit_button_spec.js
deleted file mode 100644
index 2bf9158628c..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/components/gke_submit_button_spec.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import Vue from 'vue';
-import Vuex from 'vuex';
-import GkeSubmitButton from '~/create_cluster/gke_cluster/components/gke_submit_button.vue';
-
-Vue.use(Vuex);
-
-describe('GkeSubmitButton', () => {
- let wrapper;
- let store;
- let hasValidData;
-
- const buildStore = () =>
- new Vuex.Store({
- getters: {
- hasValidData,
- },
- });
-
- const buildWrapper = () =>
- shallowMount(GkeSubmitButton, {
- store,
- });
-
- const bootstrap = () => {
- store = buildStore();
- wrapper = buildWrapper();
- };
-
- beforeEach(() => {
- hasValidData = jest.fn();
- });
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- it('is disabled when hasValidData is false', () => {
- hasValidData.mockReturnValueOnce(false);
- bootstrap();
-
- expect(wrapper.attributes('disabled')).toBe('disabled');
- });
-
- it('is not disabled when hasValidData is true', () => {
- hasValidData.mockReturnValueOnce(true);
- bootstrap();
-
- expect(wrapper.attributes('disabled')).toBeFalsy();
- });
-});
diff --git a/spec/frontend/create_cluster/gke_cluster/components/gke_subnetwork_dropdown_spec.js b/spec/frontend/create_cluster/gke_cluster/components/gke_subnetwork_dropdown_spec.js
deleted file mode 100644
index 9df680d94b5..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/components/gke_subnetwork_dropdown_spec.js
+++ /dev/null
@@ -1,111 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import Vue from 'vue';
-import Vuex from 'vuex';
-import ClusterFormDropdown from '~/create_cluster/components/cluster_form_dropdown.vue';
-import GkeSubnetworkDropdown from '~/create_cluster/gke_cluster/components/gke_subnetwork_dropdown.vue';
-import createClusterDropdownState from '~/create_cluster/store/cluster_dropdown/state';
-
-Vue.use(Vuex);
-
-describe('GkeSubnetworkDropdown', () => {
- let wrapper;
- let store;
- const defaultProps = { fieldName: 'field-name' };
- const selectedSubnetwork = '123456';
- const setSubnetwork = jest.fn();
-
- const buildStore = ({ clusterDropdownState } = {}) =>
- new Vuex.Store({
- state: {
- selectedSubnetwork,
- },
- actions: {
- setSubnetwork,
- },
- getters: {
- hasNetwork: () => false,
- },
- modules: {
- subnetworks: {
- namespaced: true,
- state: {
- ...createClusterDropdownState(),
- ...(clusterDropdownState || {}),
- },
- },
- },
- });
-
- const buildWrapper = (propsData = defaultProps) =>
- shallowMount(GkeSubnetworkDropdown, {
- propsData,
- store,
- });
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- it('sets correct field-name', () => {
- const fieldName = 'field-name';
-
- store = buildStore();
- wrapper = buildWrapper({ fieldName });
-
- expect(wrapper.find(ClusterFormDropdown).props('fieldName')).toBe(fieldName);
- });
-
- it('sets selected subnetwork as the dropdown value', () => {
- store = buildStore();
- wrapper = buildWrapper();
-
- expect(wrapper.find(ClusterFormDropdown).props('value')).toBe(selectedSubnetwork);
- });
-
- it('maps subnetworks store items to the dropdown items property', () => {
- const items = [{ name: 'subnetwork' }];
-
- store = buildStore({ clusterDropdownState: { items } });
- wrapper = buildWrapper();
-
- expect(wrapper.find(ClusterFormDropdown).props('items')).toBe(items);
- });
-
- describe('when subnetwork dropdown store is loading items', () => {
- it('sets subnetwork dropdown as loading', () => {
- store = buildStore({ clusterDropdownState: { isLoadingItems: true } });
- wrapper = buildWrapper();
-
- expect(wrapper.find(ClusterFormDropdown).props('loading')).toBe(true);
- });
- });
-
- describe('when there is no selected network', () => {
- it('disables the subnetwork dropdown', () => {
- store = buildStore();
- wrapper = buildWrapper();
-
- expect(wrapper.find(ClusterFormDropdown).props('disabled')).toBe(true);
- });
- });
-
- describe('when an error occurs while loading subnetworks', () => {
- it('sets the subnetwork dropdown as having errors', () => {
- store = buildStore({ clusterDropdownState: { loadingItemsError: new Error() } });
- wrapper = buildWrapper();
-
- expect(wrapper.find(ClusterFormDropdown).props('hasErrors')).toBe(true);
- });
- });
-
- describe('when dropdown emits input event', () => {
- it('dispatches the setSubnetwork action', () => {
- store = buildStore();
- wrapper = buildWrapper();
-
- wrapper.find(ClusterFormDropdown).vm.$emit('input', selectedSubnetwork);
-
- expect(setSubnetwork).toHaveBeenCalledWith(expect.anything(), selectedSubnetwork);
- });
- });
-});
diff --git a/spec/frontend/create_cluster/gke_cluster/components/gke_zone_dropdown_spec.js b/spec/frontend/create_cluster/gke_cluster/components/gke_zone_dropdown_spec.js
deleted file mode 100644
index 7b4c228b879..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/components/gke_zone_dropdown_spec.js
+++ /dev/null
@@ -1,103 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import { nextTick } from 'vue';
-import GkeZoneDropdown from '~/create_cluster/gke_cluster/components/gke_zone_dropdown.vue';
-import { createStore } from '~/create_cluster/gke_cluster/store';
-import {
- SET_PROJECT,
- SET_ZONES,
- SET_PROJECT_BILLING_STATUS,
-} from '~/create_cluster/gke_cluster/store/mutation_types';
-import DropdownButton from '~/vue_shared/components/dropdown/dropdown_button.vue';
-import DropdownHiddenInput from '~/vue_shared/components/dropdown/dropdown_hidden_input.vue';
-import { selectedZoneMock, selectedProjectMock, gapiZonesResponseMock } from '../mock_data';
-
-const propsData = {
- fieldId: 'cluster_provider_gcp_attributes_gcp_zone',
- fieldName: 'cluster[provider_gcp_attributes][gcp_zone]',
-};
-
-const LABELS = {
- LOADING: 'Fetching zones',
- DISABLED: 'Select project to choose zone',
- DEFAULT: 'Select zone',
-};
-
-describe('GkeZoneDropdown', () => {
- let store;
- let wrapper;
-
- beforeEach(() => {
- store = createStore();
- wrapper = shallowMount(GkeZoneDropdown, { propsData, store });
- });
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- describe('toggleText', () => {
- let dropdownButton;
-
- beforeEach(() => {
- dropdownButton = wrapper.find(DropdownButton);
- });
-
- it('returns disabled state toggle text', () => {
- expect(dropdownButton.props('toggleText')).toBe(LABELS.DISABLED);
- });
-
- describe('isLoading', () => {
- beforeEach(async () => {
- // setData usage is discouraged. See https://gitlab.com/groups/gitlab-org/-/epics/7330 for details
- // eslint-disable-next-line no-restricted-syntax
- wrapper.setData({ isLoading: true });
- await nextTick();
- });
-
- it('returns loading toggle text', () => {
- expect(dropdownButton.props('toggleText')).toBe(LABELS.LOADING);
- });
- });
-
- describe('project is set', () => {
- beforeEach(async () => {
- wrapper.vm.$store.commit(SET_PROJECT, selectedProjectMock);
- wrapper.vm.$store.commit(SET_PROJECT_BILLING_STATUS, true);
- await nextTick();
- });
-
- it('returns default toggle text', () => {
- expect(dropdownButton.props('toggleText')).toBe(LABELS.DEFAULT);
- });
- });
-
- describe('project is selected', () => {
- beforeEach(async () => {
- wrapper.vm.setItem(selectedZoneMock);
- await nextTick();
- });
-
- it('returns project name if project selected', () => {
- expect(dropdownButton.props('toggleText')).toBe(selectedZoneMock);
- });
- });
- });
-
- describe('selectItem', () => {
- beforeEach(async () => {
- wrapper.vm.$store.commit(SET_ZONES, gapiZonesResponseMock.items);
- await nextTick();
- });
-
- it('reflects new value when dropdown item is clicked', async () => {
- const dropdown = wrapper.find(DropdownHiddenInput);
-
- expect(dropdown.attributes('value')).toBe('');
-
- wrapper.find('.dropdown-content button').trigger('click');
-
- await nextTick();
- expect(dropdown.attributes('value')).toBe(selectedZoneMock);
- });
- });
-});
diff --git a/spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js b/spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js
deleted file mode 100644
index 9e4d6996340..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import gapiLoader from '~/create_cluster/gke_cluster/gapi_loader';
-
-describe('gapiLoader', () => {
- // A mock for document.head.appendChild to intercept the script tag injection.
- let mockDOMHeadAppendChild;
-
- beforeEach(() => {
- mockDOMHeadAppendChild = jest.spyOn(document.head, 'appendChild');
- });
-
- afterEach(() => {
- mockDOMHeadAppendChild.mockRestore();
- delete window.gapi;
- delete window.gapiPromise;
- delete window.onGapiLoad;
- });
-
- it('returns a promise', () => {
- expect(gapiLoader()).toBeInstanceOf(Promise);
- });
-
- it('returns the same promise when already loading', () => {
- const first = gapiLoader();
- const second = gapiLoader();
- expect(first).toBe(second);
- });
-
- it('resolves the promise when the script loads correctly', async () => {
- mockDOMHeadAppendChild.mockImplementationOnce((script) => {
- script.removeAttribute('src');
- script.appendChild(
- document.createTextNode(`window.gapi = 'hello gapi'; window.onGapiLoad()`),
- );
- document.head.appendChild(script);
- });
- await expect(gapiLoader()).resolves.toBe('hello gapi');
- expect(mockDOMHeadAppendChild).toHaveBeenCalled();
- });
-
- it('rejects the promise when the script fails loading', async () => {
- mockDOMHeadAppendChild.mockImplementationOnce((script) => {
- script.onerror(new Error('hello error'));
- });
- await expect(gapiLoader()).rejects.toThrow('hello error');
- expect(mockDOMHeadAppendChild).toHaveBeenCalled();
- });
-});
diff --git a/spec/frontend/create_cluster/gke_cluster/helpers.js b/spec/frontend/create_cluster/gke_cluster/helpers.js
deleted file mode 100644
index 026e99fa8f4..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/helpers.js
+++ /dev/null
@@ -1,64 +0,0 @@
-import {
- gapiProjectsResponseMock,
- gapiZonesResponseMock,
- gapiMachineTypesResponseMock,
-} from './mock_data';
-
-const cloudbilling = {
- projects: {
- getBillingInfo: jest.fn(
- () =>
- new Promise((resolve) => {
- resolve({
- result: { billingEnabled: true },
- });
- }),
- ),
- },
-};
-
-const cloudresourcemanager = {
- projects: {
- list: jest.fn(
- () =>
- new Promise((resolve) => {
- resolve({
- result: { ...gapiProjectsResponseMock },
- });
- }),
- ),
- },
-};
-
-const compute = {
- zones: {
- list: jest.fn(
- () =>
- new Promise((resolve) => {
- resolve({
- result: { ...gapiZonesResponseMock },
- });
- }),
- ),
- },
- machineTypes: {
- list: jest.fn(
- () =>
- new Promise((resolve) => {
- resolve({
- result: { ...gapiMachineTypesResponseMock },
- });
- }),
- ),
- },
-};
-
-const gapi = {
- client: {
- cloudbilling,
- cloudresourcemanager,
- compute,
- },
-};
-
-export { gapi as default };
diff --git a/spec/frontend/create_cluster/gke_cluster/mock_data.js b/spec/frontend/create_cluster/gke_cluster/mock_data.js
deleted file mode 100644
index d9f5dbc636f..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/mock_data.js
+++ /dev/null
@@ -1,75 +0,0 @@
-export const emptyProjectMock = {
- projectId: '',
- name: '',
-};
-
-export const selectedProjectMock = {
- projectId: 'gcp-project-123',
- name: 'gcp-project',
-};
-
-export const selectedZoneMock = 'us-central1-a';
-
-export const selectedMachineTypeMock = 'n1-standard-2';
-
-export const gapiProjectsResponseMock = {
- projects: [
- {
- projectNumber: '1234',
- projectId: 'gcp-project-123',
- lifecycleState: 'ACTIVE',
- name: 'gcp-project',
- createTime: '2017-12-16T01:48:29.129Z',
- parent: {
- type: 'organization',
- id: '12345',
- },
- },
- ],
-};
-
-export const gapiZonesResponseMock = {
- kind: 'compute#zoneList',
- id: 'projects/gitlab-internal-153318/zones',
- items: [
- {
- kind: 'compute#zone',
- id: '2000',
- creationTimestamp: '1969-12-31T16:00:00.000-08:00',
- name: 'us-central1-a',
- description: 'us-central1-a',
- status: 'UP',
- region:
- 'https://www.googleapis.com/compute/v1/projects/gitlab-internal-153318/regions/us-central1',
- selfLink:
- 'https://www.googleapis.com/compute/v1/projects/gitlab-internal-153318/zones/us-central1-a',
- availableCpuPlatforms: ['Intel Skylake', 'Intel Broadwell', 'Intel Sandy Bridge'],
- },
- ],
- selfLink: 'https://www.googleapis.com/compute/v1/projects/gitlab-internal-153318/zones',
-};
-
-export const gapiMachineTypesResponseMock = {
- kind: 'compute#machineTypeList',
- id: 'projects/gitlab-internal-153318/zones/us-central1-a/machineTypes',
- items: [
- {
- kind: 'compute#machineType',
- id: '3002',
- creationTimestamp: '1969-12-31T16:00:00.000-08:00',
- name: 'n1-standard-2',
- description: '2 vCPUs, 7.5 GB RAM',
- guestCpus: 2,
- memoryMb: 7680,
- imageSpaceGb: 10,
- maximumPersistentDisks: 64,
- maximumPersistentDisksSizeGb: '65536',
- zone: 'us-central1-a',
- selfLink:
- 'https://www.googleapis.com/compute/v1/projects/gitlab-internal-153318/zones/us-central1-a/machineTypes/n1-standard-2',
- isSharedCpu: false,
- },
- ],
- selfLink:
- 'https://www.googleapis.com/compute/v1/projects/gitlab-internal-153318/zones/us-central1-a/machineTypes',
-};
diff --git a/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js b/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js
deleted file mode 100644
index c365cb6a9f4..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js
+++ /dev/null
@@ -1,141 +0,0 @@
-import testAction from 'helpers/vuex_action_helper';
-import * as actions from '~/create_cluster/gke_cluster/store/actions';
-import * as types from '~/create_cluster/gke_cluster/store/mutation_types';
-import createState from '~/create_cluster/gke_cluster/store/state';
-import gapi from '../helpers';
-import {
- selectedProjectMock,
- selectedZoneMock,
- selectedMachineTypeMock,
- gapiProjectsResponseMock,
- gapiZonesResponseMock,
- gapiMachineTypesResponseMock,
-} from '../mock_data';
-
-describe('GCP Cluster Dropdown Store Actions', () => {
- describe('setProject', () => {
- it('should set project', () => {
- return testAction(
- actions.setProject,
- selectedProjectMock,
- { selectedProject: {} },
- [{ type: 'SET_PROJECT', payload: selectedProjectMock }],
- [],
- );
- });
- });
-
- describe('setZone', () => {
- it('should set zone', () => {
- return testAction(
- actions.setZone,
- selectedZoneMock,
- { selectedZone: '' },
- [{ type: 'SET_ZONE', payload: selectedZoneMock }],
- [],
- );
- });
- });
-
- describe('setMachineType', () => {
- it('should set machine type', () => {
- return testAction(
- actions.setMachineType,
- selectedMachineTypeMock,
- { selectedMachineType: '' },
- [{ type: 'SET_MACHINE_TYPE', payload: selectedMachineTypeMock }],
- [],
- );
- });
- });
-
- describe('setIsValidatingProjectBilling', () => {
- it('should set machine type', () => {
- return testAction(
- actions.setIsValidatingProjectBilling,
- true,
- { isValidatingProjectBilling: null },
- [{ type: 'SET_IS_VALIDATING_PROJECT_BILLING', payload: true }],
- [],
- );
- });
- });
-
- describe('async fetch methods', () => {
- let originalGapi;
-
- beforeAll(() => {
- originalGapi = window.gapi;
- window.gapi = gapi;
- window.gapiPromise = Promise.resolve(gapi);
- });
-
- afterAll(() => {
- window.gapi = originalGapi;
- delete window.gapiPromise;
- });
-
- describe('fetchProjects', () => {
- it('fetches projects from Google API', () => {
- const state = createState();
-
- return testAction(
- actions.fetchProjects,
- null,
- state,
- [{ type: types.SET_PROJECTS, payload: gapiProjectsResponseMock.projects }],
- [],
- );
- });
- });
-
- describe('validateProjectBilling', () => {
- it('checks project billing status from Google API', () => {
- return testAction(
- actions.validateProjectBilling,
- true,
- {
- selectedProject: selectedProjectMock,
- selectedZone: '',
- selectedMachineType: '',
- projectHasBillingEnabled: null,
- },
- [
- { type: 'SET_ZONE', payload: '' },
- { type: 'SET_MACHINE_TYPE', payload: '' },
- { type: 'SET_PROJECT_BILLING_STATUS', payload: true },
- ],
- [{ type: 'setIsValidatingProjectBilling', payload: false }],
- );
- });
- });
-
- describe('fetchZones', () => {
- it('fetches zones from Google API', () => {
- const state = createState();
-
- return testAction(
- actions.fetchZones,
- null,
- state,
- [{ type: types.SET_ZONES, payload: gapiZonesResponseMock.items }],
- [],
- );
- });
- });
-
- describe('fetchMachineTypes', () => {
- it('fetches machine types from Google API', () => {
- const state = createState();
-
- return testAction(
- actions.fetchMachineTypes,
- null,
- state,
- [{ type: types.SET_MACHINE_TYPES, payload: gapiMachineTypesResponseMock.items }],
- [],
- );
- });
- });
- });
-});
diff --git a/spec/frontend/create_cluster/gke_cluster/stores/getters_spec.js b/spec/frontend/create_cluster/gke_cluster/stores/getters_spec.js
deleted file mode 100644
index 39106c3f6ca..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/stores/getters_spec.js
+++ /dev/null
@@ -1,103 +0,0 @@
-import {
- hasProject,
- hasZone,
- hasMachineType,
- hasValidData,
-} from '~/create_cluster/gke_cluster/store/getters';
-import { selectedProjectMock, selectedZoneMock, selectedMachineTypeMock } from '../mock_data';
-
-describe('GCP Cluster Dropdown Store Getters', () => {
- let state;
-
- describe('valid states', () => {
- beforeEach(() => {
- state = {
- projectHasBillingEnabled: true,
- selectedProject: selectedProjectMock,
- selectedZone: selectedZoneMock,
- selectedMachineType: selectedMachineTypeMock,
- };
- });
-
- describe('hasProject', () => {
- it('should return true when project is selected', () => {
- expect(hasProject(state)).toEqual(true);
- });
- });
-
- describe('hasZone', () => {
- it('should return true when zone is selected', () => {
- expect(hasZone(state)).toEqual(true);
- });
- });
-
- describe('hasMachineType', () => {
- it('should return true when machine type is selected', () => {
- expect(hasMachineType(state)).toEqual(true);
- });
- });
-
- describe('hasValidData', () => {
- it('should return true when a project, zone and machine type are selected', () => {
- expect(hasValidData(state, { hasZone: true, hasMachineType: true })).toEqual(true);
- });
- });
- });
-
- describe('invalid states', () => {
- beforeEach(() => {
- state = {
- selectedProject: {
- projectId: '',
- name: '',
- },
- selectedZone: '',
- selectedMachineType: '',
- };
- });
-
- describe('hasProject', () => {
- it('should return false when project is not selected', () => {
- expect(hasProject(state)).toEqual(false);
- });
- });
-
- describe('hasZone', () => {
- it('should return false when zone is not selected', () => {
- expect(hasZone(state)).toEqual(false);
- });
- });
-
- describe('hasMachineType', () => {
- it('should return false when machine type is not selected', () => {
- expect(hasMachineType(state)).toEqual(false);
- });
- });
-
- describe('hasValidData', () => {
- let getters;
-
- beforeEach(() => {
- getters = { hasZone: true, hasMachineType: true };
- });
-
- it('should return false when project is not billable', () => {
- state.projectHasBillingEnabled = false;
-
- expect(hasValidData(state, getters)).toEqual(false);
- });
-
- it('should return false when zone is not selected', () => {
- getters.hasZone = false;
-
- expect(hasValidData(state, getters)).toEqual(false);
- });
-
- it('should return false when machine type is not selected', () => {
- getters.hasMachineType = false;
-
- expect(hasValidData(state, getters)).toEqual(false);
- });
- });
- });
-});
diff --git a/spec/frontend/create_cluster/gke_cluster/stores/mutations_spec.js b/spec/frontend/create_cluster/gke_cluster/stores/mutations_spec.js
deleted file mode 100644
index 4493d49af43..00000000000
--- a/spec/frontend/create_cluster/gke_cluster/stores/mutations_spec.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import * as types from '~/create_cluster/gke_cluster/store/mutation_types';
-import mutations from '~/create_cluster/gke_cluster/store/mutations';
-import createState from '~/create_cluster/gke_cluster/store/state';
-import {
- gapiProjectsResponseMock,
- gapiZonesResponseMock,
- gapiMachineTypesResponseMock,
-} from '../mock_data';
-
-describe('GCP Cluster Dropdown Store Mutations', () => {
- describe.each`
- mutation | stateProperty | mockData
- ${types.SET_PROJECTS} | ${'projects'} | ${gapiProjectsResponseMock.projects}
- ${types.SET_ZONES} | ${'zones'} | ${gapiZonesResponseMock.items}
- ${types.SET_MACHINE_TYPES} | ${'machineTypes'} | ${gapiMachineTypesResponseMock.items}
- ${types.SET_MACHINE_TYPE} | ${'selectedMachineType'} | ${gapiMachineTypesResponseMock.items[0].name}
- ${types.SET_ZONE} | ${'selectedZone'} | ${gapiZonesResponseMock.items[0].name}
- ${types.SET_PROJECT} | ${'selectedProject'} | ${gapiProjectsResponseMock.projects[0]}
- ${types.SET_PROJECT_BILLING_STATUS} | ${'projectHasBillingEnabled'} | ${true}
- ${types.SET_IS_VALIDATING_PROJECT_BILLING} | ${'isValidatingProjectBilling'} | ${true}
- `('$mutation', ({ mutation, stateProperty, mockData }) => {
- it(`should set the mutation payload to the ${stateProperty} state property`, () => {
- const state = createState();
-
- expect(state[stateProperty]).not.toBe(mockData);
-
- mutations[mutation](state, mockData);
-
- expect(state[stateProperty]).toBe(mockData);
- });
- });
-});