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 4719dc3cac54e4fe298779aae2e1b5324da51693..55dce18f0f505a93a2f85c2ff3f42517059777cb 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 513bb5e964287032235d2f1c789a2f5e49b44963..932babae66e437de1ae5dd1b9ee432065863bd9b 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 056f80fb53e403aa945b912b07589df077f44a37..869f51b495f090c9234aa9661e9cce7083a42e61 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 a0fa19fa4fc877b15428f62025c30581122f8641..7c2f1bc6613d46d92c7da35fa185791267a6005d 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 34f0e7cdcd33628e2c7ddf907025cd78ffb1428c..6dccc0791a15e71b29e22999fd7db1b9260ec0be 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 d458bf76726d972ebbaa32384746950840fbc158..8650f11264f6dc6a51a2bc56bc82018ef823df51 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 0000000000000000000000000000000000000000..777986ebd2e879f81e8504902eec232b18ee0ce7 --- /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