UserController tests up

UserController tests up

Issue-ID: PORTAL-710
Signed-off-by: Dominik Mizyn <d.mizyn@samsung.com>
Change-Id: Ic7cd8926d7daa5dcbf746d1315d3cf5123f094ac
diff --git a/portal-BE/pom.xml b/portal-BE/pom.xml
index 51e831e..a63fb4c 100644
--- a/portal-BE/pom.xml
+++ b/portal-BE/pom.xml
@@ -126,7 +126,13 @@
 			<artifactId>spring-security-test</artifactId>
 			<scope>test</scope>
 		</dependency>
-	</dependencies>
+            <dependency>
+                  <groupId>javax.servlet</groupId>
+                  <artifactId>javax.servlet-api</artifactId>
+                  <version>4.0.1</version>
+                  <scope>compile</scope>
+            </dependency>
+      </dependencies>
 
 	<build>
 		<plugins>
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 a679192..d514dfa 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<ProfileDetail> getLoggedinUser(Principal principal) {
-		PortalRestResponse<ProfileDetail> 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<ProfileDetail> getLoggedinUser(Principal principal) {
+              PortalRestResponse<ProfileDetail> 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<String> modifyLoggedinUser(Principal principal,
-			@RequestBody ProfileDetail profileDetail) {
-		PortalRestResponse<String> 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<String> modifyLoggedinUser(Principal principal,
+               @RequestBody ProfileDetail profileDetail) {
+              PortalRestResponse<String> 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 e43c14d..aec69a7 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 ad0a9f1..80ad9b7 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 @@
               return validator.validate(classToValid);
        }
 
+       public <E> String getConstraintViolationsString(E classToValid){
+              return getConstraintViolations(classToValid).stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(", "));
+       }
+
        public <E> boolean isValid(E classToValid) {
               Set<ConstraintViolation<E>> 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 0000000..b216799
--- /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<ProfileDetail> expected = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", expectedDetails);
+
+              PortalRestResponse<ProfileDetail> 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<String> actual = userController.modifyLoggedinUser(principal, expectedDetails);
+              PortalRestResponse<String> 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<String> actual = userController.modifyLoggedinUser(principal, expectedDetails);
+              PortalRestResponse<String> expected = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", null);
+              assertEquals(expected, actual);
+       }
+}
\ No newline at end of file