diff --git a/winery/api/src/main/java/cz/muni/fi/pa165/winery/dto/user/UserDto.java b/winery/api/src/main/java/cz/muni/fi/pa165/winery/dto/user/UserDto.java index 784a8320291e37790b41775d8fa4400b117d7841..07e613097f641bebc4a38b437fa0dd15e87e13d1 100644 --- a/winery/api/src/main/java/cz/muni/fi/pa165/winery/dto/user/UserDto.java +++ b/winery/api/src/main/java/cz/muni/fi/pa165/winery/dto/user/UserDto.java @@ -1,6 +1,7 @@ package cz.muni.fi.pa165.winery.dto.user; import cz.muni.fi.pa165.winery.dto.PersistentDtoBase; +import cz.muni.fi.pa165.winery.enums.UserRoleType; import lombok.Getter; import lombok.Setter; @@ -43,18 +44,8 @@ public class UserDto extends PersistentDtoBase { @NotBlank private String passwordHash; - /** - * User's past orders. - */ - private List orderIds = new ArrayList<>(); - - /** - * User's product reviews. - */ - private List reviewIds = new ArrayList<>(); - /** * Roles assigned to this user. */ - private Set roles = new HashSet<>(); + private List roles = new ArrayList<>(); } diff --git a/winery/service/src/main/java/cz/muni/fi/pa165/winery/services/mappers/user/UserEntityMapper.java b/winery/service/src/main/java/cz/muni/fi/pa165/winery/services/mappers/user/UserEntityMapper.java index b0dfa2b5a817b1b02052303be485c71073a551c8..8720f2e5203e06ca25225ec54deb9eedb0d4dc56 100644 --- a/winery/service/src/main/java/cz/muni/fi/pa165/winery/services/mappers/user/UserEntityMapper.java +++ b/winery/service/src/main/java/cz/muni/fi/pa165/winery/services/mappers/user/UserEntityMapper.java @@ -1,6 +1,8 @@ package cz.muni.fi.pa165.winery.services.mappers.user; +import cz.muni.fi.pa165.winery.dto.order.OrderDto; import cz.muni.fi.pa165.winery.dto.user.UserDto; +import cz.muni.fi.pa165.winery.persistence.entities.Order; import cz.muni.fi.pa165.winery.persistence.entities.User; import cz.muni.fi.pa165.winery.services.mappers.EntityMapperImpl; import org.modelmapper.ModelMapper; @@ -19,17 +21,6 @@ public class UserEntityMapper extends EntityMapperImpl { @Override protected void configureModelMapper(ModelMapper mapper) { super.configureModelMapper(mapper); - - mapper.createTypeMap(User.class, UserDto.class) - .addMappings(m -> m.skip(UserDto::setOrderIds)); - mapper.createTypeMap(UserDto.class, User.class) - .addMappings(m -> m.skip(User::setOrders)); - - mapper.createTypeMap(User.class, UserDto.class) - .addMappings(m -> m.skip(UserDto::setReviewIds)); - mapper.createTypeMap(UserDto.class, User.class) - .addMappings(m -> m.skip(User::setReviews)); - mapper.createTypeMap(User.class, UserDto.class) .addMappings(m -> m.skip(UserDto::setRoles)); mapper.createTypeMap(UserDto.class, User.class) diff --git a/winery/service/src/main/java/cz/muni/fi/pa165/winery/services/user/UserServiceImpl.java b/winery/service/src/main/java/cz/muni/fi/pa165/winery/services/user/UserServiceImpl.java index 455ebc55ff9696feaa54f655cbd1453a376e5017..350f1001ffbf65b9892312d63d96eabe7f05ab4c 100644 --- a/winery/service/src/main/java/cz/muni/fi/pa165/winery/services/user/UserServiceImpl.java +++ b/winery/service/src/main/java/cz/muni/fi/pa165/winery/services/user/UserServiceImpl.java @@ -1,9 +1,12 @@ package cz.muni.fi.pa165.winery.services.user; +import cz.muni.fi.pa165.winery.dto.order.OrderDto; import cz.muni.fi.pa165.winery.dto.user.UserDto; import cz.muni.fi.pa165.winery.enums.UserRoleType; import cz.muni.fi.pa165.winery.persistence.dao.user.UserDao; +import cz.muni.fi.pa165.winery.persistence.entities.Order; import cz.muni.fi.pa165.winery.persistence.entities.User; +import cz.muni.fi.pa165.winery.persistence.entities.UserRole; import cz.muni.fi.pa165.winery.services.PersistenceServiceImpl; import cz.muni.fi.pa165.winery.services.mappers.EntityMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -28,4 +31,20 @@ public class UserServiceImpl extends PersistenceServiceImpl imple var entities = ((UserDao)getDao()).getAll(userRole); return entities.stream().map(this::mapToDto).collect(Collectors.toList()); } + + @Override + protected UserDto mapToDto(User user) { + var dto = super.mapToDto(user); + dto.setRoles(user.getRoles().stream() + .map(x -> x.getRole()).collect(Collectors.toList())); + return dto; + } + + @Override + protected User mapToEntity(UserDto record) { + var entity = super.mapToEntity(record); + entity.setRoles(record.getRoles().stream() + .map(x -> new UserRole(x, entity)).collect(Collectors.toSet())); + return entity; + } } diff --git a/winery/service/src/test/java/cz/muni/fi/pa165/winery/services/persistence/user/UserTests.java b/winery/service/src/test/java/cz/muni/fi/pa165/winery/services/persistence/user/UserTests.java new file mode 100644 index 0000000000000000000000000000000000000000..724cd94b671dee113dc33cc66aaf8acef3ecf429 --- /dev/null +++ b/winery/service/src/test/java/cz/muni/fi/pa165/winery/services/persistence/user/UserTests.java @@ -0,0 +1,113 @@ +package cz.muni.fi.pa165.winery.services.persistence.user; + +import cz.muni.fi.pa165.winery.dto.user.UserDto; +import cz.muni.fi.pa165.winery.dto.user.UserRoleDto; +import cz.muni.fi.pa165.winery.enums.UserRoleType; +import cz.muni.fi.pa165.winery.persistence.dao.DaoBase; +import cz.muni.fi.pa165.winery.persistence.dao.user.UserDao; +import cz.muni.fi.pa165.winery.persistence.entities.Order; +import cz.muni.fi.pa165.winery.persistence.entities.ProductReview; +import cz.muni.fi.pa165.winery.persistence.entities.User; +import cz.muni.fi.pa165.winery.persistence.entities.UserRole; +import cz.muni.fi.pa165.winery.services.PersistenceServiceImpl; +import cz.muni.fi.pa165.winery.services.mappers.user.UserEntityMapper; +import cz.muni.fi.pa165.winery.services.persistence.PersistenceServiceTestBase; +import cz.muni.fi.pa165.winery.services.user.UserServiceImpl; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Jakub Balga + */ +@ExtendWith(MockitoExtension.class) +public class UserTests extends PersistenceServiceTestBase { + + @Mock + UserDao userDao; + + @Spy + UserEntityMapper userEntityMapper; + + private UserServiceImpl userService; + + @Test + void testGetAllByRole() { + Mockito.when(((UserDao)getMockedDao()).getAll(UserRoleType.ADMIN)).thenReturn(List.of(getTestEntity())); + getPersistenceService(); + var dto = userService.getAll(UserRoleType.ADMIN); + assertThat(equals(dto.get(0), getTestEntity())).isTrue(); + } + + @Override + protected UserDto getTestDto() { + var userDto = new UserDto(); + userDto.setId(1); + userDto.setEmail("aaa@b.cz"); + userDto.setFirstName("John"); + userDto.setLastName("Brown"); + userDto.setPasswordHash("pass"); + userDto.setRoles(List.of(UserRoleType.USER, UserRoleType.ADMIN)); + return userDto; + } + + @Override + protected User getTestEntity() { + var user = new User(); + user.setId(1); + user.setEmail("aaa@b.cz"); + user.setFirstName("John"); + user.setLastName("Brown"); + user.setPasswordHash("pass"); + + var roleAdmin = new UserRole(); + roleAdmin.setId(2); + roleAdmin.setRole(UserRoleType.USER); + roleAdmin.setUser(user); + var roleUser = new UserRole(); + roleUser.setId(3); + roleUser.setRole(UserRoleType.ADMIN); + roleUser.setUser(user); + + return user; + } + + @Override + protected boolean equals(UserDto userDto, User user) { + var attributeEquals = + userDto.getId() == user.getId() && + userDto.getEmail().equals(user.getEmail()) && + userDto.getFirstName().equals(user.getFirstName()) && + userDto.getLastName().equals(user.getLastName()) && + userDto.getPasswordHash().equals(user.getPasswordHash()); + + var roleEquals = Set.copyOf(userDto.getRoles()).equals( + user.getRoles().stream().map(role -> role.getRole()).collect(Collectors.toSet())); + + return attributeEquals && roleEquals; + } + + @Override + protected PersistenceServiceImpl getPersistenceService() { + if (userService != null) { + return userService; + } + userService = new UserServiceImpl(userDao, userEntityMapper); + return userService; + } + + @Override + protected DaoBase getMockedDao() { + return userDao; + } +}