From 3a3e6dc42786968ccd4413e1fd61bcfc682246ef Mon Sep 17 00:00:00 2001 From: BuildTools Date: Thu, 29 Oct 2020 16:25:55 +0100 Subject: [PATCH 1/7] Functionality done --- .../com/plannaplan/services/GroupService.java | 11 ++++++++++ .../com/plannaplan/services/UserService.java | 4 ++++ .../controllers/CommisionController.java | 22 ++++++++++++++++--- .../controllers/ConfigController.java | 2 +- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java b/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java index a01de30..699def1 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java @@ -41,4 +41,15 @@ public class GroupService { public Optional getGroupById(Long id) { return this.repo.findById(id); } + + public Long findNotExistingGroup(List ids) { + Long response = Long.MIN_VALUE; + for (Long oneId : ids) { + if (this.repo.existsById(oneId) == false) { + response = oneId; + } + } + return response; + + } } \ No newline at end of file diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java index 4eaa65e..73a0644 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java @@ -49,4 +49,8 @@ public class UserService { return this.repo.searchForUsers(query, UserRoles.STUDENT); } + public Optional getById(Long userId) { + return this.repo.findById(userId); + } + } \ No newline at end of file diff --git a/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java b/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java index ea7d2aa..24f78c2 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java @@ -2,6 +2,7 @@ package com.plannaplan.controllers; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -17,6 +18,7 @@ import com.plannaplan.responses.models.CommisionResponse; import com.plannaplan.services.AssignmentService; import com.plannaplan.services.CommisionService; import com.plannaplan.services.GroupService; +import com.plannaplan.types.UserRoles; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -42,11 +44,25 @@ public class CommisionController extends TokenBasedController { public CommisionController() { } - @PostMapping("/add") - public ResponseEntity addCommision(@RequestBody List groups) throws UserNotFoundException { + @PostMapping(value = { "/add", "/add/{id}" }) + public ResponseEntity addCommision(@RequestBody List groups, + @PathVariable(name = "id", required = false) Long userId) throws UserNotFoundException { User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException()); - Commision com = new Commision(user); + + if (userId != null && !((user.getId() == userId) || (user.getRole() == UserRoles.DEANERY))) { + return new ResponseEntity<>("Forbidden access atempt", HttpStatus.FORBIDDEN); + } else if (userId != null) { + user = userService.getById(userId).orElseThrow(() -> new UserNotFoundException("Given user id not exist")); + } + + final Long notExistingGroup = this.groupServcicxe.findNotExistingGroup(groups); + if (notExistingGroup != Long.MIN_VALUE) { + return new ResponseEntity<>("Group " + notExistingGroup.toString() + " doesn't exist", + HttpStatus.NOT_FOUND); + } + + final Commision com = new Commision(user); this.commisionService.save(com); groups.stream().forEach((groupId) -> { diff --git a/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java b/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java index 5d5456b..3d0ceff 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java @@ -29,7 +29,7 @@ public class ConfigController { private ConfiguratorService contrl; @PostMapping("/config") - @PreAuthorize("hasRole('ROLE_ADMIN')") + // @PreAuthorize("hasRole('ROLE_ADMIN')") public ResponseEntity configApp(@RequestParam("file") MultipartFile file) { try { From ed0073165401ad0b474ee2fd4736f2fdc83c59a3 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Thu, 29 Oct 2020 17:38:05 +0100 Subject: [PATCH 2/7] little refactor --- .../com/plannaplan/services/GroupService.java | 7 ++--- .../src/main/java/com/plannaplan/App.java | 2 +- .../controllers/CommisionController.java | 28 +++++++++++-------- .../controllers/ConfigController.java | 2 +- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java b/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java index 699def1..b77dacb 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java @@ -42,14 +42,13 @@ public class GroupService { return this.repo.findById(id); } - public Long findNotExistingGroup(List ids) { - Long response = Long.MIN_VALUE; + public Optional findNotExistingGroup(List ids) { for (Long oneId : ids) { if (this.repo.existsById(oneId) == false) { - response = oneId; + return Optional.of(oneId); } } - return response; + return Optional.empty(); } } \ No newline at end of file diff --git a/restservice/src/main/java/com/plannaplan/App.java b/restservice/src/main/java/com/plannaplan/App.java index d63eba5..b85cbb9 100755 --- a/restservice/src/main/java/com/plannaplan/App.java +++ b/restservice/src/main/java/com/plannaplan/App.java @@ -32,7 +32,7 @@ public class App { filip.setEmail("filizy@st.amu.edu.pl"); filip.setName("Filip"); filip.setSurname("Izydorczyk"); - filip.setRole(UserRoles.DEANERY); + filip.setRole(UserRoles.STUDENT); this.userService.save(filip); User hub = new User(); diff --git a/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java b/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java index 24f78c2..3af50da 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java @@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Optional; import com.plannaplan.App; import com.plannaplan.entities.Assignment; @@ -23,6 +24,7 @@ import com.plannaplan.types.UserRoles; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.util.Assert; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -46,21 +48,23 @@ public class CommisionController extends TokenBasedController { @PostMapping(value = { "/add", "/add/{id}" }) public ResponseEntity addCommision(@RequestBody List groups, - @PathVariable(name = "id", required = false) Long userId) throws UserNotFoundException { + @PathVariable(name = "id", required = false) Long userId) + throws UserNotFoundException, IllegalArgumentException { - User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException()); + final User asker = this.getCurrentUser().orElseThrow(() -> new UserNotFoundException("Invalid token")); - if (userId != null && !((user.getId() == userId) || (user.getRole() == UserRoles.DEANERY))) { - return new ResponseEntity<>("Forbidden access atempt", HttpStatus.FORBIDDEN); - } else if (userId != null) { - user = userService.getById(userId).orElseThrow(() -> new UserNotFoundException("Given user id not exist")); - } + final User user = userId != null + ? userService.getById(userId).orElseThrow(() -> new UserNotFoundException("Given user id not exist")) + : asker; - final Long notExistingGroup = this.groupServcicxe.findNotExistingGroup(groups); - if (notExistingGroup != Long.MIN_VALUE) { - return new ResponseEntity<>("Group " + notExistingGroup.toString() + " doesn't exist", - HttpStatus.NOT_FOUND); - } + Assert.isTrue( + (asker.getRole() == UserRoles.DEANERY && user.getRole() == UserRoles.STUDENT + || (asker.getId() == user.getId() && user.getRole() == UserRoles.STUDENT)), + "Incorrect attempt to change plan"); + + Optional notExistingGroup = this.groupServcicxe.findNotExistingGroup(groups); + Assert.isTrue(!notExistingGroup.isPresent(), + "Group " + notExistingGroup.orElse(Long.MIN_VALUE).toString() + "doesn't exist"); final Commision com = new Commision(user); this.commisionService.save(com); diff --git a/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java b/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java index 3d0ceff..5d5456b 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java @@ -29,7 +29,7 @@ public class ConfigController { private ConfiguratorService contrl; @PostMapping("/config") - // @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("hasRole('ROLE_ADMIN')") public ResponseEntity configApp(@RequestParam("file") MultipartFile file) { try { From b40acf8919115acf48f810dd4d6ba0ca809256a5 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Thu, 29 Oct 2020 17:45:15 +0100 Subject: [PATCH 3/7] Added tests to fill --- .../controllers/CommisionControllerTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java index bf371d7..7b3cf76 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java @@ -19,6 +19,7 @@ import com.plannaplan.entities.User; import com.plannaplan.services.UserService; import com.plannaplan.types.UserRoles; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; @@ -85,6 +86,36 @@ public class CommisionControllerTest { .andExpect(status().isOk()); } + @Test + public void shouldAddCommisionWithSelfIdPrivided() throws Exception { + assertTrue(false); + } + + @Test + public void shouldFailCommisionWithSomeoneIdPrividedAsStudent() throws Exception { + assertTrue(false); + } + + @Test + public void shouldFailCommisionAsDeanaryWithNoId() throws Exception { + assertTrue(false); + } + + @Test + public void shouldFailCommisionWithSelfIdPrividedAsDeanary() throws Exception { + assertTrue(false); + } + + @Test + public void shouldAddCommisionWithSomeoneIdPrividedAsDeanary() throws Exception { + assertTrue(false); + } + + @Test + public void shouldFailCommisionWithOtherDeanaryIdPrividedAsDeanary() throws Exception { + assertTrue(false); + } + private void checkUser() { if (CommisionControllerTest.user == null) { CommisionControllerTest.user = new User(null, null, TEST_COMMISIONS_EMAIL, UserRoles.TEST_USER); From 956b53439ff4ae0ec1496790b804fe1ff15f3a71 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 30 Oct 2020 14:27:13 +0100 Subject: [PATCH 4/7] Tests works --- .../controllers/CommisionController.java | 86 ++++++++++-------- .../controllers/CommisionControllerTest.java | 91 +++++++++++++++---- 2 files changed, 122 insertions(+), 55 deletions(-) diff --git a/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java b/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java index 3af50da..864b8de 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java @@ -34,56 +34,64 @@ import org.springframework.web.bind.annotation.RequestMapping; @RequestMapping("/api/" + App.API_VERSION + "/commisions") public class CommisionController extends TokenBasedController { - @Autowired - private CommisionService commisionService; + @Autowired + private CommisionService commisionService; - @Autowired - private GroupService groupServcicxe; + @Autowired + private GroupService groupServcicxe; - @Autowired - private AssignmentService assignmentService; + @Autowired + private AssignmentService assignmentService; - public CommisionController() { - } + public CommisionController() { + } - @PostMapping(value = { "/add", "/add/{id}" }) - public ResponseEntity addCommision(@RequestBody List groups, - @PathVariable(name = "id", required = false) Long userId) - throws UserNotFoundException, IllegalArgumentException { + @PostMapping(value = { "/add", "/add/{id}" }) + public ResponseEntity addCommision(@RequestBody List groups, + @PathVariable(name = "id", required = false) Long userId) { - final User asker = this.getCurrentUser().orElseThrow(() -> new UserNotFoundException("Invalid token")); + try { - final User user = userId != null - ? userService.getById(userId).orElseThrow(() -> new UserNotFoundException("Given user id not exist")) - : asker; + final User asker = this.getCurrentUser() + .orElseThrow(() -> new UserNotFoundException("Invalid token")); - Assert.isTrue( - (asker.getRole() == UserRoles.DEANERY && user.getRole() == UserRoles.STUDENT - || (asker.getId() == user.getId() && user.getRole() == UserRoles.STUDENT)), - "Incorrect attempt to change plan"); + final User user = userId != null + ? userService.getById(userId).orElseThrow( + () -> new UserNotFoundException("Given user id not exist")) + : asker; - Optional notExistingGroup = this.groupServcicxe.findNotExistingGroup(groups); - Assert.isTrue(!notExistingGroup.isPresent(), - "Group " + notExistingGroup.orElse(Long.MIN_VALUE).toString() + "doesn't exist"); + Assert.isTrue((asker.getRole() == UserRoles.DEANERY && user.getRole() == UserRoles.STUDENT + || (asker.getId() == user.getId() && user.getRole() == UserRoles.STUDENT)), + "Incorrect attempt to change plan"); - final Commision com = new Commision(user); - this.commisionService.save(com); + Optional notExistingGroup = this.groupServcicxe.findNotExistingGroup(groups); + Assert.isTrue(!notExistingGroup.isPresent(), "Group " + + notExistingGroup.orElse(Long.MIN_VALUE).toString() + "doesn't exist"); - groups.stream().forEach((groupId) -> { - Groups group = this.groupServcicxe.getGroupById(groupId).orElseThrow(() -> new NullPointerException()); - Assignment a = new Assignment(group, com); - this.assignmentService.save(a); - }); + final Commision com = new Commision(user); + this.commisionService.save(com); - return new ResponseEntity<>("Succes", HttpStatus.OK); - } + groups.stream().forEach((groupId) -> { + Groups group = this.groupServcicxe.getGroupById(groupId) + .orElseThrow(() -> new NullPointerException()); + Assignment a = new Assignment(group, com); + this.assignmentService.save(a); + }); - @GetMapping("/getAllCommisions") - public ResponseEntity> getAlCommisions() throws UserNotFoundException { - User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException()); - List result = CommisionResponseMappers - .mapToResponse(this.commisionService.getUsersCommisions(user)); - return new ResponseEntity<>(result, HttpStatus.OK); - } + return new ResponseEntity<>("Succes", HttpStatus.OK); + } catch (UserNotFoundException exception) { + return new ResponseEntity<>(exception.getMessage(), HttpStatus.NOT_FOUND); + } catch (IllegalArgumentException exception) { + return new ResponseEntity<>(exception.getMessage(), HttpStatus.BAD_REQUEST); + } + } + + @GetMapping("/getAllCommisions") + public ResponseEntity> getAlCommisions() throws UserNotFoundException { + User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException()); + List result = CommisionResponseMappers + .mapToResponse(this.commisionService.getUsersCommisions(user)); + return new ResponseEntity<>(result, HttpStatus.OK); + } } diff --git a/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java index 7b3cf76..ab32320 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java @@ -19,7 +19,6 @@ import com.plannaplan.entities.User; import com.plannaplan.services.UserService; import com.plannaplan.types.UserRoles; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; @@ -36,10 +35,18 @@ public class CommisionControllerTest { private UserService service; private static User user; + private static User otherUser; + private static User asker; + private static User otherAsker; + + private static final String TEST_COMMISIONS_STUDENT_EMAIL = "commisions.student@notexisting.domain"; + private static final String TEST_COMMISIONS_OTHER_STUDENT_EMAIL = "commisions.student2@notexisting.domain"; + private static final String TEST_COMMISIONS_DEANERY_EMAIL = "commisions.deanery@notexisting.domain"; + private static final String TEST_COMMISIONS_OTHER_DEANERY_EMAIL = "commisions.deanery2@notexisting.domain"; private static final String ADD_COMMISION_ENDPOINT = "/api/v1/commisions/add"; private static final String GET_COMMISIONS_ENDPOINT = "/api/v1/commisions/getAllCommisions"; - private static final String TEST_COMMISIONS_EMAIL = "commisions@notexisting.domain"; + private static final MediaType APPLICATION_JSON_UTF8 = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8")); @@ -52,8 +59,8 @@ public class CommisionControllerTest { @Test public void shouldFailedAddingCommisionDueToNoArgs() throws Exception { - this.checkUser(); - final String token = this.service.login(TEST_COMMISIONS_EMAIL); + this.checkUsers(); + final String token = this.service.login(TEST_COMMISIONS_STUDENT_EMAIL); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(post(ADD_COMMISION_ENDPOINT).header("Authorization", "Bearer " + token)) @@ -62,8 +69,8 @@ public class CommisionControllerTest { @Test public void shouldReturnOkAddingCommision() throws Exception { - this.checkUser(); - final String token = this.service.login(TEST_COMMISIONS_EMAIL); + this.checkUsers(); + final String token = this.service.login(TEST_COMMISIONS_STUDENT_EMAIL); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(post(ADD_COMMISION_ENDPOINT).header("Authorization", "Bearer " + token) @@ -78,8 +85,8 @@ public class CommisionControllerTest { @Test public void shouldReturnOkGettingAllCommisions() throws Exception { - this.checkUser(); - final String token = this.service.login(TEST_COMMISIONS_EMAIL); + this.checkUsers(); + final String token = this.service.login(TEST_COMMISIONS_STUDENT_EMAIL); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(get(GET_COMMISIONS_ENDPOINT).header("Authorization", "Bearer " + token)) @@ -88,38 +95,90 @@ public class CommisionControllerTest { @Test public void shouldAddCommisionWithSelfIdPrivided() throws Exception { - assertTrue(false); + this.checkUsers(); + final String token = this.service.login(TEST_COMMISIONS_STUDENT_EMAIL); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(post(ADD_COMMISION_ENDPOINT + "/" + CommisionControllerTest.user.getId().toString()) + .header("Authorization", "Bearer " + token).contentType(APPLICATION_JSON_UTF8).content("[]")) + .andExpect(status().isOk()); } @Test public void shouldFailCommisionWithSomeoneIdPrividedAsStudent() throws Exception { - assertTrue(false); + this.checkUsers(); + + final String token = this.service.login(TEST_COMMISIONS_STUDENT_EMAIL); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(post(ADD_COMMISION_ENDPOINT + "/" + CommisionControllerTest.otherUser.getId().toString()) + .header("Authorization", "Bearer " + token).contentType(APPLICATION_JSON_UTF8).content("[]")) + .andExpect(status().is4xxClientError()); } @Test public void shouldFailCommisionAsDeanaryWithNoId() throws Exception { - assertTrue(false); + this.checkUsers(); + final String token = this.service.login(TEST_COMMISIONS_DEANERY_EMAIL); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(post(ADD_COMMISION_ENDPOINT).header("Authorization", "Bearer " + token) + .contentType(APPLICATION_JSON_UTF8).content("[]")).andExpect(status().is4xxClientError()); } @Test public void shouldFailCommisionWithSelfIdPrividedAsDeanary() throws Exception { - assertTrue(false); + this.checkUsers(); + final String token = this.service.login(TEST_COMMISIONS_DEANERY_EMAIL); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(post(ADD_COMMISION_ENDPOINT + "/" + CommisionControllerTest.asker.getId().toString()) + .header("Authorization", "Bearer " + token).contentType(APPLICATION_JSON_UTF8).content("[]")) + .andExpect(status().is4xxClientError()); } @Test public void shouldAddCommisionWithSomeoneIdPrividedAsDeanary() throws Exception { - assertTrue(false); + this.checkUsers(); + + final String token = this.service.login(TEST_COMMISIONS_DEANERY_EMAIL); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(post(ADD_COMMISION_ENDPOINT + "/" + CommisionControllerTest.otherUser.getId().toString()) + .header("Authorization", "Bearer " + token).contentType(APPLICATION_JSON_UTF8).content("[]")) + .andExpect(status().isOk()); } @Test public void shouldFailCommisionWithOtherDeanaryIdPrividedAsDeanary() throws Exception { - assertTrue(false); + this.checkUsers(); + + final String token = this.service.login(TEST_COMMISIONS_DEANERY_EMAIL); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(post(ADD_COMMISION_ENDPOINT + "/" + CommisionControllerTest.otherAsker.getId().toString()) + .header("Authorization", "Bearer " + token).contentType(APPLICATION_JSON_UTF8).content("[]")) + .andExpect(status().is4xxClientError()); } - private void checkUser() { + private void checkUsers() { if (CommisionControllerTest.user == null) { - CommisionControllerTest.user = new User(null, null, TEST_COMMISIONS_EMAIL, UserRoles.TEST_USER); + CommisionControllerTest.user = new User(null, null, TEST_COMMISIONS_STUDENT_EMAIL, UserRoles.STUDENT); this.service.save(user); } + if (CommisionControllerTest.otherUser == null) { + CommisionControllerTest.otherUser = new User(null, null, TEST_COMMISIONS_OTHER_STUDENT_EMAIL, + UserRoles.STUDENT); + this.service.save(otherUser); + } + if (CommisionControllerTest.asker == null) { + CommisionControllerTest.asker = new User(null, null, TEST_COMMISIONS_DEANERY_EMAIL, UserRoles.DEANERY); + this.service.save(asker); + } + if (CommisionControllerTest.otherAsker == null) { + CommisionControllerTest.otherAsker = new User(null, null, TEST_COMMISIONS_OTHER_DEANERY_EMAIL, + UserRoles.DEANERY); + this.service.save(otherAsker); + } } } From ca01b20221ee94123d6758e5b27c55233e812bb6 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 30 Oct 2020 14:53:33 +0100 Subject: [PATCH 5/7] Added endpoint - waiting for other branch to merge to master --- .../com/plannaplan/services/UserService.java | 4 ++ .../controllers/CommisionController.java | 67 +++++++++++-------- 2 files changed, 44 insertions(+), 27 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java index 4eaa65e..73a0644 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java @@ -49,4 +49,8 @@ public class UserService { return this.repo.searchForUsers(query, UserRoles.STUDENT); } + public Optional getById(Long userId) { + return this.repo.findById(userId); + } + } \ No newline at end of file diff --git a/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java b/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java index ea7d2aa..f6e0c5f 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/CommisionController.java @@ -2,6 +2,7 @@ package com.plannaplan.controllers; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -21,6 +22,7 @@ import com.plannaplan.services.GroupService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,40 +32,51 @@ import org.springframework.web.bind.annotation.RequestMapping; @RequestMapping("/api/" + App.API_VERSION + "/commisions") public class CommisionController extends TokenBasedController { - @Autowired - private CommisionService commisionService; + @Autowired + private CommisionService commisionService; - @Autowired - private GroupService groupServcicxe; + @Autowired + private GroupService groupServcicxe; - @Autowired - private AssignmentService assignmentService; + @Autowired + private AssignmentService assignmentService; - public CommisionController() { - } + public CommisionController() { + } - @PostMapping("/add") - public ResponseEntity addCommision(@RequestBody List groups) throws UserNotFoundException { + @PostMapping("/add") + public ResponseEntity addCommision(@RequestBody List groups) throws UserNotFoundException { - User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException()); - Commision com = new Commision(user); - this.commisionService.save(com); + User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException()); + Commision com = new Commision(user); + this.commisionService.save(com); - groups.stream().forEach((groupId) -> { - Groups group = this.groupServcicxe.getGroupById(groupId).orElseThrow(() -> new NullPointerException()); - Assignment a = new Assignment(group, com); - this.assignmentService.save(a); - }); + groups.stream().forEach((groupId) -> { + Groups group = this.groupServcicxe.getGroupById(groupId) + .orElseThrow(() -> new NullPointerException()); + Assignment a = new Assignment(group, com); + this.assignmentService.save(a); + }); - return new ResponseEntity<>("Succes", HttpStatus.OK); - } + return new ResponseEntity<>("Succes", HttpStatus.OK); + } - @GetMapping("/getAllCommisions") - public ResponseEntity> getAlCommisions() throws UserNotFoundException { - User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException()); - List result = CommisionResponseMappers - .mapToResponse(this.commisionService.getUsersCommisions(user)); - return new ResponseEntity<>(result, HttpStatus.OK); - } + @GetMapping("/getAllCommisions") + public ResponseEntity> getAlCommisions() throws UserNotFoundException { + User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException()); + List result = CommisionResponseMappers + .mapToResponse(this.commisionService.getUsersCommisions(user)); + return new ResponseEntity<>(result, HttpStatus.OK); + } + + @PreAuthorize("hasRole('ROLE_DEANERY')") + @GetMapping("/user/{id}") + public ResponseEntity> getCommision(@PathVariable(name = "id") Long userId) + throws UserNotFoundException { + User user = this.userService.getById(userId).orElseThrow(() -> new NullPointerException()); + List result = CommisionResponseMappers + .mapToResponse(this.commisionService.getUsersCommisions(user)); + return new ResponseEntity<>(result, HttpStatus.OK); + } } From 1327a239e88da183124dbf2d7e28f602ef342893 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 30 Oct 2020 16:53:41 +0100 Subject: [PATCH 6/7] Made wepAppContex commont --- .../plannaplan/controllers/AbstractControllerTest.java | 10 ++++++++++ .../controllers/AssignmentsControllerTest.java | 6 +----- .../controllers/CommisionControllerTest.java | 6 +----- .../plannaplan/controllers/ConfigControllerTest.java | 6 +----- .../plannaplan/controllers/CoursesControllerTest.java | 7 +------ .../plannaplan/controllers/GroupControllerTest.java | 7 +------ .../plannaplan/controllers/TokenControllerTest.java | 6 +----- .../plannaplan/controllers/UsersControllerTest.java | 6 +----- 8 files changed, 17 insertions(+), 37 deletions(-) create mode 100755 restservice/src/test/java/com/plannaplan/controllers/AbstractControllerTest.java diff --git a/restservice/src/test/java/com/plannaplan/controllers/AbstractControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/AbstractControllerTest.java new file mode 100755 index 0000000..753cab8 --- /dev/null +++ b/restservice/src/test/java/com/plannaplan/controllers/AbstractControllerTest.java @@ -0,0 +1,10 @@ +package com.plannaplan.controllers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.context.WebApplicationContext; + +public abstract class AbstractControllerTest { + @Autowired + protected WebApplicationContext webApplicationContext; + +} diff --git a/restservice/src/test/java/com/plannaplan/controllers/AssignmentsControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/AssignmentsControllerTest.java index 5e7e578..e80b447 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/AssignmentsControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/AssignmentsControllerTest.java @@ -12,7 +12,6 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*; @@ -21,14 +20,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringRunner.class) @SpringBootTest @ContextConfiguration -public class AssignmentsControllerTest { +public class AssignmentsControllerTest extends AbstractControllerTest { private static final String ASSIGFNMENTS_ENDPOINT = "/api/v1/assignments/getCurrentAssignments"; private static final String TEST_MAIL = "notexistingassignmentuser@mail.domain"; - @Autowired - private WebApplicationContext webApplicationContext; - @Autowired private UserService service; diff --git a/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java index bf371d7..f0339c2 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java @@ -9,7 +9,6 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -26,10 +25,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder @RunWith(SpringRunner.class) @SpringBootTest @ContextConfiguration -public class CommisionControllerTest { - - @Autowired - private WebApplicationContext webApplicationContext; +public class CommisionControllerTest extends AbstractControllerTest { @Autowired private UserService service; diff --git a/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java index 1c322c8..2c445af 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java @@ -20,20 +20,16 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; @RunWith(SpringRunner.class) @SpringBootTest @ContextConfiguration -public class ConfigControllerTest { +public class ConfigControllerTest extends AbstractControllerTest { private static final String FILE_NAME = "Zajecia.xlsx"; private static final String CONFIG_ENDPOINT = "/api/v1/configurator/config"; private static final String TEST_MAIL = "notexisting@mail.domain"; - @Autowired - private WebApplicationContext webApplicationContext; - @Autowired private UserService service; diff --git a/restservice/src/test/java/com/plannaplan/controllers/CoursesControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/CoursesControllerTest.java index 67af08f..a01d396 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/CoursesControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/CoursesControllerTest.java @@ -2,13 +2,11 @@ package com.plannaplan.controllers; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -16,14 +14,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringRunner.class) @SpringBootTest @ContextConfiguration -public class CoursesControllerTest { +public class CoursesControllerTest extends AbstractControllerTest { private static final String COURSES_ENDPOINT = "/api/v1/courses/getCourses"; private static final String COURSESGROUPS_ENDPOINT = "/api/v1/courses/getCoursesWithGroups"; - @Autowired - private WebApplicationContext webApplicationContext; - @Test public void shouldReturnAllCoursesOk() throws Exception { diff --git a/restservice/src/test/java/com/plannaplan/controllers/GroupControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/GroupControllerTest.java index 4698bdc..aefad82 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/GroupControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/GroupControllerTest.java @@ -2,13 +2,11 @@ package com.plannaplan.controllers; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -16,12 +14,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringRunner.class) @SpringBootTest @ContextConfiguration -public class GroupControllerTest { +public class GroupControllerTest extends AbstractControllerTest { private static final String GROUPS_BY_COURSE_ENDPOINT = "/api/v1/groups/getCourseGroups"; - @Autowired - private WebApplicationContext webApplicationContext; - @Test public void shouldFailWithNoParaeter() throws Exception { MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); diff --git a/restservice/src/test/java/com/plannaplan/controllers/TokenControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/TokenControllerTest.java index 79ee95b..9716a68 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/TokenControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/TokenControllerTest.java @@ -3,13 +3,11 @@ package com.plannaplan.controllers; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -17,10 +15,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringRunner.class) @SpringBootTest @ContextConfiguration -public class TokenControllerTest { +public class TokenControllerTest extends AbstractControllerTest { private final String TOKEN_ENDPOINT = "/token"; - @Autowired - private WebApplicationContext webApplicationContext; @Test public void shouldFailWithNoParameter() throws Exception { diff --git a/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java index b55850d..f2771ba 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java @@ -12,7 +12,6 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*; @@ -21,12 +20,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringRunner.class) @SpringBootTest @ContextConfiguration -public class UsersControllerTest { +public class UsersControllerTest extends AbstractControllerTest { private static final String ENDPOINT = "/api/v1/users/searchForStudents"; - @Autowired - private WebApplicationContext webApplicationContext; - @Autowired private UserService service; From b4f51d438244f93e1388b77eabcd8bf8cdba8303 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sat, 31 Oct 2020 15:24:17 +0100 Subject: [PATCH 7/7] Added tests --- .../controllers/CommisionControllerTest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java index ab32320..f80b0d5 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java @@ -46,6 +46,7 @@ public class CommisionControllerTest { private static final String ADD_COMMISION_ENDPOINT = "/api/v1/commisions/add"; private static final String GET_COMMISIONS_ENDPOINT = "/api/v1/commisions/getAllCommisions"; + private static final String GET_SOMEONE_COMMISIONS_ENDPOINT = "/api/v1/commisions/user"; private static final MediaType APPLICATION_JSON_UTF8 = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8")); @@ -161,6 +162,28 @@ public class CommisionControllerTest { .andExpect(status().is4xxClientError()); } + @Test + public void shouldGetStudentCommisionsListByDeanary() throws Exception { + this.checkUsers(); + + final String token = this.service.login(TEST_COMMISIONS_DEANERY_EMAIL); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(GET_SOMEONE_COMMISIONS_ENDPOINT + "/" + CommisionControllerTest.user.getId().toString()) + .header("Authorization", "Bearer " + token)).andExpect(status().isOk()); + } + + @Test + public void shouldFailStudentCommisionsListByOtherStudent() throws Exception { + this.checkUsers(); + + final String token = this.service.login(TEST_COMMISIONS_STUDENT_EMAIL); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(GET_SOMEONE_COMMISIONS_ENDPOINT + "/" + CommisionControllerTest.user.getId().toString()) + .header("Authorization", "Bearer " + token)).andExpect(status().is4xxClientError()); + } + private void checkUsers() { if (CommisionControllerTest.user == null) { CommisionControllerTest.user = new User(null, null, TEST_COMMISIONS_STUDENT_EMAIL, UserRoles.STUDENT);