diff options
author | Dennis Tang <dtang@gitlab.com> | 2018-05-23 16:12:07 +0200 |
---|---|---|
committer | Dennis Tang <dtang@gitlab.com> | 2018-05-23 16:12:07 +0200 |
commit | 4e0e0552c674c44d7e6ddd2acb08cd6c1857093c (patch) | |
tree | fc688a08cbf68aca428cdf9dd98ee6e033cc258e | |
parent | c960fea1814f116bd44c38a7313777fd24733a31 (diff) | |
download | gitlab-ce-4e0e0552c674c44d7e6ddd2acb08cd6c1857093c.tar.gz |
fix tests
each suite needs its own instance of the store, but the state has to be returned via a factory otherwise the suites all share the same reference to one state object
7 files changed, 73 insertions, 53 deletions
diff --git a/app/assets/javascripts/projects/gke_cluster_dropdowns/store/index.js b/app/assets/javascripts/projects/gke_cluster_dropdowns/store/index.js index 458ca1b3164..10fdfe53094 100644 --- a/app/assets/javascripts/projects/gke_cluster_dropdowns/store/index.js +++ b/app/assets/javascripts/projects/gke_cluster_dropdowns/store/index.js @@ -3,13 +3,16 @@ import Vuex from 'vuex'; import * as actions from './actions'; import * as getters from './getters'; import mutations from './mutations'; -import state from './state'; +import { state } from './state'; Vue.use(Vuex); -export default new Vuex.Store({ - actions, - getters, - mutations, - state, -}); +export const createStore = () => + new Vuex.Store({ + actions, + getters, + mutations, + state: state(), + }); + +export default createStore(); diff --git a/app/assets/javascripts/projects/gke_cluster_dropdowns/store/state.js b/app/assets/javascripts/projects/gke_cluster_dropdowns/store/state.js index 5ed8a8da7b5..fb3ead38215 100644 --- a/app/assets/javascripts/projects/gke_cluster_dropdowns/store/state.js +++ b/app/assets/javascripts/projects/gke_cluster_dropdowns/store/state.js @@ -1,4 +1,4 @@ -export default { +export const state = () => ({ selectedProject: { projectId: '', name: '', @@ -9,4 +9,6 @@ export default { projects: [], zones: [], machineTypes: [], -}; +}); + +export default state(); diff --git a/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_machine_type_dropdown_spec.js b/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_machine_type_dropdown_spec.js index a30a54c7864..21805ef0b28 100644 --- a/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_machine_type_dropdown_spec.js +++ b/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_machine_type_dropdown_spec.js @@ -1,13 +1,13 @@ import Vue from 'vue'; import GkeMachineTypeDropdown from '~/projects/gke_cluster_dropdowns/components/gke_machine_type_dropdown.vue'; +import { createStore } from '~/projects/gke_cluster_dropdowns/store'; import { SET_PROJECT, + SET_PROJECT_BILLING_STATUS, SET_ZONE, SET_MACHINE_TYPES, } from '~/projects/gke_cluster_dropdowns/store/mutation_types'; -import mountComponent from 'spec/helpers/vue_mount_component_helper'; - -import { resetStore } from '../helpers'; +import { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper'; import { selectedZoneMock, selectedProjectMock, @@ -27,23 +27,27 @@ const LABELS = { DEFAULT: 'Select machine type', }; -const createComponent = (config = componentConfig) => { +const createComponent = (store, props = componentConfig) => { const Component = Vue.extend(GkeMachineTypeDropdown); - return mountComponent(Component, config); + return mountComponentWithStore(Component, { + el: null, + props, + store, + }); }; describe('GkeMachineTypeDropdown', () => { let vm; + let store; beforeEach(() => { - vm = createComponent(); + store = createStore(); + vm = createComponent(store); }); afterEach(() => { vm.$destroy(); - - resetStore(vm.$store); }); describe('shows various toggle text depending on state', () => { @@ -53,6 +57,7 @@ describe('GkeMachineTypeDropdown', () => { it('returns disabled state toggle text when no zone is selected', () => { vm.$store.commit(SET_PROJECT, selectedProjectMock); + vm.$store.commit(SET_PROJECT_BILLING_STATUS, true); expect(vm.toggleText).toBe(LABELS.DISABLED_NO_ZONE); }); @@ -67,6 +72,7 @@ describe('GkeMachineTypeDropdown', () => { expect(vm.toggleText).toBe(LABELS.DISABLED_NO_PROJECT); vm.$store.commit(SET_PROJECT, selectedProjectMock); + vm.$store.commit(SET_PROJECT_BILLING_STATUS, true); vm.$store.commit(SET_ZONE, selectedZoneMock); expect(vm.toggleText).toBe(LABELS.DEFAULT); diff --git a/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_project_id_dropdown_spec.js b/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_project_id_dropdown_spec.js index d6b396a3da8..f2417443783 100644 --- a/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_project_id_dropdown_spec.js +++ b/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_project_id_dropdown_spec.js @@ -1,9 +1,8 @@ import Vue from 'vue'; import GkeProjectIdDropdown from '~/projects/gke_cluster_dropdowns/components/gke_project_id_dropdown.vue'; +import { createStore } from '~/projects/gke_cluster_dropdowns/store'; import { SET_PROJECTS } from '~/projects/gke_cluster_dropdowns/store/mutation_types'; -import mountComponent from 'spec/helpers/vue_mount_component_helper'; - -import { resetStore } from '../helpers'; +import { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper'; import { emptyProjectMock, selectedProjectMock } from '../mock_data'; const componentConfig = { @@ -18,23 +17,27 @@ const LABELS = { EMPTY: 'No projects found', }; -const createComponent = (config = componentConfig) => { +const createComponent = (store, props = componentConfig) => { const Component = Vue.extend(GkeProjectIdDropdown); - return mountComponent(Component, config); + return mountComponentWithStore(Component, { + el: null, + props, + store, + }); }; describe('GkeProjectIdDropdown', () => { let vm; + let store; beforeEach(() => { - vm = createComponent(); + store = createStore(); + vm = createComponent(store); }); afterEach(() => { vm.$destroy(); - - resetStore(vm.$store); }); describe('toggleText', () => { diff --git a/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown_spec.js b/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown_spec.js index a3c23354b47..89a4a7ea2ce 100644 --- a/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown_spec.js +++ b/spec/javascripts/projects/gke_cluster_dropdowns/components/gke_zone_dropdown_spec.js @@ -1,9 +1,12 @@ import Vue from 'vue'; import GkeZoneDropdown from '~/projects/gke_cluster_dropdowns/components/gke_zone_dropdown.vue'; -import { SET_PROJECT, SET_ZONES } from '~/projects/gke_cluster_dropdowns/store/mutation_types'; -import mountComponent from 'spec/helpers/vue_mount_component_helper'; - -import { resetStore } from '../helpers'; +import { createStore } from '~/projects/gke_cluster_dropdowns/store'; +import { + SET_PROJECT, + SET_ZONES, + SET_PROJECT_BILLING_STATUS, +} from '~/projects/gke_cluster_dropdowns/store/mutation_types'; +import { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper'; import { selectedZoneMock, selectedProjectMock, gapiZonesResponseMock } from '../mock_data'; const componentConfig = { @@ -17,23 +20,27 @@ const LABELS = { DEFAULT: 'Select zone', }; -const createComponent = (config = componentConfig) => { +const createComponent = (store, props = componentConfig) => { const Component = Vue.extend(GkeZoneDropdown); - return mountComponent(Component, config); + return mountComponentWithStore(Component, { + el: null, + props, + store, + }); }; describe('GkeZoneDropdown', () => { let vm; + let store; beforeEach(() => { - vm = createComponent(); + store = createStore(); + vm = createComponent(store); }); afterEach(() => { vm.$destroy(); - - resetStore(vm.$store); }); describe('toggleText', () => { @@ -51,6 +58,8 @@ describe('GkeZoneDropdown', () => { expect(vm.toggleText).toBe(LABELS.DISABLED); vm.$store.commit(SET_PROJECT, selectedProjectMock); + vm.$store.commit(SET_PROJECT_BILLING_STATUS, true); + expect(vm.toggleText).toBe(LABELS.DEFAULT); }); diff --git a/spec/javascripts/projects/gke_cluster_dropdowns/helpers.js b/spec/javascripts/projects/gke_cluster_dropdowns/helpers.js index c34190d02f2..6df511e9157 100644 --- a/spec/javascripts/projects/gke_cluster_dropdowns/helpers.js +++ b/spec/javascripts/projects/gke_cluster_dropdowns/helpers.js @@ -5,23 +5,18 @@ import { } from './mock_data'; // eslint-disable-next-line import/prefer-default-export -export const resetStore = store => { - store.replaceState({ - selectedProject: { - projectId: '', - name: '', - }, - selectedZone: '', - selectedMachineType: '', - projects: [], - zones: [], - machineTypes: [], - }); -}; - -// eslint-disable-next-line import/prefer-default-export export const gapi = () => ({ client: { + cloudbilling: { + projects: { + getBillingInfo: () => + new Promise(resolve => { + resolve({ + result: { billingEnabled: true }, + }); + }), + }, + }, cloudresourcemanager: { projects: { list: () => diff --git a/spec/javascripts/projects/gke_cluster_dropdowns/stores/actions_spec.js b/spec/javascripts/projects/gke_cluster_dropdowns/stores/actions_spec.js index 02ce780e3fb..ea4c96055d7 100644 --- a/spec/javascripts/projects/gke_cluster_dropdowns/stores/actions_spec.js +++ b/spec/javascripts/projects/gke_cluster_dropdowns/stores/actions_spec.js @@ -1,12 +1,14 @@ import testAction from 'spec/helpers/vuex_action_helper'; import * as actions from '~/projects/gke_cluster_dropdowns/store/actions'; -import store from '~/projects/gke_cluster_dropdowns/store'; -import { resetStore, gapi } from '../helpers'; +import { createStore } from '~/projects/gke_cluster_dropdowns/store'; +import { gapi } from '../helpers'; import { selectedProjectMock, selectedZoneMock, selectedMachineTypeMock } from '../mock_data'; describe('GCP Cluster Dropdown Store Actions', () => { - afterEach(() => { - resetStore(store); + let store; + + beforeEach(() => { + store = createStore(); }); describe('setProject', () => { |