package eu.ztsh.wymiana.service; import eu.ztsh.wymiana.EntityCreator; import eu.ztsh.wymiana.RepositoryBasedTest; import eu.ztsh.wymiana.data.repository.UserRepository; import eu.ztsh.wymiana.exception.UserAlreadyExistsException; import eu.ztsh.wymiana.util.UserMapper; import jakarta.transaction.Transactional; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; class UserServiceTest extends RepositoryBasedTest { private final UserService userService; @Autowired public UserServiceTest(UserRepository userRepository) { super(userRepository); userService = new UserService(userRepository); } @Test @Transactional void createNewUserTest() { userService.create(EntityCreator.userRequest()); var entity = EntityCreator.user().build(); expect(entity); } @Test void createDuplicatedUser() { var first = EntityCreator.userRequest(); var second = EntityCreator.userRequest(); userService.create(first); assertThatThrownBy(() -> userService.create(second)) .isInstanceOf(UserAlreadyExistsException.class) .hasMessage("User with PESEL %s already exists".formatted(EntityCreator.Constants.PESEL)); } @Test @Transactional void getExistingUserTest() { var entity = EntityCreator.user().build(); userRepository.save(entity); var userOptional = userService.get(EntityCreator.Constants.PESEL); var expected = UserMapper.entityToPojo(entity); assertThat(userOptional) .isNotEmpty() .get() .usingRecursiveComparison() .isEqualTo(expected); } @Test void getNonExistingUserTest() { var userOptional = userService.get(EntityCreator.Constants.PESEL); assertThat(userOptional).isEmpty(); } }