diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListController.java index 352447b28b4114bf14b0b099861f19b9a1580c34..4c4d085f99b2945c199416201739a3ecb7e3b978 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListController.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListController.java @@ -44,7 +44,9 @@ public class ShoppingListController { * @return the shopping list, or an error if the ID is invalid */ @GetMapping("/{id}") - public ResponseEntity<ShoppingList> getShoppingListById(@PathVariable("id") long id) { + public ResponseEntity<ShoppingList> getShoppingListById(@PathVariable("id") long id, Authentication auth) { + shoppingListService.isUserInShoppinglist(id, auth.getName()); + Optional<ShoppingList> shoppingList = shoppingListService.getShoppingListById(id); return shoppingList.map(list -> ResponseEntity.status(HttpStatus.OK).body(list)) .orElseGet(() -> ResponseEntity.status(HttpStatus.NOT_FOUND).build()); diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/ShoppingListRepository.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/ShoppingListRepository.java index 8bbc768488033a41fb1baa73a02619db73028503..b4dfbe259e81c36e2a8bfbd9170f9b7945d6d9d6 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/ShoppingListRepository.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/ShoppingListRepository.java @@ -1,5 +1,6 @@ package ntnu.idatt2016.v233.SmartMat.repository; +import java.util.List; import java.util.Optional; import ntnu.idatt2016.v233.SmartMat.entity.ShoppingList; @@ -23,5 +24,13 @@ public interface ShoppingListRepository extends JpaRepository<ShoppingList, Long */ Optional<ShoppingList> getByGroupGroupId(long id); - + + /** + * Gets all shopping lists by the username of the user + * @param username the username of the user + * @return a list of shopping lists + */ + List<ShoppingList> findAllByGroupUserUserUsername(String username); + + } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/ShoppingListService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/ShoppingListService.java index c7867e9c482e064e58117c78f316d604d4aed7f6..d77c53a8398e9d2689cad058678032d38595c7a0 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/ShoppingListService.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/ShoppingListService.java @@ -105,4 +105,16 @@ public class ShoppingListService { return shoppingListRepository.findById(shoppingListId); } + + /** + * Check if user can edit/get shoppinglist + * @param id id of shoppinglist + * @param name name of user + * @return true if user is in shoppinglist, false if not + */ + public boolean isUserInShoppinglist(long id, String name) { + return shoppingListRepository.findAllByGroupUserUserUsername(name).stream() + .anyMatch(shoppingList -> shoppingList.getShoppingListID() == id); + + } } diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListControllerTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListControllerTest.java index 04b1935e766b21b94a2acc063927598aca5fa024..cf325eb32a5f09e644ba684497e82bb5c36652d1 100644 --- a/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListControllerTest.java +++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListControllerTest.java @@ -1,5 +1,6 @@ package ntnu.idatt2016.v233.SmartMat.controller; +import ntnu.idatt2016.v233.SmartMat.dto.enums.Authority; import ntnu.idatt2016.v233.SmartMat.dto.request.ShoppingListRequest; import ntnu.idatt2016.v233.SmartMat.entity.ShoppingList; import ntnu.idatt2016.v233.SmartMat.service.ShoppingListService; @@ -11,7 +12,12 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import java.util.Collection; +import java.util.List; import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -28,6 +34,80 @@ public class ShoppingListControllerTest { private ShoppingList shoppingList; + private final Authentication regularUser = new Authentication() { + @Override + public Collection<? extends GrantedAuthority> getAuthorities() { + return List.of(new SimpleGrantedAuthority(Authority.USER.name())); + } + + @Override + public Object getCredentials() { + return null; + } + + @Override + public Object getDetails() { + return null; + } + + @Override + public Object getPrincipal() { + return null; + } + + @Override + public boolean isAuthenticated() { + return true; + } + + @Override + public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException { + + } + + @Override + public String getName() { + return "test"; + } + }; + + private Authentication adminUser = new Authentication() { + @Override + public Collection<? extends GrantedAuthority> getAuthorities() { + return List.of(new SimpleGrantedAuthority(Authority.ADMIN.name())); + } + + @Override + public Object getCredentials() { + return null; + } + + @Override + public Object getDetails() { + return null; + } + + @Override + public Object getPrincipal() { + return null; + } + + @Override + public boolean isAuthenticated() { + return true; + } + + @Override + public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException { + + } + + @Override + public String getName() { + return "test"; + } + }; + @BeforeEach public void setUp() { shoppingList = new ShoppingList(); @@ -39,7 +119,7 @@ public class ShoppingListControllerTest { long id = 1; when(shoppingListService.getShoppingListById(id)).thenReturn(Optional.of(shoppingList)); - ResponseEntity<ShoppingList> response = shoppingListController.getShoppingListById(id); + ResponseEntity<ShoppingList> response = shoppingListController.getShoppingListById(id, adminUser); assertEquals(HttpStatus.OK, response.getStatusCode()); assertEquals(shoppingList, response.getBody()); @@ -50,7 +130,7 @@ public class ShoppingListControllerTest { long id = 1; when(shoppingListService.getShoppingListById(id)).thenReturn(Optional.empty()); - ResponseEntity<ShoppingList> response = shoppingListController.getShoppingListById(id); + ResponseEntity<ShoppingList> response = shoppingListController.getShoppingListById(id, adminUser); assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); } diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/group/FridgeControllerTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/group/FridgeControllerTest.java index 418ef509f48c3a13f2da69ffb80655f6129e6a0a..4ae6df8aac66e0ef2cbba6b0e93cd51f4550b154 100644 --- a/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/group/FridgeControllerTest.java +++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/group/FridgeControllerTest.java @@ -51,7 +51,7 @@ public class FridgeControllerTest { private FridgeProductRequest fridgeProductRequest; - private Authentication regularUser = new Authentication() { + private final Authentication regularUser = new Authentication() { @Override public Collection<? extends GrantedAuthority> getAuthorities() { return List.of(new SimpleGrantedAuthority(Authority.USER.name())); diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/ShoppingListRepositoryTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/ShoppingListRepositoryTest.java index 0a9c74ca48672e56d6bdbbac4382ca2af4b1fe7a..a379523dff34f9c5189f923f6b0b70b601babf19 100644 --- a/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/ShoppingListRepositoryTest.java +++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/ShoppingListRepositoryTest.java @@ -6,6 +6,9 @@ import java.util.List; import java.util.Optional; import ntnu.idatt2016.v233.SmartMat.entity.group.Group; +import ntnu.idatt2016.v233.SmartMat.entity.group.UserGroupAsso; +import ntnu.idatt2016.v233.SmartMat.entity.group.UserGroupId; +import ntnu.idatt2016.v233.SmartMat.entity.user.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; @@ -96,4 +99,54 @@ public class ShoppingListRepositoryTest { List<ShoppingList> shoppingLists = shoppingListRepository.findAll(); assertEquals(2, shoppingLists.size()); } + + @Test + void getbyusername(){ + Group group = Group.builder() + .build(); + ShoppingList shoppingList1 = ShoppingList.builder() + .group(group) + .build(); + + Group group2 = Group.builder() + .build(); + ShoppingList shoppingList2 = ShoppingList.builder() + .group(group2) + .build(); + + User user = User.builder() + .username("username") + .password("password") + .build(); + + entityManager.persist(user); + entityManager.persist(group); + + group.addUser(UserGroupAsso.builder() + .id(new UserGroupId(user.getUsername(), group.getGroupId())) + .group(group) + .user(user) + .build()); + + + + shoppingListRepository.save(shoppingList1); + shoppingListRepository.save(shoppingList2); + + List<ShoppingList> shoppingLists = shoppingListRepository.findAll(); + + assertEquals(2, shoppingLists.size()); + + List<ShoppingList> shoppingListsByUsername = shoppingListRepository + .findAllByGroupUserUserUsername(user.getUsername()); + + assertEquals(1, shoppingListsByUsername.size()); + + ShoppingList tempShoppingList = shoppingListsByUsername.get(0); + + assertEquals(group.getGroupId(), tempShoppingList.getGroup().getGroupId()); + + + + } } diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/ShoppingListServiceTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/ShoppingListServiceTest.java index c304217d779327491fe8d03debc7e4d5e72a463c..954761ab742f9c055b1540fa3a154d2b5e3f33cb 100644 --- a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/ShoppingListServiceTest.java +++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/ShoppingListServiceTest.java @@ -1,6 +1,8 @@ package ntnu.idatt2016.v233.SmartMat.service; import ntnu.idatt2016.v233.SmartMat.entity.group.Group; +import ntnu.idatt2016.v233.SmartMat.entity.group.UserGroupAsso; +import ntnu.idatt2016.v233.SmartMat.entity.user.User; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -79,4 +81,33 @@ class ShoppingListServiceTest { verify(shoppingListRepository, times(1)).deleteById(1L); } + + @Test + void isUserInGroupWithShoppinglist(){ + ShoppingList shoppingList = new ShoppingList(); + Group group = new Group(); + shoppingList.setGroup(group); + + User user = User.builder() + .username("test") + .password("test") + .build(); + + group.addUser(UserGroupAsso.builder() + .user(user) + .group(group) + .build()); + + + when(shoppingListRepository.findAllByGroupUserUserUsername(user.getUsername())) + .thenReturn(List.of(shoppingList)); + + boolean result = shoppingListService.isUserInShoppinglist( + shoppingList.getShoppingListID(), user.getUsername()); + + assertTrue(result); + + verify(shoppingListRepository, times(1)) + .findAllByGroupUserUserUsername(user.getUsername()); + } }