From 7045844653f641eaf1640dba4d65195f52170d71 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Thu, 21 Jan 2021 15:05:45 +0100 Subject: [PATCH 1/6] Groups ammounts --- .../controllers/StatisticsController.java | 43 +++++++++++++ .../StatisticCreatedGroupsResponse.java | 23 +++++++ .../controllers/StatisticsControllerTest.java | 64 +++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100755 restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java create mode 100755 restservice/src/main/java/com/plannaplan/responses/models/StatisticCreatedGroupsResponse.java create mode 100755 restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java diff --git a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java new file mode 100755 index 0000000..5ebe6f9 --- /dev/null +++ b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java @@ -0,0 +1,43 @@ +package com.plannaplan.controllers; + +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.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.annotations.Api; + +import com.plannaplan.App; +import com.plannaplan.responses.models.StatisticCreatedGroupsResponse; +import com.plannaplan.services.GroupService; + +/** + * Rest controller to enpoint that help deveopler test the app + */ +@RestController +@CrossOrigin +@RequestMapping("/api/" + App.API_VERSION + "/statistics") +@Api(tags = { + "StatisticsController" }, value = "StatisticsController", description = "Statistics are meant to be used by deanery only so in every endpoint you need to provide DEANERY token.") + +public class StatisticsController { + + @Autowired + private GroupService groupService; + + /** + * @return if tour was set + */ + @PreAuthorize("hasRole('ROLE_DEANERY')") + @GetMapping(path = "/groups/created") + public ResponseEntity getGroupsAmmounts() { + final StatisticCreatedGroupsResponse response = new StatisticCreatedGroupsResponse( + this.groupService.getGroupsAmmount()); + return new ResponseEntity<>(response, HttpStatus.OK); + } + +} diff --git a/restservice/src/main/java/com/plannaplan/responses/models/StatisticCreatedGroupsResponse.java b/restservice/src/main/java/com/plannaplan/responses/models/StatisticCreatedGroupsResponse.java new file mode 100755 index 0000000..81cc68a --- /dev/null +++ b/restservice/src/main/java/com/plannaplan/responses/models/StatisticCreatedGroupsResponse.java @@ -0,0 +1,23 @@ +package com.plannaplan.responses.models; + +/** + * Api response for created groups statistics + */ +public class StatisticCreatedGroupsResponse { + private Integer ammount; + + /** + * @param ammount created groups + */ + public StatisticCreatedGroupsResponse(Integer ammount) { + this.ammount = ammount; + } + + /** + * @return ammount of created groups + */ + public Integer getAmmount() { + return ammount; + } + +} diff --git a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java new file mode 100755 index 0000000..c54e852 --- /dev/null +++ b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java @@ -0,0 +1,64 @@ +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 static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*; + +import com.plannaplan.entities.User; +import com.plannaplan.services.UserService; +import com.plannaplan.types.UserRoles; + +@RunWith(SpringRunner.class) +@SpringBootTest +@ContextConfiguration +public class StatisticsControllerTest extends AbstractControllerTest { + + private static final String GROUP_AMMOUNTS_ENDPOINT = "/api/v1/statistics/groups/created"; + + @Autowired + private UserService userService; + + /* GROUP AMMOUNTS TESTS */ + + @Test + public void shouldFailWithWrongAccesGroupsAmmounts() throws Exception { + final String mail = "shouldFailWithWrongAccesGroupsAmmounts@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.TEST_USER)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(GROUP_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().is4xxClientError()); + + } + + @Test + public void shouldOkGettingGroupsAmmounts() throws Exception { + final String mail = "shouldOkGettingGroupsAmmounts@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEANERY)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(GROUP_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().isOk()); + + } + + @Test + public void shouldFailWithNoTokenGroupsAmmounts() throws Exception { + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(GROUP_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); + + } +} From 676070c8c760d78d75153e4ded52e33bde7289ae Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Thu, 21 Jan 2021 15:41:56 +0100 Subject: [PATCH 2/6] Students registered satistics --- .../repositories/CommisionRepository.java | 20 ++++++----- .../com/plannaplan/services/UserService.java | 17 +++++++++ .../controllers/StatisticsController.java | 21 +++++++++-- .../StatisticCreatedGroupsResponse.java | 23 ------------ .../models/StatisticSimpleNumberResponse.java | 23 ++++++++++++ .../controllers/StatisticsControllerTest.java | 36 +++++++++++++++++++ 6 files changed, 106 insertions(+), 34 deletions(-) delete mode 100755 restservice/src/main/java/com/plannaplan/responses/models/StatisticCreatedGroupsResponse.java create mode 100755 restservice/src/main/java/com/plannaplan/responses/models/StatisticSimpleNumberResponse.java diff --git a/buisnesslogic/src/main/java/com/plannaplan/repositories/CommisionRepository.java b/buisnesslogic/src/main/java/com/plannaplan/repositories/CommisionRepository.java index 2778f06..53a4d5b 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/repositories/CommisionRepository.java +++ b/buisnesslogic/src/main/java/com/plannaplan/repositories/CommisionRepository.java @@ -10,17 +10,15 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; /** - * CommisionRepository.getUsers: - * Return list of: - * SELECT * FROM Commision WHERE owner_id = i . + * CommisionRepository.getUsers: Return list of: SELECT * FROM Commision WHERE + * owner_id = i . * - * Where i, ?1 are equale to variables. + * Where i, ?1 are equale to variables. * - * CommisionRepository.getNewestCommision - * Return list of: - * SELECT * FROM Commision WHERE owner_id = i Order by commisionDate desc. + * CommisionRepository.getNewestCommision Return list of: SELECT * FROM + * Commision WHERE owner_id = i Order by commisionDate desc. * - * Where i, ?1 are equale to variables. + * Where i, ?1 are equale to variables. */ @Repository public interface CommisionRepository extends JpaRepository { @@ -30,4 +28,10 @@ public interface CommisionRepository extends JpaRepository { @Query("FROM Commision WHERE owner_id = ?1 order by commisionDate desc") List getNewestCommision(@Param("owner_id") Long id); + /** + * @return ammount of uniqe users that have a commision placed on first array + * element + */ + @Query("SELECT COUNT(DISTINCT owner_id) AS count FROM Commision") + Object[] getUsersAssigned(); } diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java index 84663e7..4ef2800 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java @@ -8,6 +8,7 @@ import java.util.stream.Collectors; import com.plannaplan.entities.User; import com.plannaplan.exceptions.UserNotFoundException; import com.plannaplan.models.UserApiResponse; +import com.plannaplan.repositories.CommisionRepository; import com.plannaplan.repositories.UserRepository; import com.plannaplan.types.UserRoles; @@ -25,6 +26,9 @@ public class UserService { @Autowired private UsosApiService service; + @Autowired + private CommisionRepository comRepo; + public UserService() { super(); } @@ -169,4 +173,17 @@ public class UserService { }).collect(Collectors.toList()); } + /** + * @return ammount of how many users created an assignment + */ + public int getAmmountOfUsersWithAssignedGroups() { + int response = 0; + + final Object dbResponse = this.comRepo.getUsersAssigned()[0]; + if (dbResponse != null) { + response = ((Long) dbResponse).intValue(); + } + return response; + } + } diff --git a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java index 5ebe6f9..961e790 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java @@ -12,8 +12,9 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; import com.plannaplan.App; -import com.plannaplan.responses.models.StatisticCreatedGroupsResponse; +import com.plannaplan.responses.models.StatisticSimpleNumberResponse; import com.plannaplan.services.GroupService; +import com.plannaplan.services.UserService; /** * Rest controller to enpoint that help deveopler test the app @@ -29,15 +30,29 @@ public class StatisticsController { @Autowired private GroupService groupService; + @Autowired + private UserService userService; + /** * @return if tour was set */ @PreAuthorize("hasRole('ROLE_DEANERY')") @GetMapping(path = "/groups/created") - public ResponseEntity getGroupsAmmounts() { - final StatisticCreatedGroupsResponse response = new StatisticCreatedGroupsResponse( + public ResponseEntity getGroupsAmmounts() { + final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( this.groupService.getGroupsAmmount()); return new ResponseEntity<>(response, HttpStatus.OK); } + /** + * @return amount of registered to some groups + */ + @PreAuthorize("hasRole('ROLE_DEANERY')") + @GetMapping(path = "/users/registered") + public ResponseEntity getCommisionsAmmounts() { + final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( + this.userService.getAmmountOfUsersWithAssignedGroups()); + return new ResponseEntity<>(response, HttpStatus.OK); + } + } diff --git a/restservice/src/main/java/com/plannaplan/responses/models/StatisticCreatedGroupsResponse.java b/restservice/src/main/java/com/plannaplan/responses/models/StatisticCreatedGroupsResponse.java deleted file mode 100755 index 81cc68a..0000000 --- a/restservice/src/main/java/com/plannaplan/responses/models/StatisticCreatedGroupsResponse.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.plannaplan.responses.models; - -/** - * Api response for created groups statistics - */ -public class StatisticCreatedGroupsResponse { - private Integer ammount; - - /** - * @param ammount created groups - */ - public StatisticCreatedGroupsResponse(Integer ammount) { - this.ammount = ammount; - } - - /** - * @return ammount of created groups - */ - public Integer getAmmount() { - return ammount; - } - -} diff --git a/restservice/src/main/java/com/plannaplan/responses/models/StatisticSimpleNumberResponse.java b/restservice/src/main/java/com/plannaplan/responses/models/StatisticSimpleNumberResponse.java new file mode 100755 index 0000000..7e0245a --- /dev/null +++ b/restservice/src/main/java/com/plannaplan/responses/models/StatisticSimpleNumberResponse.java @@ -0,0 +1,23 @@ +package com.plannaplan.responses.models; + +/** + * Simple api response for number statistics + */ +public class StatisticSimpleNumberResponse { + private Integer ammount; + + /** + * @param ammount to return as api response + */ + public StatisticSimpleNumberResponse(Integer ammount) { + this.ammount = ammount; + } + + /** + * @return ammount + */ + public Integer getAmmount() { + return ammount; + } + +} diff --git a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java index c54e852..91612eb 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java @@ -23,6 +23,7 @@ import com.plannaplan.types.UserRoles; public class StatisticsControllerTest extends AbstractControllerTest { private static final String GROUP_AMMOUNTS_ENDPOINT = "/api/v1/statistics/groups/created"; + private static final String USER_ASSIGNED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/registered"; @Autowired private UserService userService; @@ -61,4 +62,39 @@ public class StatisticsControllerTest extends AbstractControllerTest { mockMvc.perform(get(GROUP_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); } + + /* USERS ASSIGNED TESTS */ + + @Test + public void shouldFailWithWrongAccesRegisteredStudentsAmmount() throws Exception { + final String mail = "shouldFailWithWrongAccesRegisteredStudentsAmmount@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.TEST_USER)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_ASSIGNED_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().is4xxClientError()); + + } + + @Test + public void shouldOkGettingRegisteredStudentsAmmount() throws Exception { + final String mail = "shouldOkGettingRegisteredStudentsAmmount@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEANERY)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_ASSIGNED_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().isOk()); + + } + + @Test + public void shouldFailWithNoTokenRegisteredStudentsAmmount() throws Exception { + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_ASSIGNED_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); + + } } From 6a0d425c3799451fd13f4764032cb270670370ff Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Thu, 21 Jan 2021 15:50:20 +0100 Subject: [PATCH 3/6] Added non registered statistic --- .../com/plannaplan/services/UserService.java | 7 ++++ .../controllers/StatisticsController.java | 11 ++++++ .../controllers/StatisticsControllerTest.java | 36 +++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java index 4ef2800..8769809 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java @@ -186,4 +186,11 @@ public class UserService { return response; } + /** + * @return ammount of how many users haven't created an assignment yet + */ + public Integer getAmmountOfUsersWithNoAssignedGroups() { + return this.getAllStudents().size() - this.getAmmountOfUsersWithAssignedGroups(); + } + } diff --git a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java index 961e790..5454e10 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java @@ -55,4 +55,15 @@ public class StatisticsController { return new ResponseEntity<>(response, HttpStatus.OK); } + /** + * @return amount of students not registered to any groups + */ + @PreAuthorize("hasRole('ROLE_DEANERY')") + @GetMapping(path = "/users/noregistered") + public ResponseEntity getNonCommisionsAmmounts() { + final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( + this.userService.getAmmountOfUsersWithNoAssignedGroups()); + return new ResponseEntity<>(response, HttpStatus.OK); + } + } diff --git a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java index 91612eb..c85a72e 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java @@ -24,6 +24,7 @@ public class StatisticsControllerTest extends AbstractControllerTest { private static final String GROUP_AMMOUNTS_ENDPOINT = "/api/v1/statistics/groups/created"; private static final String USER_ASSIGNED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/registered"; + private static final String USER_NO_ASSIGNED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/noregistered"; @Autowired private UserService userService; @@ -97,4 +98,39 @@ public class StatisticsControllerTest extends AbstractControllerTest { mockMvc.perform(get(USER_ASSIGNED_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); } + + /* USERS NO ASSIGNED TESTS */ + + @Test + public void shouldFailWithWrongAccesNoRegisteredStudentsAmmount() throws Exception { + final String mail = "shouldFailWithWrongAccesNoRegisteredStudentsAmmount@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.TEST_USER)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_NO_ASSIGNED_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().is4xxClientError()); + + } + + @Test + public void shouldOkGettingNoRegisteredStudentsAmmount() throws Exception { + final String mail = "shouldOkGettingNoRegisteredStudentsAmmount@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEANERY)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_NO_ASSIGNED_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().isOk()); + + } + + @Test + public void shouldFailWithNoTokenNoRegisteredStudentsAmmount() throws Exception { + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_NO_ASSIGNED_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); + + } } From 270e31f12051b79d70ea6622dc168da997c6b2e3 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Thu, 21 Jan 2021 16:08:53 +0100 Subject: [PATCH 4/6] Fully accepted statistic --- .../com/plannaplan/services/UserService.java | 26 ++++++++++++++ .../controllers/StatisticsController.java | 11 ++++++ .../controllers/StatisticsControllerTest.java | 36 +++++++++++++++++++ 3 files changed, 73 insertions(+) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java index 8769809..90cf92c 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java @@ -1,10 +1,12 @@ package com.plannaplan.services; +import java.util.Iterator; import java.util.List; import java.util.Optional; import java.util.UUID; import java.util.stream.Collectors; +import com.plannaplan.entities.Commision; import com.plannaplan.entities.User; import com.plannaplan.exceptions.UserNotFoundException; import com.plannaplan.models.UserApiResponse; @@ -29,6 +31,9 @@ public class UserService { @Autowired private CommisionRepository comRepo; + @Autowired + private CommisionService comService; + public UserService() { super(); } @@ -193,4 +198,25 @@ public class UserService { return this.getAllStudents().size() - this.getAmmountOfUsersWithAssignedGroups(); } + /** + * @return ammount of how many users have full schedule accepted + */ + public Integer getAmmountOfUsersWithAcceptedSchedules() { + final List students = this.getAllStudents(); + Integer accepted = 0; + + final Iterator it = students.iterator(); + + while (it.hasNext()) { + final User user = it.next(); + final Optional com = this.comService.getNewestCommision(user); + if (com.isPresent() && user.getStudentRegisteredGrups().size() == com.get().getAssignments().size()) { + accepted += 1; + } + } + + return accepted; + + } + } diff --git a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java index 5454e10..1d5eb8b 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java @@ -66,4 +66,15 @@ public class StatisticsController { return new ResponseEntity<>(response, HttpStatus.OK); } + /** + * @return amount of registered to some groups + */ + @PreAuthorize("hasRole('ROLE_DEANERY')") + @GetMapping(path = "/users/accepted") + public ResponseEntity getAcceptedAmmounts() { + final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( + this.userService.getAmmountOfUsersWithAcceptedSchedules()); + return new ResponseEntity<>(response, HttpStatus.OK); + } + } diff --git a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java index c85a72e..a0418fe 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java @@ -25,6 +25,7 @@ public class StatisticsControllerTest extends AbstractControllerTest { private static final String GROUP_AMMOUNTS_ENDPOINT = "/api/v1/statistics/groups/created"; private static final String USER_ASSIGNED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/registered"; private static final String USER_NO_ASSIGNED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/noregistered"; + private static final String USER_ACCEPTED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/accepted"; @Autowired private UserService userService; @@ -133,4 +134,39 @@ public class StatisticsControllerTest extends AbstractControllerTest { mockMvc.perform(get(USER_NO_ASSIGNED_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); } + + /* USERS FULL ACCPTED TESTS */ + + @Test + public void shouldFailWithWrongAccessAcceptedStudentsAmmount() throws Exception { + final String mail = "shouldFailWithWrongAccessAcceptedStudentsAmmount@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.TEST_USER)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_ACCEPTED_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().is4xxClientError()); + + } + + @Test + public void shouldOkGettingAcceptedStudentsAmmount() throws Exception { + final String mail = "shouldOkGettingAcceptedStudentsAmmount@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEANERY)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_ACCEPTED_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().isOk()); + + } + + @Test + public void shouldFailWithNoTokenAcceptedStudentsAmmount() throws Exception { + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_ACCEPTED_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); + + } } From a910709798ab2831aa648a7fabc833500ccc8bbc Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Thu, 21 Jan 2021 16:15:01 +0100 Subject: [PATCH 5/6] partly accepted statistics --- .../com/plannaplan/services/UserService.java | 7 ++++ .../controllers/StatisticsController.java | 13 ++++++- .../controllers/StatisticsControllerTest.java | 36 +++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java index 90cf92c..932607b 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java @@ -219,4 +219,11 @@ public class UserService { } + /** + * @return ammount of how many users have partly or none schedule accepted + */ + public Integer getAmmountOfUsersWithNoAcceptedSchedules() { + return this.getAllStudents().size() - this.getAmmountOfUsersWithAcceptedSchedules(); + } + } diff --git a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java index 1d5eb8b..e60fa71 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java @@ -67,7 +67,7 @@ public class StatisticsController { } /** - * @return amount of registered to some groups + * @return amount of students that have fully accepted schedules */ @PreAuthorize("hasRole('ROLE_DEANERY')") @GetMapping(path = "/users/accepted") @@ -77,4 +77,15 @@ public class StatisticsController { return new ResponseEntity<>(response, HttpStatus.OK); } + /** + * @return amount of students that have purtly accepted schedules + */ + @PreAuthorize("hasRole('ROLE_DEANERY')") + @GetMapping(path = "/users/accepted/partly") + public ResponseEntity getAcceptedPartlyAmmounts() { + final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( + this.userService.getAmmountOfUsersWithNoAcceptedSchedules()); + return new ResponseEntity<>(response, HttpStatus.OK); + } + } diff --git a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java index a0418fe..fd380b3 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java @@ -26,6 +26,7 @@ public class StatisticsControllerTest extends AbstractControllerTest { private static final String USER_ASSIGNED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/registered"; private static final String USER_NO_ASSIGNED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/noregistered"; private static final String USER_ACCEPTED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/accepted"; + private static final String USER_PARTLY_ACCEPTED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/accepted/partly"; @Autowired private UserService userService; @@ -169,4 +170,39 @@ public class StatisticsControllerTest extends AbstractControllerTest { mockMvc.perform(get(USER_ACCEPTED_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); } + + /* USERS PARTLY ACCPTED TESTS */ + + @Test + public void shouldFailWithWrongAccessPartlyAcceptedStudentsAmmount() throws Exception { + final String mail = "shouldFailWithWrongAccessPartlyAcceptedStudentsAmmount@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.TEST_USER)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_PARTLY_ACCEPTED_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().is4xxClientError()); + + } + + @Test + public void shouldOkGettingPartlyAcceptedStudentsAmmount() throws Exception { + final String mail = "shouldOkGettingPartlyAcceptedStudentsAmmount@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEANERY)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_PARTLY_ACCEPTED_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().isOk()); + + } + + @Test + public void shouldFailWithNoTokenPartlyAcceptedStudentsAmmount() throws Exception { + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(USER_PARTLY_ACCEPTED_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); + + } } From bfa8eb6e3ede89f1be90f3cedcd26e1697557994 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Thu, 21 Jan 2021 16:22:14 +0100 Subject: [PATCH 6/6] full groups statistics --- .../com/plannaplan/services/GroupService.java | 19 ++++++++++ .../controllers/StatisticsController.java | 11 ++++++ .../controllers/StatisticsControllerTest.java | 36 +++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java b/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java index d3d9656..713cc00 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java @@ -1,6 +1,7 @@ package com.plannaplan.services; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -153,4 +154,22 @@ public class GroupService { return response; } + + /** + * @return amount of groups with full capacity taken + */ + public Integer getFullgroupsAmmount() { + Integer response = 0; + final Iterator groups = this.repo.findAll().iterator(); + + while (groups.hasNext()) { + final Groups group = groups.next(); + if (group.getCapacity() <= group.getRegisteredStudents().size()) { + response += 1; + } + + } + + return response; + } } \ No newline at end of file diff --git a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java index e60fa71..a6d37e8 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java @@ -44,6 +44,17 @@ public class StatisticsController { return new ResponseEntity<>(response, HttpStatus.OK); } + /** + * @return if tour was set + */ + @PreAuthorize("hasRole('ROLE_DEANERY')") + @GetMapping(path = "/groups/full") + public ResponseEntity getGroupsFullAmmounts() { + final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( + this.groupService.getFullgroupsAmmount()); + return new ResponseEntity<>(response, HttpStatus.OK); + } + /** * @return amount of registered to some groups */ diff --git a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java index fd380b3..e72cab4 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/StatisticsControllerTest.java @@ -23,6 +23,7 @@ import com.plannaplan.types.UserRoles; public class StatisticsControllerTest extends AbstractControllerTest { private static final String GROUP_AMMOUNTS_ENDPOINT = "/api/v1/statistics/groups/created"; + private static final String GROUP_FULL_AMMOUNTS_ENDPOINT = "/api/v1/statistics/groups/full"; private static final String USER_ASSIGNED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/registered"; private static final String USER_NO_ASSIGNED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/noregistered"; private static final String USER_ACCEPTED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/accepted"; @@ -205,4 +206,39 @@ public class StatisticsControllerTest extends AbstractControllerTest { mockMvc.perform(get(USER_PARTLY_ACCEPTED_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); } + + /* USERS FULL TAKEN GROUPS TESTS */ + + @Test + public void shouldFailWithWrongAccessFullGroupsAmmount() throws Exception { + final String mail = "shouldFailWithWrongAccessFullGroupsAmmount@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.TEST_USER)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(GROUP_FULL_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().is4xxClientError()); + + } + + @Test + public void shouldOkGettingFullGroupsAmmount() throws Exception { + final String mail = "shouldOkGettingFullGroupsAmmount@StatisticsController.test"; + final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEANERY)); + + final String token = this.userService.login(usr).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(GROUP_FULL_AMMOUNTS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().isOk()); + + } + + @Test + public void shouldFailWithNoTokenFullGroupsAmmount() throws Exception { + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(GROUP_FULL_AMMOUNTS_ENDPOINT)).andExpect(status().is4xxClientError()); + + } }