]> source.dussan.org Git - sonarqube.git/blob
019f6e4210309308c86442cc5ad2c33bd2f8d0bd
[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       instances,
88       loading: false,
89       originalData: {
90         key: 'i1',
91         repository: 'account/repo'
92       }
93     })
94   ).toMatchSnapshot();
95 });
96
97 it('should display action state correctly', () => {
98   const urls = ['http://url.com'];
99   const instances = [{ key: 'key', url: urls[0], alm: AlmKeys.GitHub }];
100
101   expect(shallowRender({ instances, loading: false, saving: true })).toMatchSnapshot();
102   expect(shallowRender({ instances, loading: false, success: true })).toMatchSnapshot();
103   expect(
104     shallowRender({
105       instances,
106       isValid: true,
107       loading: false
108     })
109   ).toMatchSnapshot();
110 });
111
112 it('should render select options correctly', async () => {
113   const instances = [
114     {
115       alm: AlmKeys.Azure,
116       key: 'azure'
117     },
118     {
119       alm: AlmKeys.GitHub,
120       key: 'github',
121       url: 'gh.url.com'
122     }
123   ];
124   const wrapper = shallowRender({ loading: false, instances });
125   await waitAndUpdate(wrapper);
126
127   const optionRenderer = wrapper.find(Select).prop('optionRenderer');
128
129   expect(optionRenderer!(instances[0])).toMatchSnapshot();
130
131   expect(optionRenderer!(instances[1])).toMatchSnapshot();
132 });
133
134 it('should render optional fields correctly', () => {
135   expect(
136     shallowRender({
137       formData: {
138         key: 'key'
139       },
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       isValid={false}
155       loading={true}
156       onFieldChange={jest.fn()}
157       onReset={jest.fn()}
158       onSubmit={jest.fn()}
159       originalData={undefined}
160       saving={false}
161       success={false}
162       {...props}
163     />
164   );
165 }