diff options
Diffstat (limited to 'spec/frontend/create_cluster')
11 files changed, 81 insertions, 44 deletions
diff --git a/spec/frontend/create_cluster/components/cluster_form_dropdown_spec.js b/spec/frontend/create_cluster/components/cluster_form_dropdown_spec.js index 17abf409717..90c0e2d7827 100644 --- a/spec/frontend/create_cluster/components/cluster_form_dropdown_spec.js +++ b/spec/frontend/create_cluster/components/cluster_form_dropdown_spec.js @@ -8,9 +8,9 @@ import DropdownSearchInput from '~/vue_shared/components/dropdown/dropdown_searc describe('ClusterFormDropdown', () => { let wrapper; - const firstItem = { name: 'item 1', value: 1 }; - const secondItem = { name: 'item 2', value: 2 }; - const items = [firstItem, secondItem, { name: 'item 3', value: 3 }]; + const firstItem = { name: 'item 1', value: '1' }; + const secondItem = { name: 'item 2', value: '2' }; + const items = [firstItem, secondItem, { name: 'item 3', value: '3' }]; beforeEach(() => { wrapper = shallowMount(ClusterFormDropdown); @@ -44,10 +44,7 @@ describe('ClusterFormDropdown', () => { wrapper.setProps({ items }); return wrapper.vm.$nextTick().then(() => { - wrapper - .findAll('.js-dropdown-item') - .at(1) - .trigger('click'); + wrapper.findAll('.js-dropdown-item').at(1).trigger('click'); return wrapper.vm.$nextTick(); }); }); @@ -58,24 +55,18 @@ describe('ClusterFormDropdown', () => { }); describe('when multiple items are selected', () => { - const value = [1]; + const value = ['1']; beforeEach(() => { wrapper.setProps({ items, multiple: true, value }); return wrapper.vm .$nextTick() .then(() => { - wrapper - .findAll('.js-dropdown-item') - .at(0) - .trigger('click'); + wrapper.findAll('.js-dropdown-item').at(0).trigger('click'); return wrapper.vm.$nextTick(); }) .then(() => { - wrapper - .findAll('.js-dropdown-item') - .at(1) - .trigger('click'); + wrapper.findAll('.js-dropdown-item').at(1).trigger('click'); return wrapper.vm.$nextTick(); }); }); @@ -102,10 +93,7 @@ describe('ClusterFormDropdown', () => { wrapper.setProps({ items, multiple: true, value: null }); return wrapper.vm.$nextTick().then(() => { - wrapper - .findAll('.js-dropdown-item') - .at(0) - .trigger('click'); + wrapper.findAll('.js-dropdown-item').at(0).trigger('click'); expect(wrapper.emitted('input')[0]).toEqual([[firstItem.value]]); }); @@ -116,7 +104,7 @@ describe('ClusterFormDropdown', () => { it('displays selected item custom label', () => { const labelProperty = 'customLabel'; const label = 'Name'; - const currentValue = 1; + const currentValue = '1'; const customLabelItems = [{ [labelProperty]: label, value: currentValue }]; wrapper.setProps({ labelProperty, items: customLabelItems, value: currentValue }); @@ -128,12 +116,9 @@ describe('ClusterFormDropdown', () => { }); describe('when loading', () => { - it('dropdown button isLoading', () => { - wrapper.setProps({ loading: true }); - - return wrapper.vm.$nextTick().then(() => { - expect(wrapper.find(DropdownButton).props('isLoading')).toBe(true); - }); + it('dropdown button isLoading', async () => { + await wrapper.setProps({ loading: true }); + expect(wrapper.find(DropdownButton).props('isLoading')).toBe(true); }); }); diff --git a/spec/frontend/create_cluster/eks_cluster/components/eks_cluster_configuration_form_spec.js b/spec/frontend/create_cluster/eks_cluster/components/eks_cluster_configuration_form_spec.js index f9984091df0..a4835f8c1c1 100644 --- a/spec/frontend/create_cluster/eks_cluster/components/eks_cluster_configuration_form_spec.js +++ b/spec/frontend/create_cluster/eks_cluster/components/eks_cluster_configuration_form_spec.js @@ -128,7 +128,7 @@ describe('EksClusterConfigurationForm', () => { }); }; - const createValidStateStore = initialState => { + const createValidStateStore = (initialState) => { createStore({ initialState: { clusterName: 'cluster name', diff --git a/spec/frontend/create_cluster/eks_cluster/services/aws_services_facade_spec.js b/spec/frontend/create_cluster/eks_cluster/services/aws_services_facade_spec.js index 03c22c570a8..2853d18e2cb 100644 --- a/spec/frontend/create_cluster/eks_cluster/services/aws_services_facade_spec.js +++ b/spec/frontend/create_cluster/eks_cluster/services/aws_services_facade_spec.js @@ -101,7 +101,10 @@ describe('awsServicesFacade', () => { let vpcsOutput; beforeEach(() => { - vpcs = [{ VpcId: 'vpc-1', Tags: [] }, { VpcId: 'vpc-2', Tags: [] }]; + vpcs = [ + { VpcId: 'vpc-1', Tags: [] }, + { VpcId: 'vpc-2', Tags: [] }, + ]; vpcsOutput = vpcs.map(({ VpcId: vpcId }) => ({ name: vpcId, value: vpcId })); mockDescribeVpcsPromise.mockResolvedValueOnce({ Vpcs: vpcs }); diff --git a/spec/frontend/create_cluster/eks_cluster/store/actions_spec.js b/spec/frontend/create_cluster/eks_cluster/store/actions_spec.js index f14a555f357..35348d3a03b 100644 --- a/spec/frontend/create_cluster/eks_cluster/store/actions_spec.js +++ b/spec/frontend/create_cluster/eks_cluster/store/actions_spec.js @@ -94,7 +94,7 @@ describe('EKS Cluster Store Actions', () => { ${'setNodeCount'} | ${SET_NODE_COUNT} | ${{ nodeCount }} | ${'node count'} ${'setGitlabManagedCluster'} | ${SET_GITLAB_MANAGED_CLUSTER} | ${gitlabManagedCluster} | ${'gitlab managed cluster'} ${'setNamespacePerEnvironment'} | ${SET_NAMESPACE_PER_ENVIRONMENT} | ${namespacePerEnvironment} | ${'namespace per environment'} - `(`$action commits $mutation with $payloadDescription payload`, data => { + `(`$action commits $mutation with $payloadDescription payload`, (data) => { const { action, mutation, payload } = data; testAction(actions[action], payload, state, [{ type: mutation, payload }]); diff --git a/spec/frontend/create_cluster/eks_cluster/store/getters_spec.js b/spec/frontend/create_cluster/eks_cluster/store/getters_spec.js index 7c26aeb9b93..46c37961dd3 100644 --- a/spec/frontend/create_cluster/eks_cluster/store/getters_spec.js +++ b/spec/frontend/create_cluster/eks_cluster/store/getters_spec.js @@ -6,7 +6,7 @@ describe('EKS Cluster Store Getters', () => { expect(subnetValid({ selectedSubnet: [1, 2] })).toBe(true); }); - it.each([[[], [1]]])('returns false if there are 1 or less selected subnets', subnets => { + it.each([[[], [1]]])('returns false if there are 1 or less selected subnets', (subnets) => { expect(subnetValid({ selectedSubnet: subnets })).toBe(false); }); }); diff --git a/spec/frontend/create_cluster/eks_cluster/store/mutations_spec.js b/spec/frontend/create_cluster/eks_cluster/store/mutations_spec.js index 8bb014d4758..633cea595d1 100644 --- a/spec/frontend/create_cluster/eks_cluster/store/mutations_spec.js +++ b/spec/frontend/create_cluster/eks_cluster/store/mutations_spec.js @@ -66,7 +66,7 @@ describe('Create EKS cluster store mutations', () => { ${SET_INSTANCE_TYPE} | ${'selectedInstanceType'} | ${{ instanceType }} | ${instanceType} | ${'selected instance type payload'} ${SET_NODE_COUNT} | ${'nodeCount'} | ${{ nodeCount }} | ${nodeCount} | ${'node count payload'} ${SET_GITLAB_MANAGED_CLUSTER} | ${'gitlabManagedCluster'} | ${{ gitlabManagedCluster }} | ${gitlabManagedCluster} | ${'gitlab managed cluster'} - `(`$mutation sets $mutatedProperty to $expectedValueDescription`, data => { + `(`$mutation sets $mutatedProperty to $expectedValueDescription`, (data) => { const { mutation, mutatedProperty, payload, expectedValue } = data; mutations[mutation](state, payload); diff --git a/spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js b/spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js new file mode 100644 index 00000000000..9e4d6996340 --- /dev/null +++ b/spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js @@ -0,0 +1,47 @@ +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 index 52b43b82698..026e99fa8f4 100644 --- a/spec/frontend/create_cluster/gke_cluster/helpers.js +++ b/spec/frontend/create_cluster/gke_cluster/helpers.js @@ -8,7 +8,7 @@ const cloudbilling = { projects: { getBillingInfo: jest.fn( () => - new Promise(resolve => { + new Promise((resolve) => { resolve({ result: { billingEnabled: true }, }); @@ -21,7 +21,7 @@ const cloudresourcemanager = { projects: { list: jest.fn( () => - new Promise(resolve => { + new Promise((resolve) => { resolve({ result: { ...gapiProjectsResponseMock }, }); @@ -34,7 +34,7 @@ const compute = { zones: { list: jest.fn( () => - new Promise(resolve => { + new Promise((resolve) => { resolve({ result: { ...gapiZonesResponseMock }, }); @@ -44,7 +44,7 @@ const compute = { machineTypes: { list: jest.fn( () => - new Promise(resolve => { + new Promise((resolve) => { resolve({ result: { ...gapiMachineTypesResponseMock }, }); diff --git a/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js b/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js index c1ac3841136..8852baafec7 100644 --- a/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js +++ b/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js @@ -14,7 +14,7 @@ import { describe('GCP Cluster Dropdown Store Actions', () => { describe('setProject', () => { - it('should set project', done => { + it('should set project', (done) => { testAction( actions.setProject, selectedProjectMock, @@ -27,7 +27,7 @@ describe('GCP Cluster Dropdown Store Actions', () => { }); describe('setZone', () => { - it('should set zone', done => { + it('should set zone', (done) => { testAction( actions.setZone, selectedZoneMock, @@ -40,7 +40,7 @@ describe('GCP Cluster Dropdown Store Actions', () => { }); describe('setMachineType', () => { - it('should set machine type', done => { + it('should set machine type', (done) => { testAction( actions.setMachineType, selectedMachineTypeMock, @@ -53,7 +53,7 @@ describe('GCP Cluster Dropdown Store Actions', () => { }); describe('setIsValidatingProjectBilling', () => { - it('should set machine type', done => { + it('should set machine type', (done) => { testAction( actions.setIsValidatingProjectBilling, true, @@ -71,10 +71,12 @@ describe('GCP Cluster Dropdown Store Actions', () => { beforeAll(() => { originalGapi = window.gapi; window.gapi = gapi; + window.gapiPromise = Promise.resolve(gapi); }); afterAll(() => { window.gapi = originalGapi; + delete window.gapiPromise; }); describe('fetchProjects', () => { @@ -92,7 +94,7 @@ describe('GCP Cluster Dropdown Store Actions', () => { }); describe('validateProjectBilling', () => { - it('checks project billing status from Google API', done => { + it('checks project billing status from Google API', (done) => { testAction( actions.validateProjectBilling, true, diff --git a/spec/frontend/create_cluster/gke_cluster_namespace/gke_cluster_namespace_spec.js b/spec/frontend/create_cluster/gke_cluster_namespace/gke_cluster_namespace_spec.js index b1c25d8fff7..c22167a078c 100644 --- a/spec/frontend/create_cluster/gke_cluster_namespace/gke_cluster_namespace_spec.js +++ b/spec/frontend/create_cluster/gke_cluster_namespace/gke_cluster_namespace_spec.js @@ -2,8 +2,8 @@ import initGkeNamespace from '~/create_cluster/gke_cluster_namespace'; describe('GKE cluster namespace', () => { const changeEvent = new Event('change'); - const isHidden = el => el.classList.contains('hidden'); - const hasDisabledInput = el => el.querySelector('input').disabled; + const isHidden = (el) => el.classList.contains('hidden'); + const hasDisabledInput = (el) => el.querySelector('input').disabled; let glManagedCheckbox; let selfManaged; diff --git a/spec/frontend/create_cluster/store/cluster_dropdown/mutations_spec.js b/spec/frontend/create_cluster/store/cluster_dropdown/mutations_spec.js index 5edd237133d..4b700e31675 100644 --- a/spec/frontend/create_cluster/store/cluster_dropdown/mutations_spec.js +++ b/spec/frontend/create_cluster/store/cluster_dropdown/mutations_spec.js @@ -27,7 +27,7 @@ describe('Cluster dropdown store mutations', () => { ${RECEIVE_ITEMS_SUCCESS} | ${'items'} | ${{ items }} | ${items} | ${'items payload'} ${RECEIVE_ITEMS_ERROR} | ${'isLoadingItems'} | ${{ error }} | ${false} | ${false} ${RECEIVE_ITEMS_ERROR} | ${'error'} | ${{ error }} | ${error} | ${'received error object'} - `(`$mutation sets $mutatedProperty to $expectedValueDescription`, data => { + `(`$mutation sets $mutatedProperty to $expectedValueDescription`, (data) => { const { mutation, mutatedProperty, payload, expectedValue } = data; mutations[mutation](state, payload); |