]> source.dussan.org Git - sonarqube.git/blob
9bb9c158a99b4dd090bb6723b8982ac380dbfe4c
[sonarqube.git] /
1 /*
2  * SonarQube
3  * Copyright (C) 2009-2021 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 function shallowRender(props: Partial<PRDecorationBindingRendererProps> = {}) {
133   return shallow(
134     <PRDecorationBindingRenderer
135       formData={{
136         key: '',
137         repository: ''
138       }}
139       instances={[]}
140       isChanged={false}
141       isConfigured={false}
142       isValid={false}
143       loading={true}
144       onFieldChange={jest.fn()}
145       onReset={jest.fn()}
146       onSubmit={jest.fn()}
147       saving={false}
148       success={false}
149       monorepoEnabled={false}
150       {...props}
151     />
152   );
153 }