From 16d2d55f4468667c41705220025613a76a6309e8 Mon Sep 17 00:00:00 2001
From: birkon <birkon@stud.ntnu.no>
Date: Thu, 4 May 2023 15:59:46 +0200
Subject: [PATCH] Quick fix on group/progress endpoing, and test for some of
 the fridge services

---
 .../controller/group/GroupController.java     |  10 +-
 .../SmartMat/service/group/FridgeService.java |  17 --
 .../service/group/FridgeServiceTest.java      | 170 ++++++++++++++++--
 3 files changed, 160 insertions(+), 37 deletions(-)

diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java
index d847e0ee..7927a334 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java
@@ -156,11 +156,15 @@ public class GroupController {
      */
     @GetMapping("/{groupId}/progress")
     public ResponseEntity<Integer> getProgressOfLevel(@PathVariable("groupId") long groupId, Authentication auth) {
-        if (!groupService.isUserAssociatedWithGroup(auth.getName(), groupId) ||
-                auth.getAuthorities().stream().noneMatch(role -> role.getAuthority().equals("ADMIN"))) {
-            return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
+        if(auth.getAuthorities().stream().noneMatch(role -> role.getAuthority().equals("ADMIN"))){
+            if (!groupService.isUserAssociatedWithGroup(auth.getName(), groupId))
+            {
+                return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
+            }
         }
 
+
+
         return groupService.getProgressOfLevel(groupId)
                 .map(ResponseEntity::ok)
                 .orElseGet(() -> ResponseEntity.notFound().build());
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 089dc8a0..e444c646 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
@@ -127,8 +127,6 @@ public class FridgeService {
 
         if (fridgeProductAsso.isEmpty()) return false;
 
-        Fridge fridge = fridgeRepository.findById(fridgeProductAsso.get().getFridgeId().getFridgeId())
-                .get();
 
 
         fridgeProductAssoRepo.delete(fridgeProductAsso.get());
@@ -146,21 +144,6 @@ public class FridgeService {
         fridgeRepository.save(fridge);
     }
 
-    /**
-     * Adds a group to a fridge
-     * @param fridgeId the id of the fridge
-     * @param groupId the id of the group
-     */
-    public void addGroupToFridge(long fridgeId, long groupId) {
-        Optional<Fridge> fridge = fridgeRepository.findById(fridgeId);
-        Optional<Group> group = groupRepository.findByGroupId(groupId);
-        if (fridge.isPresent() && group.isPresent()) {
-            fridge.get().setGroup(group.get());
-            group.get().setFridge(fridge.get());
-            groupRepository.save(group.get());
-            fridgeRepository.save(fridge.get());
-        }
-    }
 
     /**
      * Delete an amount from a fridge product
diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeServiceTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeServiceTest.java
index 4505cff9..7034e9a0 100644
--- a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeServiceTest.java
+++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeServiceTest.java
@@ -1,10 +1,19 @@
 package ntnu.idatt2016.v233.SmartMat.service.group;
 
+import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
+import ntnu.idatt2016.v233.SmartMat.dto.request.FridgeProductRequest;
+import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso;
+import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge;
+import ntnu.idatt2016.v233.SmartMat.entity.group.Group;
+import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
 import ntnu.idatt2016.v233.SmartMat.repository.group.GroupRepository;
+import ntnu.idatt2016.v233.SmartMat.repository.product.FridgeProductAssoRepo;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
@@ -12,6 +21,10 @@ import org.mockito.MockitoAnnotations;
 import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeRepository;
 import ntnu.idatt2016.v233.SmartMat.service.product.ProductService;
 
+import java.sql.Date;
+import java.util.ArrayList;
+import java.util.Optional;
+
 
 public class FridgeServiceTest {
 
@@ -25,6 +38,9 @@ public class FridgeServiceTest {
     @Mock
     private GroupRepository groupRepository;
 
+    @Mock
+    private FridgeProductAssoRepo fridgeProductAssoRepo;
+
     @InjectMocks
     private FridgeService fridgeService;
 
@@ -33,11 +49,11 @@ public class FridgeServiceTest {
         MockitoAnnotations.openMocks(this);
     }
 
-    /*
+
+
     @Test
     public void testAddProductToFridge() {
         // Arrange
-        long groupId = 1L;
         long ean = 12345L;
         Optional<Product> product = Optional.of(Product.builder()
                         .ean(ean)
@@ -50,38 +66,158 @@ public class FridgeServiceTest {
         group.setFridge(fridge);
 
         when(productService.getProductById(ean)).thenReturn(product);
+        when(fridgeRepository.findByGroupGroupId(group.getGroupId())).thenReturn(Optional.of(fridge));
+
+        FridgeProductRequest fridgeProductRequest = new FridgeProductRequest(12093812L, group.getGroupId(),
+                product.get().getEan(), 1, 10, 100);
+
+        // Act
+        Optional<Product> result = fridgeService.addProductToFridge(fridgeProductRequest);
+
+
+        verify(fridgeRepository).save(any(Fridge.class));
+
+
+        // Assert
+        assertTrue(result.isPresent());
+
+        assertTrue(fridge.getProducts().stream().anyMatch(fp -> fp.getEan().getEan() == product.get().getEan()));
+    }
+
+
+
+    @Test
+    void testGetFridgeByGroupId() {
+        // Arrange
+        long groupId = 12345L;
+        Fridge fridge = new Fridge();
+        fridge.setGroup(Group.builder()
+                        .groupId(groupId)
+                .build());
         when(fridgeRepository.findByGroupGroupId(groupId)).thenReturn(Optional.of(fridge));
-        when(fridgeProductAssoService.createFridgeProductAsso(any(Fridge.class), any(Product.class), any(Date.class))).thenReturn(new FridgeProductAsso());
 
         // Act
-        boolean result = fridgeService.addProductToFridge(groupId, ean);
+        Optional<Fridge> result = fridgeService.getFridgeByGroupId(groupId);
 
+        // Assert
+        assertTrue(result.isPresent());
+        assertEquals(groupId, result.get().getGroup().getGroupId());
+        verify(fridgeRepository).findByGroupGroupId(groupId);
+    }
 
-        verify(fridgeProductAssoService).createFridgeProductAsso(any(Fridge.class), any(Product.class), any(Date.class));
+    @Test
+    void testGetFridgeByGroupIdNotFound() {
+        // Arrange
+        long groupId = 12345L;
+        when(fridgeRepository.findByGroupGroupId(groupId)).thenReturn(Optional.empty());
 
+        // Act
+        Optional<Fridge> result = fridgeService.getFridgeByGroupId(groupId);
 
         // Assert
-        assertTrue(result);
+        assertTrue(result.isEmpty());
+        verify(fridgeRepository).findByGroupGroupId(groupId);
     }
 
+    @Test
+    void testRemoveItemFromFridge(){
+        // Arrange
+        long ean = 12345L;
+        Product product = Product.builder()
+                        .ean(ean)
+                        .name("Test Product")
+                .build();
+
+        Fridge fridge = Fridge.builder()
+                .fridgeId(1234L)
+                .build();
+        fridge.setProducts(new ArrayList<>());
+        Group group = new Group();
+        fridge.setGroup(group);
+        group.setFridge(fridge);
+
+        FridgeProductAsso fridgepr = FridgeProductAsso.builder()
+                .fridgeId(fridge)
+                .ean(product)
+                .id(123456L)
+                .build();
+
+        fridge.addProduct(fridgepr);
+        product.addFridge(fridgepr);
 
+        when(fridgeProductAssoRepo.findById(123456L)).thenReturn(Optional.of(fridgepr));
+        when(productService.getProductById(ean)).thenReturn(Optional.of(product));
+
+        // Act
+        boolean result = fridgeService.removeProductFromFridge(123456L);
+
+        // Assert
+        assertTrue(result);
+        verify(fridgeProductAssoRepo).delete(fridgepr);
+    }
 
     @Test
-    public void testAddGroupToFridge() {
+    void testDeleteAmmountFromFridge(){
         // Arrange
-        long fridgeId = 1L;
-        long groupId = 1L;
-        Optional<Fridge> fridge = Optional.of(new Fridge());
-        Optional<Group> group = Optional.of(new Group());
+        long ean = 12345L;
+        Product product = Product.builder()
+                        .ean(ean)
+                        .name("Test Product")
+                .build();
+
+        Fridge fridge = Fridge.builder()
+                .fridgeId(1234L)
+                .build();
+        fridge.setProducts(new ArrayList<>());
+        Group group = new Group();
+        fridge.setGroup(group);
+        group.setFridge(fridge);
 
-        when(fridgeRepository.findById(fridgeId)).thenReturn(fridge);
-        when(groupRepository.findByGroupId(groupId)).thenReturn(group);
+        FridgeProductAsso fridgepr = FridgeProductAsso.builder()
+                .fridgeId(fridge)
+                .ean(product)
+                .id(123456L)
+                .amount(2)
+                .build();
+
+        fridge.addProduct(fridgepr);
+        product.addFridge(fridgepr);
+
+        when(fridgeProductAssoRepo.findById(123456L)).thenReturn(Optional.of(fridgepr));
+        when(fridgeProductAssoRepo.findAllById(123456L)).thenReturn(Optional.of(fridgepr));
+        when(productService.getProductById(ean)).thenReturn(Optional.of(product));
+
+        double newAmount = fridgepr.getAmount() - 1;
+
+
+        when(fridgeProductAssoRepo.save(FridgeProductAsso.builder()
+                .amount(newAmount)
+                .id(123456L)
+                .ean(product)
+                .fridgeId(fridge)
+                .build()
+        )).thenReturn(FridgeProductAsso.builder()
+                        .amount(newAmount)
+                        .id(139132L)
+                        .ean(product)
+                        .fridgeId(fridge)
+                .build());
 
         // Act
-        fridgeService.addGroupToFridge(fridgeId, groupId);
+        Optional<FridgeProductAsso> result = fridgeService.deleteAmountFromFridge(123456L, 1);
 
         // Assert
-        assertEquals(fridge.get().getGroup(), group.get());
-        assertEquals(group.get().getFridge(), fridge.get());
-    }*/
+        assertTrue(result.isPresent());
+        assertEquals(newAmount, result.get().getAmount());
+        assertNotEquals(2, result.get().getAmount());
+
+        verify(fridgeProductAssoRepo).save(any(FridgeProductAsso.class));
+    }
+
+
+    @Test
+    void deleteEntireAmountFromProduct(){
+
+
+    }
 }
-- 
GitLab