From 887d3e9966eb61f7216863b93ba95339f8a8eab9 Mon Sep 17 00:00:00 2001 From: Jakub Balga Date: Sun, 24 Apr 2022 15:29:25 +0200 Subject: [PATCH 1/5] User tests - not passing --- .../mappers/user/UserEntityMapper.java | 5 +- .../services/persistence/user/UserTests.java | 138 ++++++++++++++++++ 2 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 winery/service/src/test/java/cz/muni/fi/pa165/winery/services/persistence/user/UserTests.java 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 b0dfa2b..15a3782 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 @@ -19,7 +19,9 @@ public class UserEntityMapper extends EntityMapperImpl { @Override protected void configureModelMapper(ModelMapper mapper) { super.configureModelMapper(mapper); - + // reviews and orders should be mapped to ids rather than skipped (see orderItemEntityMapper) + // roles mapping should be done in mapTo... methods (see orderServiceImpl) + /* mapper.createTypeMap(User.class, UserDto.class) .addMappings(m -> m.skip(UserDto::setOrderIds)); mapper.createTypeMap(UserDto.class, User.class) @@ -34,5 +36,6 @@ public class UserEntityMapper extends EntityMapperImpl { .addMappings(m -> m.skip(UserDto::setRoles)); mapper.createTypeMap(UserDto.class, User.class) .addMappings(m -> m.skip(User::setRoles)); + */ } } 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 0000000..9a84a31 --- /dev/null +++ b/winery/service/src/test/java/cz/muni/fi/pa165/winery/services/persistence/user/UserTests.java @@ -0,0 +1,138 @@ +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() { + getPersistenceService(); + var dao = getMockedDao(); + Mockito.when(((UserDao)dao).getAll(UserRoleType.ADMIN)).thenReturn(List.of(getTestEntity())); + 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.setReviewIds(List.of(1L)); + userDto.setOrderIds(List.of(1L)); + + var roleDto = new UserRoleDto(); + roleDto.setId(1); + roleDto.setRole(UserRoleType.ADMIN); + roleDto.setUserId(1); + userDto.setRoles(Set.of(roleDto)); + + 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 review = new ProductReview(); + review.setId(1); + review.setGrade((short)3); + review.setUser(user); + + var order = new Order(); + order.setId(1); + order.setShipped(true); + order.setDateTime(LocalDateTime.of(2022, 1, 1, 0, 0)); + order.setUser(user); + + var role = new UserRole(); + role.setId(1); + role.setRole(UserRoleType.ADMIN); + role.setUser(user); + + user.setReviews(Set.of(review)); + user.setOrders(Set.of(order)); + user.setRoles(Set.of(role)); + + 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 reviewEquals = + userDto.getReviewIds().equals(user.getReviews().stream().map(rev -> rev.getId()).collect(Collectors.toList())); + var orderEquals = + userDto.getOrderIds().equals(user.getOrders().stream().map(ord -> ord.getId()).collect(Collectors.toList())); + var roleEquals = + userDto.getRoles().stream().map(rol -> rol.getId()).collect(Collectors.toSet()).equals( + user.getRoles().stream().map(rol -> rol.getId()).collect(Collectors.toSet())); + + return attributeEquals && reviewEquals && orderEquals && roleEquals; + } + + @Override + protected PersistenceServiceImpl getPersistenceService() { + if (userService != null) { + return userService; + } + userService = new UserServiceImpl(userDao, userEntityMapper); + return userService; + } + + @Override + protected DaoBase getMockedDao() { + return userDao; + } +} -- GitLab From 9739026baacf44cc3690fae3468e89e69ae0fde9 Mon Sep 17 00:00:00 2001 From: Jakub Balga Date: Sun, 24 Apr 2022 16:06:08 +0200 Subject: [PATCH 2/5] User tests - not passing --- .../winery/services/mappers/user/UserEntityMapper.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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 15a3782..47d841d 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 @@ -20,8 +20,9 @@ public class UserEntityMapper extends EntityMapperImpl { protected void configureModelMapper(ModelMapper mapper) { super.configureModelMapper(mapper); // reviews and orders should be mapped to ids rather than skipped (see orderItemEntityMapper) - // roles mapping should be done in mapTo... methods (see orderServiceImpl) - /* + // commented out mappers are useless I think + // roles mapping should be done in mapTo... methods in UserServiceImpl (see orderServiceImpl) +/* mapper.createTypeMap(User.class, UserDto.class) .addMappings(m -> m.skip(UserDto::setOrderIds)); mapper.createTypeMap(UserDto.class, User.class) @@ -31,11 +32,11 @@ public class UserEntityMapper extends EntityMapperImpl { .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) .addMappings(m -> m.skip(User::setRoles)); - */ + } } -- GitLab From f46fdecbaab2f918b51318724a5f7beaaef4442a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20Dud=C3=ADk?= Date: Sun, 24 Apr 2022 18:04:25 +0200 Subject: [PATCH 3/5] Fix UserDTO and it's mapping to User --- .../fi/pa165/winery/dto/user/UserDto.java | 13 ++----------- .../mappers/user/UserEntityMapper.java | 17 ++--------------- .../winery/services/user/UserServiceImpl.java | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 26 deletions(-) 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 784a832..07e6130 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 47d841d..8720f2e 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,24 +21,9 @@ public class UserEntityMapper extends EntityMapperImpl { @Override protected void configureModelMapper(ModelMapper mapper) { super.configureModelMapper(mapper); - // reviews and orders should be mapped to ids rather than skipped (see orderItemEntityMapper) - // commented out mappers are useless I think - // roles mapping should be done in mapTo... methods in UserServiceImpl (see orderServiceImpl) -/* - 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) .addMappings(m -> m.skip(User::setRoles)); - } } 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 455ebc5..350f100 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; + } } -- GitLab From 1efa4fc995a71c7eba9681ee96e16cfab3bbbf59 Mon Sep 17 00:00:00 2001 From: Jakub Balga Date: Sun, 24 Apr 2022 18:53:25 +0200 Subject: [PATCH 4/5] User tests - passing --- .../services/persistence/user/UserTests.java | 53 +++++-------------- 1 file changed, 14 insertions(+), 39 deletions(-) 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 index 9a84a31..6604810 100644 --- 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 @@ -43,9 +43,8 @@ public class UserTests extends PersistenceServiceTestBase { @Test void testGetAllByRole() { - getPersistenceService(); - var dao = getMockedDao(); - Mockito.when(((UserDao)dao).getAll(UserRoleType.ADMIN)).thenReturn(List.of(getTestEntity())); + Mockito.when((userDao).getAll(UserRoleType.ADMIN)).thenReturn(List.of(getTestEntity())); + userService = new UserServiceImpl(userDao, userEntityMapper); var dto = userService.getAll(UserRoleType.ADMIN); assertThat(equals(dto.get(0), getTestEntity())).isTrue(); } @@ -58,15 +57,7 @@ public class UserTests extends PersistenceServiceTestBase { userDto.setFirstName("John"); userDto.setLastName("Brown"); userDto.setPasswordHash("pass"); - userDto.setReviewIds(List.of(1L)); - userDto.setOrderIds(List.of(1L)); - - var roleDto = new UserRoleDto(); - roleDto.setId(1); - roleDto.setRole(UserRoleType.ADMIN); - roleDto.setUserId(1); - userDto.setRoles(Set.of(roleDto)); - + userDto.setRoles(List.of(UserRoleType.USER, UserRoleType.ADMIN)); return userDto; } @@ -79,25 +70,14 @@ public class UserTests extends PersistenceServiceTestBase { user.setLastName("Brown"); user.setPasswordHash("pass"); - var review = new ProductReview(); - review.setId(1); - review.setGrade((short)3); - review.setUser(user); - - var order = new Order(); - order.setId(1); - order.setShipped(true); - order.setDateTime(LocalDateTime.of(2022, 1, 1, 0, 0)); - order.setUser(user); - - var role = new UserRole(); - role.setId(1); - role.setRole(UserRoleType.ADMIN); - role.setUser(user); - - user.setReviews(Set.of(review)); - user.setOrders(Set.of(order)); - user.setRoles(Set.of(role)); + 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; } @@ -111,15 +91,10 @@ public class UserTests extends PersistenceServiceTestBase { userDto.getLastName().equals(user.getLastName()) && userDto.getPasswordHash().equals(user.getPasswordHash()); - var reviewEquals = - userDto.getReviewIds().equals(user.getReviews().stream().map(rev -> rev.getId()).collect(Collectors.toList())); - var orderEquals = - userDto.getOrderIds().equals(user.getOrders().stream().map(ord -> ord.getId()).collect(Collectors.toList())); - var roleEquals = - userDto.getRoles().stream().map(rol -> rol.getId()).collect(Collectors.toSet()).equals( - user.getRoles().stream().map(rol -> rol.getId()).collect(Collectors.toSet())); + var roleEquals = Set.copyOf(userDto.getRoles()).equals( + user.getRoles().stream().map(role -> role.getRole()).collect(Collectors.toSet())); - return attributeEquals && reviewEquals && orderEquals && roleEquals; + return attributeEquals && roleEquals; } @Override -- GitLab From 4f17ad9fdc109dec8ffd9e8b666082e9bf08680f Mon Sep 17 00:00:00 2001 From: Jakub Balga Date: Sun, 24 Apr 2022 18:59:41 +0200 Subject: [PATCH 5/5] small edit --- .../fi/pa165/winery/services/persistence/user/UserTests.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 index 6604810..724cd94 100644 --- 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 @@ -43,8 +43,8 @@ public class UserTests extends PersistenceServiceTestBase { @Test void testGetAllByRole() { - Mockito.when((userDao).getAll(UserRoleType.ADMIN)).thenReturn(List.of(getTestEntity())); - userService = new UserServiceImpl(userDao, userEntityMapper); + 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(); } -- GitLab