From 08cdfa25a5a781673c78f7ec33c23d03164e197a Mon Sep 17 00:00:00 2001 From: Dominik Mizyn Date: Mon, 26 Aug 2019 15:51:40 +0200 Subject: [PATCH] UserController tests up UserController tests up Issue-ID: PORTAL-710 Signed-off-by: Dominik Mizyn Change-Id: Ic7cd8926d7daa5dcbf746d1315d3cf5123f094ac --- portal-BE/pom.xml | 8 +- .../org/onap/portal/controller/UserController.java | 118 +++++++++++---------- .../org/onap/portal/domain/dto/ProfileDetail.java | 33 +++++- .../org/onap/portal/validation/DataValidator.java | 6 ++ .../onap/portal/controller/UserControllerTest.java | 112 +++++++++++++++++++ 5 files changed, 219 insertions(+), 58 deletions(-) create mode 100644 portal-BE/src/test/java/org/onap/portal/controller/UserControllerTest.java diff --git a/portal-BE/pom.xml b/portal-BE/pom.xml index 51e831eb..a63fb4c8 100644 --- a/portal-BE/pom.xml +++ b/portal-BE/pom.xml @@ -126,7 +126,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs spring-security-test test - + + javax.servlet + javax.servlet-api + 4.0.1 + compile + + diff --git a/portal-BE/src/main/java/org/onap/portal/controller/UserController.java b/portal-BE/src/main/java/org/onap/portal/controller/UserController.java index a679192a..d514dfae 100644 --- a/portal-BE/src/main/java/org/onap/portal/controller/UserController.java +++ b/portal-BE/src/main/java/org/onap/portal/controller/UserController.java @@ -41,80 +41,86 @@ package org.onap.portal.controller; import java.security.Principal; +import lombok.NoArgsConstructor; import org.onap.portal.domain.db.fn.FnUser; import org.onap.portal.domain.dto.PortalRestResponse; import org.onap.portal.domain.dto.PortalRestStatusEnum; import org.onap.portal.domain.dto.ProfileDetail; import org.onap.portal.service.fn.FnUserService; +import org.onap.portal.validation.DataValidator; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.onboarding.util.CipherUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.session.SessionRegistry; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController +@Controller public class UserController { - private static final String HIDDEN_DEFAULT_PASSWORD = "*****"; - private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserController.class); + private static final String HIDDEN_DEFAULT_PASSWORD = "*****"; + private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserController.class); - private final FnUserService userService; + private final FnUserService userService; + private final DataValidator dataValidator; - @Autowired - public UserController(FnUserService userService) { - this.userService = userService; - } + @Autowired + public UserController(final FnUserService userService, + final DataValidator dataValidator) { + this.userService = userService; + this.dataValidator = dataValidator; + } - @RequestMapping(value = { "/portalApi/loggedinUser" }, method = RequestMethod.GET, produces = "application/json") - public PortalRestResponse getLoggedinUser(Principal principal) { - PortalRestResponse portalRestResponse = null; - try { - FnUser user = userService.loadUserByUsername(principal.getName()); - ProfileDetail profileDetail = new ProfileDetail(user.getFirstName(), user.getLastName(), - user.getMiddleName(), user.getEmail(), user.getLoginId(), HIDDEN_DEFAULT_PASSWORD); - portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", - profileDetail); - } catch (Exception e) { - portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), - null); - logger.error(EELFLoggerDelegate.errorLogger, "getLoggedinUser failed", e); - } - return portalRestResponse; - } + @RequestMapping(value = {"/portalApi/loggedinUser"}, method = RequestMethod.GET, produces = "application/json") + public PortalRestResponse getLoggedinUser(Principal principal) { + PortalRestResponse portalRestResponse = null; + try { + FnUser user = userService.loadUserByUsername(principal.getName()); + ProfileDetail profileDetail = new ProfileDetail(user.getFirstName(), user.getLastName(), + user.getMiddleName(), user.getEmail(), user.getLoginId(), HIDDEN_DEFAULT_PASSWORD); + portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", + profileDetail); + } catch (Exception e) { + portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), + null); + logger.error(EELFLoggerDelegate.errorLogger, "getLoggedinUser failed", e); + } + return portalRestResponse; + } - @RequestMapping(value = { - "/portalApi/modifyLoggedinUser" }, method = RequestMethod.PUT, produces = "application/json") - public PortalRestResponse modifyLoggedinUser(Principal principal, - @RequestBody ProfileDetail profileDetail) { - PortalRestResponse portalRestResponse = null; - try { - String errorMsg = ""; - if (profileDetail.getFirstName().equals("") || profileDetail.getLastName().equals("") - || profileDetail.getEmail().equals("") || profileDetail.getLoginId().equals("") - || profileDetail.getLoginPassword().equals("")) { - errorMsg = "Required field(s) is missing"; - portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, errorMsg, null); - logger.error(EELFLoggerDelegate.errorLogger, "modifyLoggedinUser failed", errorMsg); - } else { - FnUser user = userService.loadUserByUsername(principal.getName()); - user.setFirstName(profileDetail.getFirstName()); - user.setLastName(profileDetail.getLastName()); - user.setEmail(profileDetail.getEmail()); - user.setMiddleName(profileDetail.getMiddleName()); - user.setLoginId(profileDetail.getLoginId()); - if (!HIDDEN_DEFAULT_PASSWORD.equals(profileDetail.getLoginPassword())){ - user.setLoginPwd(CipherUtil.encryptPKC(profileDetail.getLoginPassword())); - } - userService.saveFnUser(principal, user); - // Update user info in the session - portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", null); - } - } catch (Exception e) { - portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.toString(), null); - logger.error(EELFLoggerDelegate.errorLogger, "modifyLoggedinUser failed", e); - } - return portalRestResponse; - } + @RequestMapping(value = { + "/portalApi/modifyLoggedinUser"}, method = RequestMethod.PUT, produces = "application/json") + public PortalRestResponse modifyLoggedinUser(Principal principal, + @RequestBody ProfileDetail profileDetail) { + PortalRestResponse portalRestResponse = null; + try { + String errorMsg = ""; + if (!dataValidator.isValid(profileDetail)) { + errorMsg = "Required field(s) is missing"; + portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, dataValidator.getConstraintViolationsString(profileDetail), null); + logger.error(EELFLoggerDelegate.errorLogger, "modifyLoggedinUser failed", errorMsg); + } else { + FnUser user = userService.loadUserByUsername(principal.getName()); + user.setFirstName(profileDetail.getFirstName()); + user.setLastName(profileDetail.getLastName()); + user.setEmail(profileDetail.getEmail()); + user.setMiddleName(profileDetail.getMiddleName()); + user.setLoginId(profileDetail.getLoginId()); + if (!HIDDEN_DEFAULT_PASSWORD.equals(profileDetail.getLoginPassword())) { + user.setLoginPwd(CipherUtil.encryptPKC(profileDetail.getLoginPassword())); + } + userService.saveFnUser(principal, user); + // Update user info in the session + portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", null); + } + } catch (Exception e) { + portalRestResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.toString(), null); + logger.error(EELFLoggerDelegate.errorLogger, "modifyLoggedinUser failed", e); + } + return portalRestResponse; + } } diff --git a/portal-BE/src/main/java/org/onap/portal/domain/dto/ProfileDetail.java b/portal-BE/src/main/java/org/onap/portal/domain/dto/ProfileDetail.java index e43c14d6..aec69a71 100644 --- a/portal-BE/src/main/java/org/onap/portal/domain/dto/ProfileDetail.java +++ b/portal-BE/src/main/java/org/onap/portal/domain/dto/ProfileDetail.java @@ -38,22 +38,53 @@ package org.onap.portal.domain.dto; +import java.util.Objects; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.ToString; @Setter @Getter @NoArgsConstructor @AllArgsConstructor +@ToString public class ProfileDetail { - + @NotBlank(message = "firstName must not be blank") private String firstName; + @NotBlank(message = "lastName must not be blank") private String lastName; private String middleName; + @Email + @NotBlank(message = "email must not be blank") private String email; + @NotBlank(message = "loginId must not be blank") private String loginId; + @NotBlank(message = "loginPassword must not be blank") private String loginPassword; + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof ProfileDetail)) { + return false; + } + ProfileDetail that = (ProfileDetail) o; + return Objects.equals(firstName, that.firstName) && + Objects.equals(lastName, that.lastName) && + Objects.equals(middleName, that.middleName) && + Objects.equals(email, that.email) && + Objects.equals(loginId, that.loginId) && + Objects.equals(loginPassword, that.loginPassword); + } + + @Override + public int hashCode() { + return Objects.hash(firstName, lastName, middleName, email, loginId, loginPassword); + } } diff --git a/portal-BE/src/main/java/org/onap/portal/validation/DataValidator.java b/portal-BE/src/main/java/org/onap/portal/validation/DataValidator.java index ad0a9f18..80ad9b70 100644 --- a/portal-BE/src/main/java/org/onap/portal/validation/DataValidator.java +++ b/portal-BE/src/main/java/org/onap/portal/validation/DataValidator.java @@ -41,10 +41,12 @@ package org.onap.portal.validation; import java.util.Set; +import java.util.stream.Collectors; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; +import org.apache.poi.ss.formula.functions.T; import org.springframework.stereotype.Service; @Service @@ -66,6 +68,10 @@ public class DataValidator { return validator.validate(classToValid); } + public String getConstraintViolationsString(E classToValid){ + return getConstraintViolations(classToValid).stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(", ")); + } + public boolean isValid(E classToValid) { Set> constraintViolations = getConstraintViolations(classToValid); return constraintViolations.isEmpty(); diff --git a/portal-BE/src/test/java/org/onap/portal/controller/UserControllerTest.java b/portal-BE/src/test/java/org/onap/portal/controller/UserControllerTest.java new file mode 100644 index 00000000..b216799f --- /dev/null +++ b/portal-BE/src/test/java/org/onap/portal/controller/UserControllerTest.java @@ -0,0 +1,112 @@ +/*- + * ============LICENSE_START========================================== + * ONAP Portal + * =================================================================== + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * + * Unless otherwise specified, all software contained herein is licensed + * under the Apache License, Version 2.0 (the "License"); + * you may not use this software except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Unless otherwise specified, all documentation contained herein is licensed + * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); + * you may not use this documentation except in compliance with the License. + * You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ============LICENSE_END============================================ + * + * + */ + +package org.onap.portal.controller; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import lombok.AllArgsConstructor; +import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; +import org.onap.portal.domain.dto.PortalRestResponse; +import org.onap.portal.domain.dto.PortalRestStatusEnum; +import org.onap.portal.domain.dto.ProfileDetail; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +@TestPropertySource(locations="classpath:test.properties") +class UserControllerTest { + private UsernamePasswordAuthenticationToken principal = new UsernamePasswordAuthenticationToken("demo", "XZa6pS1vC0qKXWtn9wcZWdLx61L0="); + + private final UserController userController; + + @Autowired + UserControllerTest(UserController userController) { + this.userController = userController; + } + + @Test + void getLoggedinUser() { + ProfileDetail expectedDetails = new ProfileDetail(); + expectedDetails.setFirstName("Demo"); + expectedDetails.setLastName("User"); + expectedDetails.setEmail("demo@openecomp.org"); + expectedDetails.setLoginId("demo"); + expectedDetails.setLoginPassword("*****"); + PortalRestResponse expected = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", expectedDetails); + + PortalRestResponse actual = userController.getLoggedinUser(principal); + + assertEquals(expected.getStatus(), actual.getStatus()); + assertEquals(expected.getMessage(), actual.getMessage()); + assertEquals(expected.getResponse(), actual.getResponse()); + } + + @Test + void modifyLoggedinUserBlanklastName() { + ProfileDetail expectedDetails = new ProfileDetail(); + expectedDetails.setFirstName("Demo"); + expectedDetails.setLastName(""); + expectedDetails.setEmail("demo@openecomp.org"); + expectedDetails.setLoginId("demo"); + expectedDetails.setLoginPassword("*****"); + + PortalRestResponse actual = userController.modifyLoggedinUser(principal, expectedDetails); + PortalRestResponse expected = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "lastName must not be blank", null); + assertEquals(expected, actual); + } + + @Test + void modifyLoggedinUser() { + ProfileDetail expectedDetails = new ProfileDetail(); + expectedDetails.setFirstName("Demo"); + expectedDetails.setLastName("User"); + expectedDetails.setEmail("demo@openecomp.org"); + expectedDetails.setLoginId("demo"); + expectedDetails.setLoginPassword("*****"); + + PortalRestResponse actual = userController.modifyLoggedinUser(principal, expectedDetails); + PortalRestResponse expected = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", null); + assertEquals(expected, actual); + } +} \ No newline at end of file -- 2.16.6