Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.epam.izh.rd.online.exception;

public class NotAccessException extends Exception {
public NotAccessException(String message) {
super(message);}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.epam.izh.rd.online.exception;

public class NotCorrectPasswordException extends IllegalArgumentException {
public NotCorrectPasswordException(String message) {
super(message);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.epam.izh.rd.online.exception;

public class SimplePasswordException extends Exception {
public SimplePasswordException(String message) {
super(message);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.epam.izh.rd.online.exception;

public class UserAlreadyRegisteredException extends Exception{
public UserAlreadyRegisteredException(String message) {
super(message);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.epam.izh.rd.online.exception;

public class UserNotFoundException extends IllegalArgumentException {
public UserNotFoundException(String message) {
super(message);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

/**
* Готовый класс репозитория.
* Можно добавлять свои методы, принеобходимости, но нельзя исправлять текущие.
* Можно добавлять свои методы, при необходимости, но нельзя исправлять текущие.
* <p>
* Позволяет сохранять\обновлять пользователей.
* Позволяет находить пользователя по логину.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
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 {

private IUserRepository userRepository;


public AuthenticationService(IUserRepository userRepository) {
this.userRepository = userRepository;
}

/**
* Необходимо доработать данный метод следующим функционлом:
* Необходимо доработать данный метод следующим функционaлом:
* <p>
* 1) Необходимо проверять наличие авторизующегося пользователя в списке зарегистрированных пользователей.
* Если пользователь не найден, необходимо выбрасывать проверяемое исключение с названием UserNotFoundException
Expand All @@ -25,15 +28,15 @@ 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());

//
// Здесь необходимо реализовать перечисленные выше проверки
//

// Устанавливаем найденного пользователя, который прошел все проверки, как вошедшего в систему.
if(foundUser == null){
throw new UserNotFoundException("Пользователь с таким логином не найден");
}
if(!foundUser.getPassword().equals(user.getPassword())){
throw new NotCorrectPasswordException("Пароль введен неверно!");
}
CurrentUserManager.setCurrentLoggedInUser(foundUser);

return foundUser;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
* Данный класс хранит информацию о текущем авторизованном пользователе (пользователе который вошел в систему).
* Считаем, что в систему может войти только один пользователь.
* <p>
* Псле вызова метода {@link AuthenticationService#login(User)}, если все проверки прошли успешно,
* После вызова метода {@link AuthenticationService#login(User)}, если все проверки прошли успешно,
* пользователь устанавливается в данное поле.
* <p>
* Поскольку методы статические и поле статическое, его можно доставать в других классх, если понадобится проверить,
* Поскольку методы статические и поле статическое, его можно доставать в других классах, если понадобится проверить,
* какое пользователь сейчас находится в системе.
* <p>
* Это необходимо например при выполнении метода {@link com.epam.izh.rd.online.repository.UserRepository#deleteByLogin(String)}
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
Original file line number Diff line number Diff line change
@@ -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 IllegalAccessException, UserAlreadyRegisteredException, SimplePasswordException;

void delete(String login);
void delete(String login) throws NotAccessException;
}
45 changes: 27 additions & 18 deletions src/main/java/com/epam/izh/rd/online/service/UserService.java
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -13,7 +16,7 @@ public UserService(IUserRepository userRepository) {
}

/**
* Необходимо доработать данный метод следующим функционлом:
* Необходимо доработать данный метод следующим функционалом:
* <p>
* 1) Необходимо проверять наличие заполнения всех полей сущности User. Если же поле с логином или паролем не
* заполнено или заполнено пустой строкой. Необходимо выбрасывать существующее непроверяемое исключение
Expand All @@ -27,21 +30,28 @@ public UserService(IUserRepository userRepository) {
* В случае, если это происходит (например пароль = "123432") необходимо выбрасывать
* исключение с названием SimplePasswordException и текстом - "Пароль не соответствует требованиям безопасности"
*
* @param user - даныне регистрирующегося пользователя
* @param user - данные регистрирующегося пользователя
*/
@Override
public User register(User user) {

//
// Здесь необходимо реализовать перечисленные выше проверки
//

// Если все проверки успешно пройдены, сохраняем пользователя в базу
return userRepository.save(user);
public User register(User user) throws IllegalArgumentException, UserAlreadyRegisteredException, SimplePasswordException {
String login = user.getLogin();
String password = user.getPassword();
if (login.equals("") || password.equals("")){
throw new IllegalArgumentException("Ошибка в заполнении полей");
}
if (userRepository.findByLogin(login) != null){
throw new UserAlreadyRegisteredException("Пользователь с логином "+ login + " уже зарегистрирован");
}
if (password.matches("\\d+")){
throw new SimplePasswordException("Пароль не соответствует требованиям безопасности");
}
{
return userRepository.save(user);
}
}

/**
* Необходимо доработать данный метод следующим функционлом:
* Необходимо доработать данный метод следующим функционалом:
* <p>
* Если мы попытаемся вызвать метод удаления {@link UserRepository#deleteByLogin(String)}
* пользователем не админом (считаем, что админ имеет логин Admin), то будет выброшено исключение
Expand All @@ -58,14 +68,13 @@ public User register(User user) {
*
* @param login
*/
public void delete(String login) {

// Здесь необходимо сделать доработку метод

userRepository.deleteByLogin(login);

// Здесь необходимо сделать доработку метода
public void delete(String login) throws NotAccessException {

try {
userRepository.deleteByLogin(login);
} catch (UnsupportedOperationException e){
throw new NotAccessException("Недостаточно прав для выполнения операции");
}
}

}
4 changes: 2 additions & 2 deletions src/test/java/com/epam/izh/rd/online/Assert.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@

public class Assert<T extends Throwable> {

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<T> forName(String className) {
private Class<T> forName(String className) throws ClassNotFoundException {
return (Class<T>) Class.forName("com.epam.izh.rd.online.exception." + className);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,19 @@ 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);
assertion.assertThrowsWithClassName("NotCorrectPasswordException", () -> authenticationService.login(Providers.changePasswordToWrongValue(user)),
"Пароль введен неверно!");

assertion.assertThrowsWithClassName("NotCorrectPasswordException", () -> authenticationService.login(Providers.changePasswordToWrongValue(user)),
"Пароль введен неверно!");
}
}
4 changes: 2 additions & 2 deletions src/test/java/com/epam/izh/rd/online/UserServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -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"),
"Недостаточно прав для выполнения операции");
Expand Down