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