]> source.dussan.org Git - sonarqube.git/blob
a9940e730e25f3571d8285df044276331dfad398
[sonarqube.git] /
1 /*
2  * SonarQube
3  * Copyright (C) 2009-2020 SonarSource SA
4  * mailto:info AT sonarsource DOT com
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 3 of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19  */
20 import { shallow } from 'enzyme';
21 import * as React from 'react';
22 import Select from 'sonar-ui-common/components/controls/Select';
23 import { waitAndUpdate } from 'sonar-ui-common/helpers/testUtils';
24 import { AlmKeys } from '../../../../../types/alm-settings';
25 import PRDecorationBindingRenderer, {
26   PRDecorationBindingRendererProps
27 } from '../PRDecorationBindingRenderer';
28
29 it('should render correctly', () => {
30   expect(shallowRender()).toMatchSnapshot();
31   expect(shallowRender({ loading: false })).toMatchSnapshot();
32 });
33
34 it('should render single instance correctly', () => {
35   const singleInstance = {
36     key: 'single',
37     url: 'http://single.url',
38     alm: AlmKeys.GitHub
39   };
40   expect(
41     shallowRender({
42       loading: false,
43       instances: [singleInstance]
44     })
45   ).toMatchSnapshot();
46 });
47
48 it('should render multiple instances correctly', () => {
49   const urls = ['http://github.enterprise.com', 'http://bbs.enterprise.com'];
50   const instances = [
51     {
52       alm: AlmKeys.GitHub,
53       key: 'i1',
54       url: urls[0]
55     },
56     {
57       alm: AlmKeys.GitHub,
58       key: 'i2',
59       url: urls[0]
60     },
61     {
62       alm: AlmKeys.Bitbucket,
63       key: 'i3',
64       url: urls[1]
65     },
66     {
67       alm: AlmKeys.Azure,
68       key: 'i4'
69     }
70   ];
71
72   //unfilled
73   expect(
74     shallowRender({
75       instances,
76       loading: false
77     })
78   ).toMatchSnapshot();
79
80   // filled
81   expect(
82     shallowRender({
83       formData: {
84         key: 'i1',
85         repository: 'account/repo'
86       },
87       isChanged: false,
88       isConfigured: true,
89       instances,
90       loading: false
91     })
92   ).toMatchSnapshot();
93 });
94
95 it('should display action state correctly', () => {
96   const urls = ['http://url.com'];
97   const instances = [{ key: 'key', url: urls[0], alm: AlmKeys.GitHub }];
98
99   expect(shallowRender({ instances, loading: false, saving: true })).toMatchSnapshot();
100   expect(shallowRender({ instances, loading: false, success: true })).toMatchSnapshot();
101   expect(
102     shallowRender({
103       instances,
104       isValid: true,
105       loading: false
106     })
107   ).toMatchSnapshot();
108 });
109
110 it('should render select options correctly', async () => {
111   const instances = [
112     {
113       alm: AlmKeys.Azure,
114       key: 'azure'
115     },
116     {
117       alm: AlmKeys.GitHub,
118       key: 'github',
119       url: 'gh.url.com'
120     }
121   ];
122   const wrapper = shallowRender({ loading: false, instances });
123   await waitAndUpdate(wrapper);
124
125   const optionRenderer = wrapper.find(Select).prop('optionRenderer');
126
127   expect(optionRenderer!(instances[0])).toMatchSnapshot();
128
129   expect(optionRenderer!(instances[1])).toMatchSnapshot();
130 });
131
132 it('should render optional fields correctly', () => {
133   expect(
134     shallowRender({
135       formData: {
136         key: 'key'
137       },
138       isChanged: true,
139       isConfigured: false,
140       instances: [{ key: 'key', url: 'http://example.com', alm: AlmKeys.GitLab }],
141       loading: false
142     })
143   ).toMatchSnapshot();
144 });
145
146 function shallowRender(props: Partial<PRDecorationBindingRendererProps> = {}) {
147   return shallow(
148     <PRDecorationBindingRenderer
149       formData={{
150         key: '',
151         repository: ''
152       }}
153       instances={[]}
154       isChanged={false}
155       isConfigured={false}
156       isValid={false}
157       loading={true}
158       onFieldChange={jest.fn()}
159       onReset={jest.fn()}
160       onSubmit={jest.fn()}
161       saving={false}
162       success={false}
163       {...props}
164     />
165   );
166 }