From 4a94e0c209dae96a4e6c98055730c79fa9a0b8f2 Mon Sep 17 00:00:00 2001 From: birkon <birkon@stud.ntnu.no> Date: Tue, 25 Apr 2023 14:10:29 +0200 Subject: [PATCH] added test + fixed services --- .../fridgeProduct/FridgeProductAsso.java | 2 + .../entity/fridgeProduct/FridgeProductId.java | 2 + .../v233/SmartMat/entity/group/Fridge.java | 13 +++ .../v233/SmartMat/entity/product/Product.java | 12 +++ .../group/FridgeProductAssoService.java | 8 ++ .../SmartMat/service/group/FridgeService.java | 4 +- .../group/FridgeProductAssoServiceTest.java | 97 +++++++++++++++++++ 7 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoServiceTest.java diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java index 4719dc3c..55dce18f 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java @@ -2,6 +2,7 @@ package ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct; import jakarta.persistence.*; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge; @@ -13,6 +14,7 @@ import java.sql.Date; @NoArgsConstructor @Data @Entity(name = "fridge_product") +@Builder @IdClass(FridgeProductId.class) public class FridgeProductAsso { @Id diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductId.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductId.java index 513bb5e9..932babae 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductId.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductId.java @@ -2,6 +2,7 @@ package ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -17,6 +18,7 @@ import java.sql.Date; @EqualsAndHashCode @NoArgsConstructor @AllArgsConstructor +@Builder public class FridgeProductId implements Serializable { private long fridgeId; diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java index 056f80fb..869f51b4 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java @@ -1,5 +1,6 @@ package ntnu.idatt2016.v233.SmartMat.entity.group; +import java.util.ArrayList; import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -38,4 +39,16 @@ public class Fridge{ @JsonIgnoreProperties("fridge") List<FridgeProductAsso> products; + + /** + * Adds a product to the fridge + * @param product the product to add to the fridge + */ + public void addProduct(FridgeProductAsso product){ + if(products == null){ + products = new ArrayList<>(); + } + + products.add(product); + } } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java index a0fa19fa..7c2f1bc6 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java @@ -10,6 +10,7 @@ import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge; import ntnu.idatt2016.v233.SmartMat.entity.Recipe; import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso; +import java.util.ArrayList; import java.util.List; /** @@ -71,4 +72,15 @@ public class Product{ @JsonIgnoreProperties({"products"}) List<Recipe> recipes; + /** + * Adds a fridge to the product + * @param fridge the fridge product association to add to the product + */ + public void addFridge(FridgeProductAsso fridge){ + if(fridges == null){ + fridges = new ArrayList<>(); + } + + fridges.add(fridge); + } } \ No newline at end of file diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoService.java index 34f0e7cd..6dccc079 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoService.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoService.java @@ -36,6 +36,14 @@ public class FridgeProductAssoService { temp.setEan(product); temp.setPurchaseDate(purchaseDate); fridgeProductAssoRepository.save(temp); + + fridge.addProduct(temp); + product.addFridge(temp); + + fridgeRepository.save(fridge); + + productRepository.save(product); + return temp; } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeService.java index d458bf76..8650f112 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeService.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeService.java @@ -56,8 +56,7 @@ public class FridgeService { if (fridge.getProducts().contains(temp)) { return false; } - fridge.getProducts().add(temp); - fridgeRepository.save(fridge); + fridgeProductAssoService.createFridgeProductAsso(fridge, productToAdd, new Date(LocalDate.now().toEpochDay())); return true; } else { return false; @@ -87,7 +86,6 @@ public class FridgeService { fridgeProductAssoService.deleteFridgeProductAsso(new FridgeProductAsso(fridge, productToRemove, purchaseDate)); - fridgeRepository.save(fridge); return true; } else { return false; diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoServiceTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoServiceTest.java new file mode 100644 index 00000000..777986eb --- /dev/null +++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoServiceTest.java @@ -0,0 +1,97 @@ +package ntnu.idatt2016.v233.SmartMat.service.group; + +import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso; +import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductId; +import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge; +import ntnu.idatt2016.v233.SmartMat.entity.product.Product; +import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeProductAssoRepository; +import org.junit.jupiter.api.BeforeAll; +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.DataJpaTest; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; + +import java.sql.Date; +import java.time.Instant; +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; + +@DataJpaTest +class FridgeProductAssoServiceTest { + + @Autowired + TestEntityManager entityManager; + + @Autowired + FridgeProductAssoRepository fridgeProductAssoRepository; + + private Product product; + + private Fridge fridge; + @BeforeEach + void setUp() { + entityManager.clear(); + + product = Product.builder() + .ean(1234567890123L) + .name("Test") + .description("Test") + .build(); + + fridge = Fridge.builder() + .build(); + + FridgeProductAsso fridgeProductAsso = FridgeProductAsso.builder() + .ean(product) + .fridgeId(fridge) + .purchaseDate(Date.valueOf("2023-04-24")) + .build(); + + product.addFridge(fridgeProductAsso); + fridge.addProduct(fridgeProductAsso); + + entityManager.persist(product); + entityManager.persist(fridge); + entityManager.persist(fridgeProductAsso); + + } + + @Test + void createFridgeProductAsso() { + Optional<FridgeProductAsso> temp = fridgeProductAssoRepository.findById( + new FridgeProductId(fridge.getFridgeId(), product.getEan(), Date.valueOf("2023-04-24"))); + assertTrue(temp.isPresent()); + + assertTrue(entityManager.find(Fridge.class, fridge.getFridgeId()).getProducts().contains(temp.get())); + assertTrue(entityManager.find(Product.class, product.getEan()).getFridges().contains(temp.get())); + + assertEquals(product.getEan(), temp.get().getEan().getEan()); + assertEquals(fridge.getFridgeId(), temp.get().getFridgeId().getFridgeId()); + } + + @Test + void deleteFridgeProductAsso() { + + Optional<FridgeProductAsso> temp = fridgeProductAssoRepository.findById( + new FridgeProductId(fridge.getFridgeId(), product.getEan(), Date.valueOf("2023-04-24"))); + assertTrue(temp.isPresent()); + + fridgeProductAssoRepository.delete(temp.get()); + + assertFalse(fridgeProductAssoRepository.findById( + new FridgeProductId(fridge.getFridgeId(), product.getEan(), Date.valueOf("2023-04-24"))).isPresent()); + + fridge.getProducts().remove(temp.get()); + product.getFridges().remove(temp.get()); + + entityManager.persist(fridge); + entityManager.persist(product); + + assertFalse(entityManager.find(Fridge.class, fridge.getFridgeId()).getProducts().contains(temp.get())); + assertFalse(entityManager.find(Product.class, product.getEan()).getFridges().contains(temp.get())); + } +} \ No newline at end of file -- GitLab