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/clusters/forms/components/integration_form_spec.js')
-rw-r--r--spec/frontend/clusters/forms/components/integration_form_spec.js112
1 files changed, 112 insertions, 0 deletions
diff --git a/spec/frontend/clusters/forms/components/integration_form_spec.js b/spec/frontend/clusters/forms/components/integration_form_spec.js
new file mode 100644
index 00000000000..3a3700eb0b7
--- /dev/null
+++ b/spec/frontend/clusters/forms/components/integration_form_spec.js
@@ -0,0 +1,112 @@
+import Vuex from 'vuex';
+import { shallowMount, createLocalVue } from '@vue/test-utils';
+import { GlToggle, GlButton } from '@gitlab/ui';
+import IntegrationForm from '~/clusters/forms/components/integration_form.vue';
+import { createStore } from '~/clusters/forms/stores/index';
+
+const localVue = createLocalVue();
+localVue.use(Vuex);
+
+describe('ClusterIntegrationForm', () => {
+ let wrapper;
+
+ const defaultStoreValues = {
+ enabled: true,
+ editable: true,
+ environmentScope: '*',
+ baseDomain: 'testDomain',
+ applicationIngressExternalIp: null,
+ };
+
+ const createWrapper = (storeValues = defaultStoreValues) => {
+ wrapper = shallowMount(IntegrationForm, {
+ localVue,
+ store: createStore(storeValues),
+ provide: {
+ autoDevopsHelpPath: 'topics/autodevops/index',
+ externalEndpointHelpPath: 'user/clusters/applications.md',
+ },
+ });
+ };
+
+ const destroyWrapper = () => {
+ wrapper.destroy();
+ wrapper = null;
+ };
+
+ const findSubmitButton = () => wrapper.find(GlButton);
+ const findGlToggle = () => wrapper.find(GlToggle);
+
+ afterEach(() => {
+ destroyWrapper();
+ });
+
+ describe('rendering', () => {
+ beforeEach(() => createWrapper());
+
+ it('enables toggle if editable is true', () => {
+ expect(findGlToggle().props('disabled')).toBe(false);
+ });
+ it('sets the envScope to default', () => {
+ expect(wrapper.find('[id="cluster_environment_scope"]').attributes('value')).toBe('*');
+ });
+
+ it('sets the baseDomain to default', () => {
+ expect(wrapper.find('[id="cluster_base_domain"]').attributes('value')).toBe('testDomain');
+ });
+
+ describe('when editable is false', () => {
+ beforeEach(() => {
+ createWrapper({ ...defaultStoreValues, editable: false });
+ });
+
+ it('disables toggle if editable is false', () => {
+ expect(findGlToggle().props('disabled')).toBe(true);
+ });
+
+ it('does not render the save button', () => {
+ expect(findSubmitButton().exists()).toBe(false);
+ });
+ });
+
+ it('does not render external IP block if applicationIngressExternalIp was not passed', () => {
+ createWrapper({ ...defaultStoreValues });
+
+ expect(wrapper.find('.js-ingress-domain-help-text').exists()).toBe(false);
+ });
+
+ it('renders external IP block if applicationIngressExternalIp was passed', () => {
+ createWrapper({ ...defaultStoreValues, applicationIngressExternalIp: '127.0.0.1' });
+
+ expect(wrapper.find('.js-ingress-domain-help-text').exists()).toBe(true);
+ });
+ });
+
+ describe('reactivity', () => {
+ beforeEach(() => createWrapper());
+
+ it('enables the submit button on changing toggle to different value', () => {
+ return wrapper.vm
+ .$nextTick()
+ .then(() => {
+ // setData is a bad approach because it changes the internal implementation which we should not touch
+ // but our GlFormInput lacks the ability to set a new value.
+ wrapper.setData({ toggleEnabled: !defaultStoreValues.enabled });
+ })
+ .then(() => {
+ expect(findSubmitButton().props('disabled')).toBe(false);
+ });
+ });
+
+ it('enables the submit button on changing input values', () => {
+ return wrapper.vm
+ .$nextTick()
+ .then(() => {
+ wrapper.setData({ envScope: `${defaultStoreValues.environmentScope}1` });
+ })
+ .then(() => {
+ expect(findSubmitButton().props('disabled')).toBe(false);
+ });
+ });
+ });
+});