From f7d1de4f1e4f5b1d1d333929a04ff727e71a9ced Mon Sep 17 00:00:00 2001 From: Yurii Erofeevskii Date: Fri, 10 Jul 2020 12:58:26 +0300 Subject: [PATCH] Done --- java-exceptions-template.iml | 23 +++++++++ .../online/exception/NotAccessException.java | 7 +++ .../NotCorrectPasswordException.java | 7 +++ .../exception/SimplePasswordException.java | 7 +++ .../UserAlreadyRegisteredException.java | 7 +++ .../exception/UserNotFoundException.java | 7 +++ .../rd/online/repository/UserRepository.java | 2 +- .../online/service/AuthenticationService.java | 20 ++++---- .../service/IAuthenticationService.java | 4 +- .../izh/rd/online/service/IUserService.java | 7 ++- .../izh/rd/online/service/UserService.java | 47 +++++++++++++------ .../java/com/epam/izh/rd/online/Assert.java | 4 +- .../rd/online/AuthenticationServiceTest.java | 4 +- .../epam/izh/rd/online/UserServiceTest.java | 12 ++--- 14 files changed, 122 insertions(+), 36 deletions(-) create mode 100644 java-exceptions-template.iml create mode 100644 src/main/java/com/epam/izh/rd/online/exception/NotAccessException.java create mode 100644 src/main/java/com/epam/izh/rd/online/exception/NotCorrectPasswordException.java create mode 100644 src/main/java/com/epam/izh/rd/online/exception/SimplePasswordException.java create mode 100644 src/main/java/com/epam/izh/rd/online/exception/UserAlreadyRegisteredException.java create mode 100644 src/main/java/com/epam/izh/rd/online/exception/UserNotFoundException.java diff --git a/java-exceptions-template.iml b/java-exceptions-template.iml new file mode 100644 index 0000000..933182c --- /dev/null +++ b/java-exceptions-template.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/epam/izh/rd/online/exception/NotAccessException.java b/src/main/java/com/epam/izh/rd/online/exception/NotAccessException.java new file mode 100644 index 0000000..753d34a --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/NotAccessException.java @@ -0,0 +1,7 @@ +package com.epam.izh.rd.online.exception; + +public class NotAccessException extends Exception { + public NotAccessException(String message) { + super(message); + } +} diff --git a/src/main/java/com/epam/izh/rd/online/exception/NotCorrectPasswordException.java b/src/main/java/com/epam/izh/rd/online/exception/NotCorrectPasswordException.java new file mode 100644 index 0000000..c014e7e --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/NotCorrectPasswordException.java @@ -0,0 +1,7 @@ +package com.epam.izh.rd.online.exception; + +public class NotCorrectPasswordException extends Exception{ + public NotCorrectPasswordException(String message) { + super(message); + } +} diff --git a/src/main/java/com/epam/izh/rd/online/exception/SimplePasswordException.java b/src/main/java/com/epam/izh/rd/online/exception/SimplePasswordException.java new file mode 100644 index 0000000..853eb13 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/SimplePasswordException.java @@ -0,0 +1,7 @@ +package com.epam.izh.rd.online.exception; + +public class SimplePasswordException extends Exception { + public SimplePasswordException(String message) { + super(message); + } +} diff --git a/src/main/java/com/epam/izh/rd/online/exception/UserAlreadyRegisteredException.java b/src/main/java/com/epam/izh/rd/online/exception/UserAlreadyRegisteredException.java new file mode 100644 index 0000000..114e6be --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/UserAlreadyRegisteredException.java @@ -0,0 +1,7 @@ +package com.epam.izh.rd.online.exception; + +public class UserAlreadyRegisteredException extends Exception { + public UserAlreadyRegisteredException(String message) { + super(message); + } +} diff --git a/src/main/java/com/epam/izh/rd/online/exception/UserNotFoundException.java b/src/main/java/com/epam/izh/rd/online/exception/UserNotFoundException.java new file mode 100644 index 0000000..7445894 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/UserNotFoundException.java @@ -0,0 +1,7 @@ +package com.epam.izh.rd.online.exception; + +public class UserNotFoundException extends Exception{ + public UserNotFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/com/epam/izh/rd/online/repository/UserRepository.java b/src/main/java/com/epam/izh/rd/online/repository/UserRepository.java index e81491d..a92934c 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/UserRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/UserRepository.java @@ -9,7 +9,7 @@ /** * Готовый класс репозитория. - * Можно добавлять свои методы, принеобходимости, но нельзя исправлять текущие. + * Можно добавлять свои методы, при необходимости, но нельзя исправлять текущие. *

* Позволяет сохранять\обновлять пользователей. * Позволяет находить пользователя по логину. diff --git a/src/main/java/com/epam/izh/rd/online/service/AuthenticationService.java b/src/main/java/com/epam/izh/rd/online/service/AuthenticationService.java index bcb09a7..838c324 100644 --- a/src/main/java/com/epam/izh/rd/online/service/AuthenticationService.java +++ b/src/main/java/com/epam/izh/rd/online/service/AuthenticationService.java @@ -1,6 +1,8 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.entity.User; +import com.epam.izh.rd.online.exception.NotCorrectPasswordException; +import com.epam.izh.rd.online.exception.UserNotFoundException; import com.epam.izh.rd.online.repository.IUserRepository; public class AuthenticationService implements IAuthenticationService { @@ -25,20 +27,22 @@ public AuthenticationService(IUserRepository userRepository) { * @param user - пользователь проходящий авторизацию */ @Override - public User login(User user) { - // Находим пользователя в базе + public User login(User user) throws UserNotFoundException, NotCorrectPasswordException { User foundUser = userRepository.findByLogin(user.getLogin()); + validateUserLoginAndPassword(user); - // - // Здесь необходимо реализовать перечисленные выше проверки - // - - // Устанавливаем найденного пользователя, который прошел все проверки, как вошедшего в систему. CurrentUserManager.setCurrentLoggedInUser(foundUser); - return foundUser; } + private void validateUserLoginAndPassword(User user) throws UserNotFoundException,NotCorrectPasswordException { + if (userRepository.findByLogin(user.getLogin()) == null) { + throw new UserNotFoundException("Пользователь с таким логином не найден"); + } else if (!userRepository.findByLogin(user.getLogin()).getPassword().equals(user.getPassword())) { + throw new NotCorrectPasswordException("Пароль введен неверно!"); + } + } + /** * Данный метод очищает данные о текущем (активном) пользователе. */ diff --git a/src/main/java/com/epam/izh/rd/online/service/IAuthenticationService.java b/src/main/java/com/epam/izh/rd/online/service/IAuthenticationService.java index 3f296c3..7840306 100644 --- a/src/main/java/com/epam/izh/rd/online/service/IAuthenticationService.java +++ b/src/main/java/com/epam/izh/rd/online/service/IAuthenticationService.java @@ -1,9 +1,11 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.entity.User; +import com.epam.izh.rd.online.exception.NotCorrectPasswordException; +import com.epam.izh.rd.online.exception.UserNotFoundException; public interface IAuthenticationService { - User login(User user); + User login(User user) throws UserNotFoundException, NotCorrectPasswordException; void logout(); } diff --git a/src/main/java/com/epam/izh/rd/online/service/IUserService.java b/src/main/java/com/epam/izh/rd/online/service/IUserService.java index de62d43..5cc0fcb 100644 --- a/src/main/java/com/epam/izh/rd/online/service/IUserService.java +++ b/src/main/java/com/epam/izh/rd/online/service/IUserService.java @@ -1,10 +1,13 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.entity.User; +import com.epam.izh.rd.online.exception.NotAccessException; +import com.epam.izh.rd.online.exception.SimplePasswordException; +import com.epam.izh.rd.online.exception.UserAlreadyRegisteredException; public interface IUserService { - User register(User user); + User register(User user) throws UserAlreadyRegisteredException, SimplePasswordException; - void delete(String login); + void delete(String login) throws NotAccessException; } diff --git a/src/main/java/com/epam/izh/rd/online/service/UserService.java b/src/main/java/com/epam/izh/rd/online/service/UserService.java index 78c39ed..92905be 100644 --- a/src/main/java/com/epam/izh/rd/online/service/UserService.java +++ b/src/main/java/com/epam/izh/rd/online/service/UserService.java @@ -1,6 +1,9 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.entity.User; +import com.epam.izh.rd.online.exception.NotAccessException; +import com.epam.izh.rd.online.exception.SimplePasswordException; +import com.epam.izh.rd.online.exception.UserAlreadyRegisteredException; import com.epam.izh.rd.online.repository.IUserRepository; import com.epam.izh.rd.online.repository.UserRepository; @@ -30,14 +33,33 @@ public UserService(IUserRepository userRepository) { * @param user - даныне регистрирующегося пользователя */ @Override - public User register(User user) { + public User register(User user) throws UserAlreadyRegisteredException, SimplePasswordException { + validateUserData(user); + return userRepository.save(user); + } - // - // Здесь необходимо реализовать перечисленные выше проверки - // + private void validateUserData(User user) throws UserAlreadyRegisteredException, SimplePasswordException { + isEmptyLoginOrPasswordUserValue(user); + isUserAlreadyRegistered(user); + isUserSimplePassword(user); + } - // Если все проверки успешно пройдены, сохраняем пользователя в базу - return userRepository.save(user); + private void isEmptyLoginOrPasswordUserValue(User user) { + if (user.getLogin().isEmpty() || user.getPassword().isEmpty()) { + throw new IllegalArgumentException("Ошибка в заполнении полей"); + } + } + + private void isUserSimplePassword(User user) throws UserAlreadyRegisteredException { + if (userRepository.findByLogin(user.getLogin()) != null) { + throw new UserAlreadyRegisteredException("Пользователь с логином " + user.getLogin() + " уже зарегистрирован"); + } + } + + private void isUserAlreadyRegistered(User user) throws SimplePasswordException { + if (user.getPassword().matches("\\d*")) { + throw new SimplePasswordException("Пароль не соответствует требованиям безопасности"); + } } /** @@ -58,14 +80,11 @@ public User register(User user) { * * @param login */ - public void delete(String login) { - - // Здесь необходимо сделать доработку метод - + public void delete(String login) throws NotAccessException { + try { userRepository.deleteByLogin(login); - - // Здесь необходимо сделать доработку метода - + } catch (UnsupportedOperationException e) { + throw new NotAccessException("Недостаточно прав для выполнения операции"); + } } - } diff --git a/src/test/java/com/epam/izh/rd/online/Assert.java b/src/test/java/com/epam/izh/rd/online/Assert.java index 49c60d5..d451f0d 100644 --- a/src/test/java/com/epam/izh/rd/online/Assert.java +++ b/src/test/java/com/epam/izh/rd/online/Assert.java @@ -7,12 +7,12 @@ public class Assert { - public T assertThrowsWithClassName(String className, Executable executable, String message) { + public T assertThrowsWithClassName(String className, Executable executable, String message) throws ClassNotFoundException { return assertThrows(forName(className), executable, message); } @SneakyThrows - private Class forName(String className) { + private Class forName(String className) throws ClassNotFoundException { return (Class) Class.forName("com.epam.izh.rd.online.exception." + className); } } diff --git a/src/test/java/com/epam/izh/rd/online/AuthenticationServiceTest.java b/src/test/java/com/epam/izh/rd/online/AuthenticationServiceTest.java index d10fce1..7abbae3 100644 --- a/src/test/java/com/epam/izh/rd/online/AuthenticationServiceTest.java +++ b/src/test/java/com/epam/izh/rd/online/AuthenticationServiceTest.java @@ -25,14 +25,14 @@ private void setup() { @Test @DisplayName("Тест метода IAuthenticationService.login(User user)") - void testRegisterCase1() { + void testRegisterCase1() throws ClassNotFoundException { assertion.assertThrowsWithClassName("UserNotFoundException", () -> authenticationService.login(getUser()), "Пользователь с таким логином не найден"); } @Test @DisplayName("Тест метода IAuthenticationService.login(User user)") - void testRegisterCase2() { + void testRegisterCase2() throws ClassNotFoundException { User user = getUser(); userRepository.save(user); diff --git a/src/test/java/com/epam/izh/rd/online/UserServiceTest.java b/src/test/java/com/epam/izh/rd/online/UserServiceTest.java index 8756e39..3bd0a01 100644 --- a/src/test/java/com/epam/izh/rd/online/UserServiceTest.java +++ b/src/test/java/com/epam/izh/rd/online/UserServiceTest.java @@ -1,11 +1,11 @@ package com.epam.izh.rd.online; import com.epam.izh.rd.online.entity.User; +import com.epam.izh.rd.online.exception.SimplePasswordException; +import com.epam.izh.rd.online.exception.UserAlreadyRegisteredException; import com.epam.izh.rd.online.repository.IUserRepository; import com.epam.izh.rd.online.repository.UserRepository; -import com.epam.izh.rd.online.service.CurrentUserManager; -import com.epam.izh.rd.online.service.IUserService; -import com.epam.izh.rd.online.service.UserService; +import com.epam.izh.rd.online.service.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -39,7 +39,7 @@ void testRegisterCase1(User user) { @Test @DisplayName("Тест метода IUserService.register(User user) кейс 2") - void testRegisterCase2() throws Exception { + void testRegisterCase2() throws Exception, SimplePasswordException, UserAlreadyRegisteredException { User user = Providers.getUser(); userService.register(user); @@ -49,7 +49,7 @@ void testRegisterCase2() throws Exception { @Test @DisplayName("Тест метода IUserService.register(User user) кейс 3") - void testRegisterCase3() { + void testRegisterCase3() throws ClassNotFoundException { User user = getUserWithNumberPassword(); assertion.assertThrowsWithClassName("SimplePasswordException", () -> userService.register(user), @@ -60,7 +60,7 @@ void testRegisterCase3() { @ParameterizedTest @MethodSource("com.epam.izh.rd.online.Providers#testDelete") @DisplayName("Тест метода IUserService.delete(String login)") - void testDelete(User user) { + void testDelete(User user) throws ClassNotFoundException { CurrentUserManager.setCurrentLoggedInUser(user); assertion.assertThrowsWithClassName("NotAccessException", () -> userService.delete("123"), "Недостаточно прав для выполнения операции");