From 7abf48a29cc41414888d1abd39b61d2fcf2f05a3 Mon Sep 17 00:00:00 2001 From: Lara Blersch <lb210@hdm-stuttgart.de> Date: Tue, 16 Jan 2024 15:50:11 +0100 Subject: [PATCH] implemented WishListServiceTest; not finished yet --- .../repositories/WishListRepositoryTest.java | 1 - .../growbros/service/WishListServiceTest.java | 106 ++++++++++++++++++ 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/test/java/hdm/mi/growbros/service/WishListServiceTest.java diff --git a/src/test/java/hdm/mi/growbros/repositories/WishListRepositoryTest.java b/src/test/java/hdm/mi/growbros/repositories/WishListRepositoryTest.java index 8926d4c..cc99ef4 100644 --- a/src/test/java/hdm/mi/growbros/repositories/WishListRepositoryTest.java +++ b/src/test/java/hdm/mi/growbros/repositories/WishListRepositoryTest.java @@ -9,7 +9,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; -import org.springframework.security.web.access.channel.RetryWithHttpEntryPoint; import org.springframework.test.context.ActiveProfiles; import java.util.List; diff --git a/src/test/java/hdm/mi/growbros/service/WishListServiceTest.java b/src/test/java/hdm/mi/growbros/service/WishListServiceTest.java new file mode 100644 index 0000000..59cbe28 --- /dev/null +++ b/src/test/java/hdm/mi/growbros/service/WishListServiceTest.java @@ -0,0 +1,106 @@ +package hdm.mi.growbros.service; + +import hdm.mi.growbros.config.UserTestData; +import hdm.mi.growbros.exceptions.PlantNotFoundException; +import hdm.mi.growbros.models.WishListEntry; +import hdm.mi.growbros.models.plant.Plant; +import hdm.mi.growbros.models.user.Role; +import hdm.mi.growbros.models.user.User; +import hdm.mi.growbros.repositories.PlantRepository; +import hdm.mi.growbros.repositories.WishListRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.data.domain.Sort; +import org.springframework.test.context.ActiveProfiles; + +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +@SpringBootTest +@ActiveProfiles("test") +public class WishListServiceTest { + + @MockBean + private WishListRepository wishListRepository; + @MockBean + private PlantRepository plantRepository; + + @Autowired + private WishListService wishListService; + + @MockBean + private TestEntityManager entityManager; + private User user1; + + @BeforeEach + void setupEach() { + user1 = User.builder() + .email("user1@gmail.com") + .role(Role.USER) + .password("safePassword123!") + .build(); + entityManager.persist(user1); + } + + @Test + void shouldThrow_whenAddingPlant_thatDoesNotExist() { + //setup + when(plantRepository.findById(100L)).thenReturn(Optional.empty()); + + assertThrows(PlantNotFoundException.class, () -> wishListService.addPlantToWishList(100L, UserTestData.getUser1())); + } + + @Test + void shouldReturn_whenAddingExistingPlant() { + //setup + Plant plant = Plant.builder().name("Plant!").build(); + when(plantRepository.findById(1L)).thenReturn(Optional.of(plant)); + /*when(wishListRepository.save( + any(WishListEntry.class)) + ).thenReturn(WishListEntry.builder().plant(plant).build()); +*/ + //assert + wishListService.addPlantToWishList(1L, user1); + assertEquals(1, wishListService.countByUser(user1)); + } + + @Test + void shouldReturnEntries_inCorrectOrder() { + //setup + Plant p1 = Plant.builder().name("AAA").build(); + Plant p2 = Plant.builder().name("BBB").build(); + Plant p3 = Plant.builder().name("CCC").build(); + var orderedByNameMock = List.of(p1, p2, p3); + var orderedByCreatedMock = List.of(p2, p1, p3); + var orderedByPlantDateMock = List.of(p3, p2, p1); + //var orderedByCurrentPlantDateMock = List.of(); + + User user = UserTestData.getUser1(); + + when(wishListRepository.findByUser(user, Sort.by("createdAt").descending())).thenReturn(mapPlantsToWishListEntries(orderedByCreatedMock, user)); + when(wishListRepository.findByUser(user, Sort.by("plant.name"))).thenReturn(mapPlantsToWishListEntries(orderedByNameMock, user)); + when(wishListRepository.findAllByNearestPlantingWeek(eq(user), any(int.class))).thenReturn(mapPlantsToWishListEntries(orderedByPlantDateMock, user)); + + assertAll( + () -> assertEquals(orderedByNameMock, wishListService.getWishedPlants(user, null)), + () -> assertEquals(orderedByNameMock, wishListService.getWishedPlants(user, "random stuff")), + () -> assertEquals(orderedByCreatedMock, wishListService.getWishedPlants(user, "createdAt")), + () -> assertEquals(orderedByPlantDateMock, wishListService.getWishedPlants(user, "plantDate")) + ); + } + + private List<WishListEntry> mapPlantsToWishListEntries(List<Plant> plants, User user) { + return plants.stream() + .map(plant -> WishListEntry.builder().plant(plant).id(0L).user(user).build()) + .toList(); + } +} \ No newline at end of file -- GitLab