summaryrefslogtreecommitdiff
path: root/spec/frontend/create_cluster
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-08 00:07:43 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-08 00:07:43 +0000
commit2b3bfe8fc59ed4cdc385955cdb38cbd481b45426 (patch)
tree6b570a8d134fb2beeacf11bbcc79ff22123156ec /spec/frontend/create_cluster
parentd203316c80aa27cf747aa29df9f7c2d374965b5f (diff)
downloadgitlab-ce-2b3bfe8fc59ed4cdc385955cdb38cbd481b45426.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/create_cluster')
-rw-r--r--spec/frontend/create_cluster/gke_cluster/components/gke_machine_type_dropdown_spec.js136
-rw-r--r--spec/frontend/create_cluster/gke_cluster/mock_data.js75
2 files changed, 211 insertions, 0 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
new file mode 100644
index 00000000000..d6a752d761d
--- /dev/null
+++ b/spec/frontend/create_cluster/gke_cluster/components/gke_machine_type_dropdown_spec.js
@@ -0,0 +1,136 @@
+import { shallowMount, createLocalVue } from '@vue/test-utils';
+import Vuex from 'vuex';
+import { selectedMachineTypeMock, gapiMachineTypesResponseMock } from '../mock_data';
+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 GkeMachineTypeDropdown from '~/create_cluster/gke_cluster/components/gke_machine_type_dropdown.vue';
+
+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',
+};
+
+const localVue = createLocalVue();
+
+localVue.use(Vuex);
+
+const createComponent = (store, propsData = componentConfig) =>
+ shallowMount(GkeMachineTypeDropdown, {
+ propsData,
+ store,
+ localVue,
+ sync: false,
+ });
+
+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', () => {
+ store = createStore();
+ wrapper = createComponent(store);
+
+ wrapper.setData({ isLoading: true });
+
+ return wrapper.vm.$nextTick().then(() => {
+ 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', () => {
+ store = createStore({
+ machineTypes: gapiMachineTypesResponseMock.items,
+ });
+ wrapper = createComponent(store);
+
+ expect(dropdownHiddenInputValue()).toBe('');
+
+ wrapper.find('.dropdown-content button').trigger('click');
+
+ return wrapper.vm.$nextTick().then(() => {
+ expect(setMachineType).toHaveBeenCalledWith(
+ expect.anything(),
+ selectedMachineTypeMock,
+ undefined,
+ );
+ });
+ });
+ });
+});
diff --git a/spec/frontend/create_cluster/gke_cluster/mock_data.js b/spec/frontend/create_cluster/gke_cluster/mock_data.js
new file mode 100644
index 00000000000..d9f5dbc636f
--- /dev/null
+++ b/spec/frontend/create_cluster/gke_cluster/mock_data.js
@@ -0,0 +1,75 @@
+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',
+};