From cff7f3c2bc65d691800ee9905ff21bec9d24cc1d Mon Sep 17 00:00:00 2001 From: Danil Mitusov Date: Wed, 17 Jun 2020 16:15:52 +0300 Subject: [PATCH 1/2] finished UserService's methods. --- java-exceptions-template.iml | 23 +++++++++++++ .../online/exception/NotAccessException.java | 7 ++++ .../exception/SimplePasswordException.java | 6 ++++ .../UserAlreadyRegisteredException.java | 7 ++++ .../izh/rd/online/service/UserService.java | 33 ++++++++++++------- 5 files changed, 65 insertions(+), 11 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/SimplePasswordException.java create mode 100644 src/main/java/com/epam/izh/rd/online/exception/UserAlreadyRegisteredException.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..8f3fc1a --- /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 RuntimeException { + + public NotAccessException(String недостаточно_прав_для_выполнения_операции) { + } +} 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..8072a7e --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/SimplePasswordException.java @@ -0,0 +1,6 @@ +package com.epam.izh.rd.online.exception; + +public class SimplePasswordException extends RuntimeException { + public SimplePasswordException(String пароль_не_соответствует_требованиям_безопасности) { + } +} 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..985b361 --- /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 RuntimeException { + public UserAlreadyRegisteredException(String message) { + super(message); + } +} 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..ee77164 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,9 +1,14 @@ 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; +import java.util.regex.Pattern; + public class UserService implements IUserService { private IUserRepository userRepository; @@ -31,12 +36,18 @@ public UserService(IUserRepository userRepository) { */ @Override public User register(User user) { + if (user.getLogin() == null || user.getPassword() == null + || user.getPassword().equals("") || user.getLogin().equals("")) { + throw new IllegalArgumentException("Ошибка в заполнении полей"); + } + if (user.equals(userRepository.findByLogin(user.getLogin()))) { + throw new UserAlreadyRegisteredException("Пользователь с логином " + + user.getLogin() + " уже зарегистрирован"); + } + if (Pattern.matches("\\d+", user.getPassword())) { + throw new SimplePasswordException("Пароль не соответствует требованиям безопасности"); + } - // - // Здесь необходимо реализовать перечисленные выше проверки - // - - // Если все проверки успешно пройдены, сохраняем пользователя в базу return userRepository.save(user); } @@ -59,13 +70,13 @@ public User register(User user) { * @param login */ public void delete(String login) { - - // Здесь необходимо сделать доработку метод - + try { userRepository.deleteByLogin(login); - - // Здесь необходимо сделать доработку метода - + } catch (UnsupportedOperationException e) { + throw new NotAccessException("Недостаточно прав для выполнения операции"); + } } } + + From 56f060b46f27d03f0eeaf4933cce3167f937d581 Mon Sep 17 00:00:00 2001 From: Danil Mitusov Date: Wed, 17 Jun 2020 16:54:32 +0300 Subject: [PATCH 2/2] Finished all the methods. The tests executed correctly. --- .../epam/izh/rd/online/JavaExceptions.java | 1 - .../com/epam/izh/rd/online/entity/User.java | 3 ++- .../online/exception/NotAccessException.java | 18 ++++++++++++++- .../NotCorrectPasswordException.java | 22 +++++++++++++++++++ .../exception/SimplePasswordException.java | 18 ++++++++++++++- .../UserAlreadyRegisteredException.java | 17 +++++++++++++- .../exception/UserNotFoundException.java | 22 +++++++++++++++++++ .../online/service/AuthenticationService.java | 16 ++++++++------ .../service/IAuthenticationService.java | 3 ++- .../izh/rd/online/service/IUserService.java | 3 ++- .../izh/rd/online/service/UserService.java | 5 ++--- .../java/com/epam/izh/rd/online/Assert.java | 4 ++-- .../rd/online/AuthenticationServiceTest.java | 4 ++-- .../epam/izh/rd/online/UserServiceTest.java | 15 ++++++++----- 14 files changed, 125 insertions(+), 26 deletions(-) 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/UserNotFoundException.java diff --git a/src/main/java/com/epam/izh/rd/online/JavaExceptions.java b/src/main/java/com/epam/izh/rd/online/JavaExceptions.java index 9694d84..02716c7 100644 --- a/src/main/java/com/epam/izh/rd/online/JavaExceptions.java +++ b/src/main/java/com/epam/izh/rd/online/JavaExceptions.java @@ -4,7 +4,6 @@ public class JavaExceptions { public static void main(String[] args) { - } } diff --git a/src/main/java/com/epam/izh/rd/online/entity/User.java b/src/main/java/com/epam/izh/rd/online/entity/User.java index 5ba9a7b..5c15bf6 100644 --- a/src/main/java/com/epam/izh/rd/online/entity/User.java +++ b/src/main/java/com/epam/izh/rd/online/entity/User.java @@ -8,7 +8,8 @@ public class User { private String password; - public User() {} + public User() { + } public User(String login, String password) { this.login = login; 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 index 8f3fc1a..b6f4c6d 100644 --- a/src/main/java/com/epam/izh/rd/online/exception/NotAccessException.java +++ b/src/main/java/com/epam/izh/rd/online/exception/NotAccessException.java @@ -2,6 +2,22 @@ public class NotAccessException extends RuntimeException { - public NotAccessException(String недостаточно_прав_для_выполнения_операции) { + public NotAccessException(String message) { + super(message); + } + + public NotAccessException() { + } + + public NotAccessException(String message, Throwable cause) { + super(message, cause); + } + + public NotAccessException(Throwable cause) { + super(cause); + } + + public NotAccessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); } } 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..a3b3b9a --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/NotCorrectPasswordException.java @@ -0,0 +1,22 @@ +package com.epam.izh.rd.online.exception; + +public class NotCorrectPasswordException extends RuntimeException { + public NotCorrectPasswordException() { + } + + public NotCorrectPasswordException(String message) { + super(message); + } + + public NotCorrectPasswordException(String message, Throwable cause) { + super(message, cause); + } + + public NotCorrectPasswordException(Throwable cause) { + super(cause); + } + + public NotCorrectPasswordException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} 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 index 8072a7e..a5bacd5 100644 --- a/src/main/java/com/epam/izh/rd/online/exception/SimplePasswordException.java +++ b/src/main/java/com/epam/izh/rd/online/exception/SimplePasswordException.java @@ -1,6 +1,22 @@ package com.epam.izh.rd.online.exception; public class SimplePasswordException extends RuntimeException { - public SimplePasswordException(String пароль_не_соответствует_требованиям_безопасности) { + public SimplePasswordException(String message) { + super(message); + } + + public SimplePasswordException() { + } + + public SimplePasswordException(String message, Throwable cause) { + super(message, cause); + } + + public SimplePasswordException(Throwable cause) { + super(cause); + } + + public SimplePasswordException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); } } 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 index 985b361..885ec50 100644 --- a/src/main/java/com/epam/izh/rd/online/exception/UserAlreadyRegisteredException.java +++ b/src/main/java/com/epam/izh/rd/online/exception/UserAlreadyRegisteredException.java @@ -1,7 +1,22 @@ package com.epam.izh.rd.online.exception; -public class UserAlreadyRegisteredException extends RuntimeException { +public class UserAlreadyRegisteredException extends Exception { public UserAlreadyRegisteredException(String message) { super(message); } + + public UserAlreadyRegisteredException() { + } + + public UserAlreadyRegisteredException(String message, Throwable cause) { + super(message, cause); + } + + public UserAlreadyRegisteredException(Throwable cause) { + super(cause); + } + + public UserAlreadyRegisteredException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } } 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..87949b2 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/exception/UserNotFoundException.java @@ -0,0 +1,22 @@ +package com.epam.izh.rd.online.exception; + +public class UserNotFoundException extends Exception { + public UserNotFoundException() { + } + + public UserNotFoundException(String message) { + super(message); + } + + public UserNotFoundException(String message, Throwable cause) { + super(message, cause); + } + + public UserNotFoundException(Throwable cause) { + super(cause); + } + + public UserNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} 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..2609083 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,15 +27,15 @@ public AuthenticationService(IUserRepository userRepository) { * @param user - пользователь проходящий авторизацию */ @Override - public User login(User user) { - // Находим пользователя в базе + public User login(User user) throws UserNotFoundException { User foundUser = userRepository.findByLogin(user.getLogin()); + if (foundUser == null) { + throw new UserNotFoundException("Пользователь с таким логином не найден"); + } + if (!foundUser.getPassword().equals(user.getPassword())) { + throw new NotCorrectPasswordException("Пароль введен неверно!"); + } - // - // Здесь необходимо реализовать перечисленные выше проверки - // - - // Устанавливаем найденного пользователя, который прошел все проверки, как вошедшего в систему. CurrentUserManager.setCurrentLoggedInUser(foundUser); return foundUser; 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..7acf3c8 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,10 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.entity.User; +import com.epam.izh.rd.online.exception.UserNotFoundException; public interface IAuthenticationService { - User login(User user); + User login(User user) throws UserNotFoundException; 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..22cafc5 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,11 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.entity.User; +import com.epam.izh.rd.online.exception.UserAlreadyRegisteredException; public interface IUserService { - User register(User user); + User register(User user) throws UserAlreadyRegisteredException; void delete(String login); } 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 ee77164..ea93d0f 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 @@ -35,9 +35,8 @@ public UserService(IUserRepository userRepository) { * @param user - даныне регистрирующегося пользователя */ @Override - public User register(User user) { - if (user.getLogin() == null || user.getPassword() == null - || user.getPassword().equals("") || user.getLogin().equals("")) { + public User register(User user) throws UserAlreadyRegisteredException { + if (user.getLogin().isEmpty() || user.getPassword().isEmpty()) { throw new IllegalArgumentException("Ошибка в заполнении полей"); } if (user.equals(userRepository.findByLogin(user.getLogin()))) { 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..1c482b5 100644 --- a/src/test/java/com/epam/izh/rd/online/UserServiceTest.java +++ b/src/test/java/com/epam/izh/rd/online/UserServiceTest.java @@ -1,6 +1,7 @@ package com.epam.izh.rd.online; import com.epam.izh.rd.online.entity.User; +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; @@ -39,7 +40,7 @@ void testRegisterCase1(User user) { @Test @DisplayName("Тест метода IUserService.register(User user) кейс 2") - void testRegisterCase2() throws Exception { + void testRegisterCase2() throws Exception{ User user = Providers.getUser(); userService.register(user); @@ -52,15 +53,19 @@ void testRegisterCase2() throws Exception { void testRegisterCase3() { User user = getUserWithNumberPassword(); - assertion.assertThrowsWithClassName("SimplePasswordException", () -> userService.register(user), - "Пароль не соответствует требованиям безопасности" - ); + try { + assertion.assertThrowsWithClassName("SimplePasswordException", () -> userService.register(user), + "Пароль не соответствует требованиям безопасности" + ); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } } @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"), "Недостаточно прав для выполнения операции");