Welcome to mirror list, hosted at ThFree Co, Russian Federation.

integration_form_spec.js « components « edit « integrations « frontend « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: b598a71cea819fa90c9b75059eba1d74529aed25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import { shallowMount } from '@vue/test-utils';
import IntegrationForm from '~/integrations/edit/components/integration_form.vue';
import ActiveToggle from '~/integrations/edit/components/active_toggle.vue';
import JiraTriggerFields from '~/integrations/edit/components/jira_trigger_fields.vue';
import TriggerFields from '~/integrations/edit/components/trigger_fields.vue';
import DynamicField from '~/integrations/edit/components/dynamic_field.vue';

describe('IntegrationForm', () => {
  let wrapper;

  const defaultProps = {
    activeToggleProps: {
      initialActivated: true,
    },
    showActive: true,
    triggerFieldsProps: {
      initialTriggerCommit: false,
      initialTriggerMergeRequest: false,
      initialEnableComments: false,
    },
    type: '',
  };

  const createComponent = props => {
    wrapper = shallowMount(IntegrationForm, {
      propsData: { ...defaultProps, ...props },
      stubs: {
        ActiveToggle,
        JiraTriggerFields,
      },
    });
  };

  afterEach(() => {
    if (wrapper) {
      wrapper.destroy();
      wrapper = null;
    }
  });

  const findActiveToggle = () => wrapper.find(ActiveToggle);
  const findJiraTriggerFields = () => wrapper.find(JiraTriggerFields);
  const findTriggerFields = () => wrapper.find(TriggerFields);

  describe('template', () => {
    describe('showActive is true', () => {
      it('renders ActiveToggle', () => {
        createComponent();

        expect(findActiveToggle().exists()).toBe(true);
      });
    });

    describe('showActive is false', () => {
      it('does not render ActiveToggle', () => {
        createComponent({
          showActive: false,
        });

        expect(findActiveToggle().exists()).toBe(false);
      });
    });

    describe('type is "slack"', () => {
      it('does not render JiraTriggerFields', () => {
        createComponent({
          type: 'slack',
        });

        expect(findJiraTriggerFields().exists()).toBe(false);
      });
    });

    describe('type is "jira"', () => {
      it('renders JiraTriggerFields', () => {
        createComponent({
          type: 'jira',
        });

        expect(findJiraTriggerFields().exists()).toBe(true);
      });
    });

    describe('triggerEvents is present', () => {
      it('renders TriggerFields', () => {
        const events = [{ title: 'push' }];
        const type = 'slack';

        createComponent({
          triggerEvents: events,
          type,
        });

        expect(findTriggerFields().exists()).toBe(true);
        expect(findTriggerFields().props('events')).toBe(events);
        expect(findTriggerFields().props('type')).toBe(type);
      });
    });

    describe('fields is present', () => {
      it('renders DynamicField for each field', () => {
        const fields = [
          { name: 'username', type: 'text' },
          { name: 'API token', type: 'password' },
        ];

        createComponent({
          fields,
        });

        const dynamicFields = wrapper.findAll(DynamicField);

        expect(dynamicFields).toHaveLength(2);
        dynamicFields.wrappers.forEach((field, index) => {
          expect(field.props()).toMatchObject(fields[index]);
        });
      });
    });
  });
});