Fixed health check issue
[portal.git] / portal-BE / src / test / java / org / onap / portal / controller / WidgetsControllerTest.java
1 /*
2  * ============LICENSE_START==========================================
3  * ONAP Portal
4  * ===================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ===================================================================
7  * Modifications Copyright (c) 2019 Samsung
8  * ===================================================================
9  *
10  * Unless otherwise specified, all software contained herein is licensed
11  * under the Apache License, Version 2.0 (the "License");
12  * you may not use this software except in compliance with the License.
13  * You may obtain a copy of the License at
14  *
15  *             http://www.apache.org/licenses/LICENSE-2.0
16  *
17  * Unless required by applicable law or agreed to in writing, software
18  * distributed under the License is distributed on an "AS IS" BASIS,
19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20  * See the License for the specific language governing permissions and
21  * limitations under the License.
22  *
23  * Unless otherwise specified, all documentation contained herein is licensed
24  * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
25  * you may not use this documentation except in compliance with the License.
26  * You may obtain a copy of the License at
27  *
28  *             https://creativecommons.org/licenses/by/4.0/
29  *
30  * Unless required by applicable law or agreed to in writing, documentation
31  * distributed under the License is distributed on an "AS IS" BASIS,
32  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
33  * See the License for the specific language governing permissions and
34  * limitations under the License.
35  *
36  * ============LICENSE_END============================================
37  *
38  *
39  */
40
41 package org.onap.portal.controller;
42
43 import static junit.framework.TestCase.assertEquals;
44 import static junit.framework.TestCase.assertNull;
45 import static org.mockito.Mockito.when;
46
47 import java.io.IOException;
48 import java.time.LocalDateTime;
49 import java.util.ArrayList;
50 import java.util.List;
51 import javax.servlet.http.HttpServletRequest;
52 import javax.servlet.http.HttpServletResponse;
53 import org.junit.Before;
54 import org.junit.Test;
55 import org.junit.runner.RunWith;
56 import org.onap.portal.domain.db.fn.FnLanguage;
57 import org.onap.portal.domain.db.fn.FnUser;
58 import org.onap.portal.domain.db.fn.FnWidget;
59 import org.onap.portal.domain.dto.transport.FieldsValidator;
60 import org.onap.portal.domain.dto.transport.OnboardingWidget;
61 import org.onap.portal.domain.dto.transport.WidgetCatalogPersonalization;
62 import org.onap.portal.framework.MockitoTestSuite;
63 import org.onap.portal.service.user.FnUserService;
64 import org.onap.portal.service.widget.WidgetService;
65 import org.onap.portal.service.language.FnLanguageService;
66 import org.springframework.beans.factory.annotation.Autowired;
67 import org.springframework.boot.test.context.SpringBootTest;
68 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
69 import org.springframework.security.core.userdetails.UsernameNotFoundException;
70 import org.springframework.test.context.TestPropertySource;
71 import org.springframework.test.context.junit4.SpringRunner;
72 import org.springframework.transaction.annotation.Transactional;
73
74 @RunWith(SpringRunner.class)
75 @SpringBootTest
76 @TestPropertySource(locations = "classpath:test.properties")
77 @Transactional
78 public class WidgetsControllerTest {
79
80        private final UsernamePasswordAuthenticationToken principal = new UsernamePasswordAuthenticationToken("demo",
81                "demo123");
82
83        final MockitoTestSuite mockitoTestSuite = new MockitoTestSuite();
84
85        final HttpServletRequest request = mockitoTestSuite.getMockedRequest();
86        final HttpServletResponse response = mockitoTestSuite.getMockedResponse();
87
88        @Autowired
89        private WidgetsController widgetsController;
90        @Autowired
91        private WidgetService widgetService;
92        @Autowired
93        private  FnLanguageService fnLanguageService;
94        @Autowired
95        FnUserService fnUserService;
96        private FnLanguage language;
97        private FnUser questUser;
98        private FnUser notQuestUser;
99
100        @Before
101        public void init(){
102               this.language = getFnLanguage();
103               this.questUser = getQuestUser();
104               this.notQuestUser = getNotQuestUser();
105        }
106
107
108        @Test(expected = UsernameNotFoundException.class)
109        public void getOnboardingWidgetsNullUserTest() {
110               UsernamePasswordAuthenticationToken nullPrincipal = new UsernamePasswordAuthenticationToken("nulluser",
111                       "demo123");
112               widgetsController.getOnboardingWidgets(nullPrincipal, request, response);
113        }
114
115        @Test
116        public void getOnboardingWidgetsQuestUserTest() {
117               UsernamePasswordAuthenticationToken questPrincipal = new UsernamePasswordAuthenticationToken("questUser",
118                       "demo123");
119               fnUserService.save(questUser);
120               List<OnboardingWidget> onboardingWidgets = widgetsController
121                       .getOnboardingWidgets(questPrincipal, request, response);
122               assertNull(onboardingWidgets);
123
124               //Clean up
125               fnUserService.delete(questUser);
126               fnLanguageService.delete(language);
127        }
128
129        @Test
130        public void getOnboardingWidgetsUserTest() {
131               UsernamePasswordAuthenticationToken notQuestprincipal = new UsernamePasswordAuthenticationToken(
132                       "notQuestUser",
133                       "demo123");
134               fnUserService.save(notQuestUser);
135               List<OnboardingWidget> expected = new ArrayList<>();
136               when(request.getHeader("X-Widgets-Type")).thenReturn("managed");
137
138               List<OnboardingWidget> actual = widgetsController
139                       .getOnboardingWidgets(notQuestprincipal, request, response);
140
141               assertEquals(expected, actual);
142               fnUserService.delete(notQuestUser);
143        }
144
145        @Test
146        public void getOnboardingWidgetsWrongHeaderTest() {
147               UsernamePasswordAuthenticationToken notQuestprincipal = new UsernamePasswordAuthenticationToken(
148                       "notQuestUser",
149                       "demo123");
150               fnUserService.save(notQuestUser);
151               when(request.getHeader("X-Widgets-Type")).thenReturn("test");
152               List<OnboardingWidget> actual = widgetsController
153                       .getOnboardingWidgets(notQuestprincipal, request, response);
154
155               assertNull(actual);
156               fnUserService.delete(notQuestUser);
157        }
158
159        @Test
160        public void putOnboardingWidgetSameWidget() {
161               //Given
162               fnUserService.save(notQuestUser);
163               when(request.getHeader("X-Widgets-Type")).thenReturn("managed");
164
165               OnboardingWidget onboardingWidget = OnboardingWidget.builder()
166                       .id(123L)
167                       .name("Application")
168                       .appId(1421L)
169                       .appName("Application name")
170                       .width(123)
171                       .height(45)
172                       .url("testurl")
173                       .build();
174
175               FnWidget fnWidget = FnWidget.builder()
176                       .name("Application")
177                       .appId(453L)
178                       .width(123)
179                       .height(45)
180                       .url("testurl")
181                       .build();
182
183               widgetService.saveOne(fnWidget);
184
185               FieldsValidator expected = new FieldsValidator();
186               //When
187               FieldsValidator actual = widgetsController
188                       .putOnboardingWidget(principal, fnWidget.getWidgetId(), onboardingWidget, response);
189               //Then
190               assertEquals(expected.getErrorCode(), actual.getErrorCode());
191               assertEquals(expected.getHttpStatusCode(), actual.getHttpStatusCode());
192               assertEquals(expected.getFields(), actual.getFields());
193        }
194
195        @Test
196        public void putOnboardingWidgetAOP() {
197               //Given
198               fnUserService.save(notQuestUser);
199               when(request.getHeader("X-Widgets-Type")).thenReturn("managed");
200
201               OnboardingWidget onboardingWidget = OnboardingWidget.builder()
202                       .id(123L)
203                       .name("")
204                       .appId(1L)
205                       .appName("")
206                       .width(123)
207                       .height(45)
208                       .url("testurl")
209                       .build();
210
211               FnWidget fnWidget = FnWidget.builder()
212                       .name("Application")
213                       .appId(1421L)
214                       .width(123)
215                       .height(45)
216                       .url("testurl")
217                       .build();
218
219               widgetService.saveOne(fnWidget);
220
221               FieldsValidator expected = new FieldsValidator();
222               expected.setHttpStatusCode(406L);
223               expected.addProblematicFieldName("appName can't be blank, appId value must be higher than 1");
224               //When
225               FieldsValidator actual = widgetsController
226                       .putOnboardingWidget(principal, fnWidget.getWidgetId(), onboardingWidget, response);
227               //Then
228               assertEquals(expected.getHttpStatusCode(), actual.getHttpStatusCode());
229               assertEquals(expected.getFields().size(), actual.getFields().size());
230        }
231
232        @Test
233        public void putOnboardingWidgetAOPXSSTest() {
234               //Given
235               fnUserService.save(notQuestUser);
236               when(request.getHeader("X-Widgets-Type")).thenReturn("managed");
237
238               OnboardingWidget onboardingWidget = OnboardingWidget.builder()
239                       .id(123L)
240                       .name("<script>alert(“XSS”);</script>\n")
241                       .appId(34L)
242                       .appName("<ScRipT>alert(\"XSS\");</ScRipT>")
243                       .width(123)
244                       .height(45)
245                       .url("testurl")
246                       .build();
247
248               FieldsValidator expected = new FieldsValidator();
249               expected.setHttpStatusCode(406L);
250               expected.addProblematicFieldName(
251                       "appName may have unsafe html content, name may have unsafe html content");
252               //When
253               FieldsValidator actual = widgetsController
254                       .putOnboardingWidget(principal, 15L, onboardingWidget, response);
255               //Then
256               assertEquals(expected.getHttpStatusCode(), actual.getHttpStatusCode());
257               assertEquals(expected.getFields().size(), actual.getFields().size());
258        }
259
260        @Test
261        public void postOnboardingWidgetXSS() {
262               //Given
263               fnUserService.save(notQuestUser);
264               when(request.getHeader("X-Widgets-Type")).thenReturn("managed");
265
266               OnboardingWidget onboardingWidget = OnboardingWidget.builder()
267                       .id(123L)
268                       .name("<script>alert(“XSS”);</script>\n")
269                       .appId(34L)
270                       .appName("<ScRipT>alert(\"XSS\");</ScRipT>")
271                       .width(123)
272                       .height(45)
273                       .url("testurl")
274                       .build();
275
276               FieldsValidator expected = new FieldsValidator();
277               expected.setHttpStatusCode(406L);
278               expected.addProblematicFieldName("appName may have unse html content, name may have unsafe html content");
279               //When
280               FieldsValidator actual = widgetsController.postOnboardingWidget(principal, response, onboardingWidget);
281               //Then
282               assertEquals(expected.getHttpStatusCode(), actual.getHttpStatusCode());
283               assertEquals(expected.getFields().size(), actual.getFields().size());
284        }
285
286        @Test
287        public void postOnboardingWidget() {
288               //Given
289               fnUserService.save(notQuestUser);
290               when(request.getHeader("X-Widgets-Type")).thenReturn("managed");
291
292               OnboardingWidget onboardingWidget = OnboardingWidget.builder()
293                       .id(123L)
294                       .name("appname")
295                       .appId(34L)
296                       .appName("appname")
297                       .width(123)
298                       .height(45)
299                       .url("testurl")
300                       .build();
301
302               FieldsValidator expected = new FieldsValidator();
303               expected.setHttpStatusCode(200L);
304               //When
305               FieldsValidator actual = widgetsController.postOnboardingWidget(principal, response, onboardingWidget);
306               //Then
307               assertEquals(expected.getHttpStatusCode(), actual.getHttpStatusCode());
308               assertEquals(expected.getFields().size(), actual.getFields().size());
309        }
310
311        @Test
312        public void deleteOnboardingWidgetSCFORBIDDEN() {
313               //Given
314               fnUserService.save(notQuestUser);
315               when(request.getHeader("X-Widgets-Type")).thenReturn("managed");
316
317               OnboardingWidget onboardingWidget = OnboardingWidget.builder()
318                       .id(123L)
319                       .name("")
320                       .appId(1L)
321                       .appName("rtyrty")
322                       .width(123)
323                       .height(45)
324                       .url("testurl")
325                       .build();
326
327               FnWidget fnWidget = FnWidget.builder()
328                       .name("Application")
329                       .appId(1421L)
330                       .width(123)
331                       .height(45)
332                       .url("testurl")
333                       .build();
334
335               widgetService.saveOne(fnWidget);
336
337
338
339               FieldsValidator expected = new FieldsValidator();
340               expected.setHttpStatusCode(500L);
341               expected.addProblematicFieldName("appName can't be blank, appId value must be higher than 1");
342
343               //When
344               widgetsController.putOnboardingWidget(principal, fnWidget.getWidgetId(), onboardingWidget, response);
345
346               FieldsValidator actual = widgetsController.deleteOnboardingWidget(principal, response, fnWidget.getWidgetId());
347               //Then
348               assertEquals(expected.getHttpStatusCode(), actual.getHttpStatusCode());
349        }
350
351        @Test
352        public void putWidgetCatalogSelection() throws IOException {
353               //Give
354               WidgetCatalogPersonalization personalization = new WidgetCatalogPersonalization(7L, true);
355
356               FieldsValidator expected = new FieldsValidator();
357               expected.setHttpStatusCode(200L);
358               expected.addProblematicFieldName("");
359               //When
360               FieldsValidator actual = widgetsController.putWidgetCatalogSelection(principal, personalization, response);
361               //Then
362               assertEquals(expected.getHttpStatusCode(), actual.getHttpStatusCode());
363        }
364
365        private FnUser getQuestUser() {
366               return FnUser.builder()
367                       .loginId("questUser")
368                       .loginPwd("demo123")
369                       .lastLoginDate(LocalDateTime.now())
370                       .activeYn(true)
371                       .createdDate(LocalDateTime.now())
372                       .modifiedDate(LocalDateTime.now())
373                       .isInternalYn(true)
374                       .languageId(language)
375                       .isSystemUser(true)
376                       .guest(true)
377                       .build();
378        }
379
380        private FnUser getNotQuestUser() {
381               return FnUser.builder()
382                       .loginId("notQuestUser")
383                       .loginPwd("demo123")
384                       .lastLoginDate(LocalDateTime.now())
385                       .activeYn(true)
386                       .createdDate(LocalDateTime.now())
387                       .modifiedDate(LocalDateTime.now())
388                       .isInternalYn(true)
389                       .isSystemUser(true)
390                       .languageId(language)
391                       .guest(false)
392                       .build();
393        }
394
395
396        private FnLanguage getFnLanguage() {
397               FnLanguage tmp = FnLanguage.builder().languageName("Polish").languageAlias("Pl").build();
398               fnLanguageService.save(tmp);
399               return tmp;
400        }
401 }