From 854eca653b34514977be145f1696f0d7c8c46eec Mon Sep 17 00:00:00 2001 From: egemberdiev Date: Sat, 20 Feb 2016 22:34:08 +0600 Subject: [PATCH] FIX BUG: incorrect error while registration with empty username Enabled spring validation for user object. --- .../model/entity/applicationContext-dao.xml | 2 ++ .../TransactionalUserService.java | 25 ++++++++++++++----- .../service/applicationContext-service.xml | 1 + .../transactional/BeginTransactionTest.java | 9 ++++--- .../TransactionalUserServiceTest.java | 11 +++++--- 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/poulpe-model/src/main/resources/org/jtalks/poulpe/model/entity/applicationContext-dao.xml b/poulpe-model/src/main/resources/org/jtalks/poulpe/model/entity/applicationContext-dao.xml index 67922ff81..fdb11cc9a 100644 --- a/poulpe-model/src/main/resources/org/jtalks/poulpe/model/entity/applicationContext-dao.xml +++ b/poulpe-model/src/main/resources/org/jtalks/poulpe/model/entity/applicationContext-dao.xml @@ -31,6 +31,8 @@ pointcut="execution(* org.jtalks.common.model.dao.Crud+.* (*))"/> + + diff --git a/poulpe-service/src/main/java/org/jtalks/poulpe/service/transactional/TransactionalUserService.java b/poulpe-service/src/main/java/org/jtalks/poulpe/service/transactional/TransactionalUserService.java index 3e939be98..33d87d1e7 100644 --- a/poulpe-service/src/main/java/org/jtalks/poulpe/service/transactional/TransactionalUserService.java +++ b/poulpe-service/src/main/java/org/jtalks/poulpe/service/transactional/TransactionalUserService.java @@ -32,14 +32,14 @@ import org.jtalks.poulpe.service.UserService; import org.jtalks.poulpe.service.exceptions.ValidationException; import org.springframework.transaction.interceptor.TransactionInterceptor; +import org.springframework.validation.BeanPropertyBindingResult; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.validation.Validator; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Set; +import java.util.*; /** * User service class, contains methods needed to manipulate with {@code User} persistent entity. @@ -56,6 +56,7 @@ public class TransactionalUserService implements UserService { private final UserBanner userBanner; private final AclManager aclManager; private final ComponentDao componentDao; + private Validator validator; /** @@ -65,11 +66,12 @@ public class TransactionalUserService implements UserService { * entities */ public TransactionalUserService(UserDao userDao, UserBanner userBanner, - AclManager aclManager, ComponentDao componentDao) { + AclManager aclManager, ComponentDao componentDao, Validator validator) { this.userDao = userDao; this.userBanner = userBanner; this.aclManager = aclManager; this.componentDao = componentDao; + this.validator = validator; } /** @@ -298,6 +300,17 @@ private PoulpeUser getPoulpeUser(String username) throws NotFoundException { @Override public void registration(PoulpeUser user) throws ValidationException { List errors = new ArrayList(); + + BindingResult validateErrors = new BeanPropertyBindingResult(user, "user"); + validator.validate(user, validateErrors); + for (FieldError error : validateErrors.getFieldErrors()) { + if (error.getCodes() != null && error.getCodes().length > 0) { + errors.add(error.getCodes()[0]); + } else { + errors.add(error.getDefaultMessage()); + } + } + if (userDao.getByUsername(user.getUsername()) != null) { errors.add(User.USER_ALREADY_EXISTS); } diff --git a/poulpe-service/src/main/resources/org/jtalks/poulpe/service/applicationContext-service.xml b/poulpe-service/src/main/resources/org/jtalks/poulpe/service/applicationContext-service.xml index 509f1d17f..147dccff4 100644 --- a/poulpe-service/src/main/resources/org/jtalks/poulpe/service/applicationContext-service.xml +++ b/poulpe-service/src/main/resources/org/jtalks/poulpe/service/applicationContext-service.xml @@ -90,6 +90,7 @@ + diff --git a/poulpe-service/src/test/java/org/jtalks/poulpe/service/transactional/BeginTransactionTest.java b/poulpe-service/src/test/java/org/jtalks/poulpe/service/transactional/BeginTransactionTest.java index 774987a8a..b1910dd4d 100644 --- a/poulpe-service/src/test/java/org/jtalks/poulpe/service/transactional/BeginTransactionTest.java +++ b/poulpe-service/src/test/java/org/jtalks/poulpe/service/transactional/BeginTransactionTest.java @@ -25,13 +25,12 @@ import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.Validator; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import static org.mockito.Matchers.any; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @ContextConfiguration(locations = {"classpath:/org/jtalks/poulpe/model/entity/applicationContext-dao.xml"}) @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) @@ -44,6 +43,7 @@ public class BeginTransactionTest extends AbstractTransactionalTestNGSpringConte private UserDao userDao; private ComponentDao componentDaoMock; private AclManager aclManagerMock; + private Validator validator; @BeforeMethod public void setUp() { @@ -51,7 +51,8 @@ public void setUp() { userDao = mock(UserDao.class); componentDaoMock = mock(ComponentDao.class); aclManagerMock = mock(AclManager.class); - userService = new TransactionalUserService(userDao, mock(UserBanner.class), aclManagerMock, componentDaoMock); + validator = mock(Validator.class); + userService = new TransactionalUserService(userDao, mock(UserBanner.class), aclManagerMock, componentDaoMock, validator); } @Test(enabled = false) diff --git a/poulpe-service/src/test/java/org/jtalks/poulpe/service/transactional/TransactionalUserServiceTest.java b/poulpe-service/src/test/java/org/jtalks/poulpe/service/transactional/TransactionalUserServiceTest.java index 13184ef4e..871447d76 100644 --- a/poulpe-service/src/test/java/org/jtalks/poulpe/service/transactional/TransactionalUserServiceTest.java +++ b/poulpe-service/src/test/java/org/jtalks/poulpe/service/transactional/TransactionalUserServiceTest.java @@ -32,6 +32,7 @@ import org.jtalks.poulpe.model.sorting.UserSearchRequest; import org.jtalks.poulpe.service.exceptions.ValidationException; import org.mockito.MockitoAnnotations; +import org.springframework.validation.Validator; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -54,7 +55,7 @@ * @author maxim reshetov */ -public class TransactionalUserServiceTest{ +public class TransactionalUserServiceTest { private static final String USERNAME = "username"; private static final String HASED_PASSWORD = "password"; private static final PoulpeUser POULPE_USER = new PoulpeUser(USERNAME, "email", HASED_PASSWORD, "salt"); @@ -71,6 +72,7 @@ public class TransactionalUserServiceTest{ final String searchString = "searchString"; private ComponentDao componentDaoMock; private AclManager aclManagerMock; + private Validator validator; @BeforeMethod public void setUp() { @@ -78,7 +80,8 @@ public void setUp() { userDao = mock(UserDao.class); componentDaoMock = mock(ComponentDao.class); aclManagerMock = mock(AclManager.class); - userService = new TransactionalUserService(userDao, mock(UserBanner.class), aclManagerMock, componentDaoMock); + validator = mock(Validator.class); + userService = new TransactionalUserService(userDao, mock(UserBanner.class), aclManagerMock, componentDaoMock, validator); } @Test @@ -126,8 +129,8 @@ public void testUpdateUser() { public void TestFindUsersNotInList(){ List users = new ArrayList(); users.add(user()); - userService.findUsersNotInList(searchString,users); - verify(userDao).findUsersNotInList(searchString,users, Pages.NONE); + userService.findUsersNotInList(searchString, users); + verify(userDao).findUsersNotInList(searchString, users, Pages.NONE); } @Test