Skip to content
Snippets Groups Projects
Commit 888c99b4 authored by Anders Austlid's avatar Anders Austlid
Browse files

Merged GroupAssoController and GroupController. Cleaned up endpoint addresses

parent 12e90f3e
No related branches found
No related tags found
No related merge requests found
......@@ -2,25 +2,27 @@ package ntnu.idatt2016.v233.SmartMat.controller.group;
import lombok.AllArgsConstructor;
import ntnu.idatt2016.v233.SmartMat.entity.group.Group;
import ntnu.idatt2016.v233.SmartMat.entity.group.UserGroupAsso;
import ntnu.idatt2016.v233.SmartMat.service.group.GroupService;
import ntnu.idatt2016.v233.SmartMat.service.group.UserGroupAssoService;
import ntnu.idatt2016.v233.SmartMat.service.user.UserService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* Controller for groups API, providing endpoints for group management
*
* @author Anders Austlid
* @version 1.0
* @since 20.04.2023
* @author Anders Austlid, Pedro Cardona
* @version 1.1
* @since 27.04.2023
*/
@AllArgsConstructor
@RestController
@RequestMapping("/api/groups")
public class GroupController {
private final GroupService groupService;
private final UserService userService;
private final UserGroupAssoService userGroupAssoService;
/**
......@@ -28,7 +30,7 @@ public class GroupController {
* @param groupName the name of the group
* @return a ResponseEntity containing the group if it exists, or a 404 if it doesn't
*/
@GetMapping("/group/{groupName}")
@GetMapping("/{groupName}")
public ResponseEntity<Group> getGroupByName(@PathVariable("groupName") String groupName){
return groupService.getGroupByName(groupName)
.map(ResponseEntity::ok)
......@@ -40,7 +42,7 @@ public class GroupController {
* @param groupId the id of the group
* @return a ResponseEntity containing the group if it exists, or a 404 if it doesn't
*/
@GetMapping("/group/id/{groupId}")
@GetMapping("/id/{groupId}")
public ResponseEntity<Group> getGroupById(@PathVariable("groupId") long groupId){
return groupService.getGroupById(groupId)
.map(ResponseEntity::ok)
......@@ -53,7 +55,7 @@ public class GroupController {
* @param group the group to create
* @return a ResponseEntity containing the created group if it was created successfully, or a 400 if it wasn't
*/
@PostMapping("/group/{username}")
@PostMapping("/{username}")
public ResponseEntity<Group> createGroup(@RequestBody Group group,
@PathVariable("username") String username) {
if(groupService.getGroupById(group.getGroupId()).isPresent()) {
......@@ -73,7 +75,7 @@ public class GroupController {
* @param groupId the id of the group
* @return a ResponseEntity containing the level of the group if it exists, or a 404 if it doesn't
*/
@GetMapping("/group/{groupId}/level")
@GetMapping("/{groupId}/level")
public ResponseEntity<Long> getGroupLevel(@PathVariable("groupId") long groupId) {
return groupService.getGroupById(groupId)
.map(group -> ResponseEntity.ok(group.getLevel()))
......@@ -87,7 +89,7 @@ public class GroupController {
* @param exp the new experience points of the group
* @return a ResponseEntity containing the new level of the group, or a 404 Not Found response if no Group with the given ID was found
*/
@PutMapping("/group/{groupId}/newLevel/{exp}")
@PutMapping("/{groupId}/newLevel/{exp}")
public ResponseEntity<Long> setNewLevel(@PathVariable("groupId") long groupId, @PathVariable("exp") long exp) {
return groupService.setLevelByGroupId(groupId, exp)
.map(group -> ResponseEntity.ok(group.getLevel()))
......@@ -101,7 +103,7 @@ public class GroupController {
* @param groupId the ID of the group to query
* @return a ResponseEntity containing the progress of the current level as a percentage, or a 404 Not Found response if no Group with the given ID was found
*/
@GetMapping("/group/{groupId}/progress")
@GetMapping("/{groupId}/progress")
public ResponseEntity<Integer> getProgressOfLevel(@PathVariable("groupId") long groupId) {
return groupService.getProgressOfLevel(groupId)
.map(ResponseEntity::ok)
......@@ -114,10 +116,68 @@ public class GroupController {
* @param groupId the ID of the group to update
* @return a ResponseEntity with a Boolean value indicating whether the operation was successful
*/
@PutMapping("/group/{groupId}/changeOpen")
@PutMapping("/{groupId}/changeOpen")
public ResponseEntity<Boolean> changeOpenValue(@PathVariable("groupId") long groupId) {
return groupService.OpenOrCloseGroup(groupId)
.map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity.notFound().build());
}
/**
* Returns a response entity containing a list of UserGroupAsso objects related to the given groupId.
* If no user-group associations are found for the given groupId, a not-found response entity is returned.
*
* @param groupId the ID of the group to retrieve user-group associations for
* @return a response entity containing a list of UserGroupAsso objects related to the given groupId, or a not-found response entity if no associations are found
*/
@GetMapping("/information/{groupId}")
public ResponseEntity<List<UserGroupAsso>> getInformationByGroupId(@PathVariable("groupId") long groupId){
return userGroupAssoService.getInformationByGroupId(groupId).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
}
/**
* Handles the HTTP PUT request to change the primary group of a user.
*
* @param username the username of the user whose primary group is to be changed
* @param newId the ID of the new primary group
* @param oldId the ID of the old primary group
* @return a ResponseEntity object containing an HTTP status code and the updated UserGroupAsso object,
* or a ResponseEntity object with an HTTP status code indicating that the request was not successful
*/
@PutMapping("/markNewPrimary/{username}/{oldId}/{newId}")
public ResponseEntity<?> markNewPrimaryGroup(@PathVariable("username") String username,
@PathVariable("newId") long newId,
@PathVariable("oldId") long oldId){
return userGroupAssoService.changePrimaryGroup(oldId,newId,username).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
}
/**
* Handles the HTTP POST request to add a new connection between a user and a group.
*
* @param username the username of the user to add to the group
* @param linkCode the code of the group to which the user is to be added
* @return a ResponseEntity object containing an HTTP status code and the newly created UserGroupAsso object,
* or a ResponseEntity object with an HTTP status code indicating that the request was not successful
*/
@PostMapping("/connection/{username}/{linkCode}")
public ResponseEntity<?> addConnection(@PathVariable("username") String username,
@PathVariable("linkCode") String linkCode){
return userGroupAssoService.addPersonToGroup(username,linkCode,"USER").map(ResponseEntity::ok).orElseGet(()-> ResponseEntity.notFound().build());
}
/**
* Changes the authority level of a user in a group.
*
* @param groupId the ID of the group
* @param username the username of the user whose authority level is to be changed
* @param authority the new authority level of the user
* @return a ResponseEntity object containing the updated UserGroupAsso object and an HTTP status code of 200,
* or a ResponseEntity object with an HTTP status code of 404 if the group or user does not exist
*/
@PutMapping("/changeAuthority/{groupId}/{username}/{authority}")
public ResponseEntity<?> changeAuthority(@PathVariable("groupId") long groupId,
@PathVariable("username") String username,
@PathVariable("authority") String authority){
return userGroupAssoService.changeAuthorityOfUser(username,groupId,authority).map(ResponseEntity::ok).orElseGet(() ->ResponseEntity.notFound().build());
}
}
package ntnu.idatt2016.v233.SmartMat.controller.group;
import ntnu.idatt2016.v233.SmartMat.entity.group.Group;
import ntnu.idatt2016.v233.SmartMat.entity.user.User;
import ntnu.idatt2016.v233.SmartMat.service.group.GroupService;
import ntnu.idatt2016.v233.SmartMat.service.group.UserGroupAssoService;
import ntnu.idatt2016.v233.SmartMat.service.user.UserService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.userdetails.UserDetailsService;
import java.sql.Date;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
class GroupControllerTest {
@Mock
private GroupService groupService;
@Mock
private UserService userService;
@Mock
private UserGroupAssoService userGroupAssoService;
@Mock
private UserDetailsService userDetailsService;
private User user;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
user = User.builder().username("olavPro").firstName("Olav").lastName("Gamer").email("OlavGamer@gamil.com").dateOfBirth(Date.valueOf("1999-09-09")).build();
}
@Test
void getGroupByName() {
Group group = new Group();
group.setGroupName("testGroup");
when(groupService.getGroupByName("testGroup")).thenReturn(Optional.of(group));
GroupController controller = new GroupController(groupService,userService,userGroupAssoService);
ResponseEntity<Group> response = controller.getGroupByName("testGroup");
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(group, response.getBody());
}
@Test
void getGroupById() {
Group group = new Group();
group.setGroupId(1L);
when(groupService.getGroupById(1L)).thenReturn(Optional.of(group));
GroupController controller = new GroupController(groupService,userService,userGroupAssoService);
ResponseEntity<Group> response = controller.getGroupById(1L);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(group, response.getBody());
}
@Test
void createGroup() {
Group group = new Group();
group.setGroupId(1L);
group.setGroupName("testGroup");
when(groupService.createGroup(group)).thenReturn(group);
GroupController controller = new GroupController(groupService,userService,userGroupAssoService);
ResponseEntity<Group> response = controller.createGroup(group,"olavPro");
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(group, response.getBody());
}
}
package ntnu.idatt2016.v233.SmartMat.controller.group;
import ntnu.idatt2016.v233.SmartMat.entity.group.UserGroupAsso;
import ntnu.idatt2016.v233.SmartMat.service.group.UserGroupAssoService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
public class UserGroupAssoControllerTest {
@InjectMocks
private UserGroupAssoController userGroupAssoController;
@Mock
private UserGroupAssoService userGroupAssoService;
private List<UserGroupAsso> userGroupAssoList;
@BeforeEach
public void setUp() {
UserGroupAsso userGroupAsso1 = new UserGroupAsso();
UserGroupAsso userGroupAsso2 = new UserGroupAsso();
// Set properties for userGroupAsso1 and userGroupAsso2
userGroupAssoList = Arrays.asList(userGroupAsso1, userGroupAsso2);
}
@Test
public void getInformationByGroupId_found() {
long groupId = 1L;
when(userGroupAssoService.getInformationByGroupId(groupId)).thenReturn(Optional.of(userGroupAssoList));
ResponseEntity<List<UserGroupAsso>> response = userGroupAssoController.getInformationByGroupId(groupId);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(userGroupAssoList, response.getBody());
}
@Test
public void getInformationByGroupId_notFound() {
long groupId = 1L;
when(userGroupAssoService.getInformationByGroupId(groupId)).thenReturn(Optional.empty());
ResponseEntity<List<UserGroupAsso>> response = userGroupAssoController.getInformationByGroupId(groupId);
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment