Compare commits
	
		
			33 Commits
		
	
	
		
			5ec41fa5d0
			...
			single0-gr
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 72f049b478 | ||
| bb7f1b6737 | |||
|  | ad4984bdae | ||
| 63def650c9 | |||
|  | a201bcc581 | ||
| e688f8b71d | |||
|  | 389e557674 | ||
| dd82acc1de | |||
|  | bfa8eb6e3e | ||
|  | a910709798 | ||
|  | 270e31f120 | ||
|  | 6a0d425c37 | ||
|  | 676070c8c7 | ||
|  | 7045844653 | ||
| cd2665bd08 | |||
|  | 0eccbfe9a3 | ||
|  | a304e25629 | ||
|  | af29d0a54a | ||
|  | 20a6db61cc | ||
|  | 20f52746b5 | ||
|  | cf875889b9 | ||
|  | 08a4bdde06 | ||
|  | 548e39dc63 | ||
|  | 65ea502619 | ||
| c177314419 | |||
|  | 847dd76fc8 | ||
|  | 265315b874 | ||
|  | d1a54a93d6 | ||
|  | 7f647f9b8a | ||
|  | 7b9e334328 | ||
|  | d217536f2c | ||
|  | 6a4ea45900 | ||
|  | 06fb41b5dd | 
| @@ -48,8 +48,9 @@ public class User { | ||||
|     } | ||||
|  | ||||
|     public void removeGroup(Long id) { | ||||
| 	final Groups groupToDelete = this.studentRegisteredGrups.stream().filter(e -> e.getId().equals(id)).findFirst().get(); | ||||
| 	this.studentRegisteredGrups.remove(groupToDelete); | ||||
|         final Groups groupToDelete = this.studentRegisteredGrups.stream().filter(e -> e.getId().equals(id)).findFirst() | ||||
|                 .get(); | ||||
|         this.studentRegisteredGrups.remove(groupToDelete); | ||||
|     } | ||||
|  | ||||
|     public void claimGroup(Groups group) { | ||||
| @@ -164,7 +165,7 @@ public class User { | ||||
|     public void setToken(String token) { | ||||
|         this.tokenUsageDate = new Timestamp(System.currentTimeMillis()); | ||||
|         this.token = token; | ||||
|         this.refreshToken = UUID.randomUUID().toString(); | ||||
|         this.refreshToken = this.refreshToken == null ? UUID.randomUUID().toString() : this.refreshToken; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -236,6 +237,9 @@ public class User { | ||||
|      * @return ranking points [100;500] | ||||
|      */ | ||||
|     public Integer getRanking() { | ||||
|         if (ranking == null) { | ||||
|             return 100; | ||||
|         } | ||||
|         return ranking; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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<Commision, Long> { | ||||
| @@ -30,4 +28,10 @@ public interface CommisionRepository extends JpaRepository<Commision, Long> { | ||||
|     @Query("FROM Commision WHERE owner_id = ?1 order by commisionDate desc") | ||||
|     List<Commision> 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(); | ||||
| } | ||||
|   | ||||
| @@ -106,4 +106,12 @@ public class AssignmentService { | ||||
|             this.emailService.sendAcceptationResult(e, new EmailAcceptedData(accepted, removed)); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param toSave list of entites to save to db | ||||
|      * @return list of assignments entities with ids from db | ||||
|      */ | ||||
|     public List<Assignment> saveAll(List<Assignment> toSave) { | ||||
|         return this.repo.saveAll(toSave); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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> groups = this.repo.findAll().iterator(); | ||||
|  | ||||
|         while (groups.hasNext()) { | ||||
|             final Groups group = groups.next(); | ||||
|             if (group.getCapacity() <= group.getRegisteredStudents().size()) { | ||||
|                 response += 1; | ||||
|             } | ||||
|  | ||||
|         } | ||||
|  | ||||
|         return response; | ||||
|     } | ||||
| } | ||||
| @@ -1,13 +1,16 @@ | ||||
| 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; | ||||
| import com.plannaplan.repositories.CommisionRepository; | ||||
| import com.plannaplan.repositories.UserRepository; | ||||
| import com.plannaplan.types.UserRoles; | ||||
|  | ||||
| @@ -25,6 +28,12 @@ public class UserService { | ||||
|     @Autowired | ||||
|     private UsosApiService service; | ||||
|  | ||||
|     @Autowired | ||||
|     private CommisionRepository comRepo; | ||||
|  | ||||
|     @Autowired | ||||
|     private CommisionService comService; | ||||
|  | ||||
|     public UserService() { | ||||
|         super(); | ||||
|     } | ||||
| @@ -169,4 +178,52 @@ 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; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return ammount of how many users haven't created an assignment yet | ||||
|      */ | ||||
|     public Integer getAmmountOfUsersWithNoAssignedGroups() { | ||||
|         return this.getAllStudents().size() - this.getAmmountOfUsersWithAssignedGroups(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return ammount of how many users have full schedule accepted | ||||
|      */ | ||||
|     public Integer getAmmountOfUsersWithAcceptedSchedules() { | ||||
|         final List<User> students = this.getAllStudents(); | ||||
|         Integer accepted = 0; | ||||
|  | ||||
|         final Iterator<User> it = students.iterator(); | ||||
|  | ||||
|         while (it.hasNext()) { | ||||
|             final User user = it.next(); | ||||
|             final Optional<Commision> com = this.comService.getNewestCommision(user); | ||||
|             if (com.isPresent() && user.getStudentRegisteredGrups().size() == com.get().getAssignments().size()) { | ||||
|                 accepted += 1; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return accepted; | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return ammount of how many users have partly or none schedule accepted | ||||
|      */ | ||||
|     public Integer getAmmountOfUsersWithNoAcceptedSchedules() { | ||||
|         return this.getAllStudents().size() - this.getAmmountOfUsersWithAcceptedSchedules(); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,23 +1,39 @@ | ||||
| package com.plannaplan.types; | ||||
|  | ||||
| /** | ||||
|  *  GroupType contains types: LECTURE, CLASS, LAB, SEMINAR, CONSERVATORY, PRATICE | ||||
|  * GroupType contains types: LECTURE, CLASS, LAB, SEMINAR, CONSERVATORY, PRATICE | ||||
|  */ | ||||
|  | ||||
| public enum GroupType { | ||||
|     LECTURE("Wykład"), CLASS("Ćwiczenia"), LAB("Laboratorium"), SEMINAR("Seminarium"),CONSERVATORY("Konwersatorium"), PRATICE("Praktyka"); | ||||
|     LECTURE("Wykład"), CLASS("Ćwiczenia"), LAB("Laboratorium"), SEMINAR("Seminarium"), CONSERVATORY("Konwersatorium"), | ||||
|     PRATICE("Praktyka"); | ||||
|  | ||||
|     public final String type; | ||||
|  | ||||
|     private GroupType(String type) { | ||||
|         this.type = type; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param type as string | ||||
|      * @return Enum converted from provided string | ||||
|      */ | ||||
|     public final static GroupType getType(String type) { | ||||
|         for (GroupType d : values()) { | ||||
|             if (d.type.equals(type)) { | ||||
|                 return d; | ||||
|             } | ||||
|         } | ||||
|         return null;         | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param type group type to check | ||||
|      * @return general convertion to bring down tours to two generals LECTURE and | ||||
|      *         CLASS. To class are included: CLASS, LAB, SEMINAR, CONSERVATORY, | ||||
|      *         PRATICE. | ||||
|      */ | ||||
|     public final static GroupType isLectureOrClass(GroupType type) { | ||||
|         return type == GroupType.LECTURE ? GroupType.LECTURE : GroupType.CLASS; | ||||
|     } | ||||
| } | ||||
| @@ -1,9 +1,9 @@ | ||||
| package com.plannaplan.types; | ||||
|  | ||||
| /** | ||||
|  *  UserRoles contains types: STUDENT, DEANERY, ADMIN, TEST_USER | ||||
|  * UserRoles contains types: STUDENT, DEANERY, ADMIN, TEST_USER | ||||
|  */ | ||||
|   | ||||
|  | ||||
| public enum UserRoles { | ||||
|     STUDENT, DEANERY, ADMIN, TEST_USER | ||||
|     STUDENT, DEANERY, ADMIN, TEST_USER, DEVELOPER | ||||
| } | ||||
							
								
								
									
										68
									
								
								buisnesslogic/src/test/java/com/plannaplan/types/GroupTypeTest.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										68
									
								
								buisnesslogic/src/test/java/com/plannaplan/types/GroupTypeTest.java
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| package com.plannaplan.types; | ||||
|  | ||||
| import static org.junit.Assert.assertTrue; | ||||
|  | ||||
| import org.junit.Test; | ||||
|  | ||||
| public class GroupTypeTest { | ||||
|     @Test | ||||
|     public void shouldBeLecture() { | ||||
|         assertTrue(GroupType.isLectureOrClass(GroupType.LECTURE) == GroupType.LECTURE); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldBeClass1() { | ||||
|         assertTrue(GroupType.isLectureOrClass(GroupType.CLASS) == GroupType.CLASS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldBeClass2() { | ||||
|         assertTrue(GroupType.isLectureOrClass(GroupType.CONSERVATORY) == GroupType.CLASS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldBeClass3() { | ||||
|         assertTrue(GroupType.isLectureOrClass(GroupType.LAB) == GroupType.CLASS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldBeClass4() { | ||||
|         assertTrue(GroupType.isLectureOrClass(GroupType.PRATICE) == GroupType.CLASS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldBeClass5() { | ||||
|         assertTrue(GroupType.isLectureOrClass(GroupType.SEMINAR) == GroupType.CLASS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldCastFromString1() { | ||||
|         assertTrue(GroupType.getType("Ćwiczenia") == GroupType.CLASS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldCastFromString2() { | ||||
|         assertTrue(GroupType.getType("Wykład") == GroupType.LECTURE); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldCastFromString3() { | ||||
|         assertTrue(GroupType.getType("Laboratorium") == GroupType.LAB); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldCastFromString4() { | ||||
|         assertTrue(GroupType.getType("Seminarium") == GroupType.SEMINAR); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldCastFromString5() { | ||||
|         assertTrue(GroupType.getType("Konwersatorium") == GroupType.CONSERVATORY); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldCastFromString6() { | ||||
|         assertTrue(GroupType.getType("Praktyka") == GroupType.PRATICE); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -110,14 +110,16 @@ public class CommisionController extends TokenBasedController { | ||||
|  | ||||
|                         final Optional<Commision> comPrev = this.commisionService.getNewestCommision(user); | ||||
|                         final Commision com = new Commision(user, asker); | ||||
|                         this.commisionService.save(com); | ||||
|  | ||||
|                         final List<Long> addedGroups = new ArrayList<>(); | ||||
|                         final List<Assignment> addedAssignments = new ArrayList<>(); | ||||
|  | ||||
|                         groups.stream().forEach((groupId) -> { | ||||
|                                 Groups group = this.groupServcicxe.getGroupById(groupId) | ||||
|                                                 .orElseThrow(() -> new NullPointerException()); | ||||
|                                 Assignment a = new Assignment(group, com); | ||||
|                                 this.assignmentService.save(a); | ||||
|                                 addedAssignments.add(a); | ||||
|                                 // this.assignmentService.save(a); | ||||
|                                 addedGroups.add(groupId); | ||||
|                         }); | ||||
|  | ||||
| @@ -127,7 +129,7 @@ public class CommisionController extends TokenBasedController { | ||||
|  | ||||
|                                 while (it.hasNext() && !isBad) { | ||||
|                                         final Assignment a = it.next(); | ||||
|                                         if (a.isAccepted() && !addedGroups.contains(a.getId())) { | ||||
|                                         if (a.isAccepted() && !addedGroups.contains(a.getGroup().getId())) { | ||||
|                                                 isBad = true; | ||||
|                                         } | ||||
|                                 } | ||||
| @@ -139,6 +141,9 @@ public class CommisionController extends TokenBasedController { | ||||
|                                                 HttpStatus.BAD_REQUEST); | ||||
|                         } | ||||
|  | ||||
|                         this.commisionService.save(com); | ||||
|                         this.assignmentService.saveAll(addedAssignments); | ||||
|  | ||||
|                         return new ResponseEntity<>("Succes", HttpStatus.OK); | ||||
|                 } catch (UserNotFoundException exception) { | ||||
|                         return new ResponseEntity<>(exception.getMessage(), HttpStatus.NOT_FOUND); | ||||
| @@ -155,17 +160,22 @@ public class CommisionController extends TokenBasedController { | ||||
|         @GetMapping("/user") | ||||
|         @ApiOperation("Return list of user all commisions (history of schedules)") | ||||
|         public ResponseEntity<List<? extends CommisionResponse>> getAlCommisions( | ||||
|                         @RequestParam(name = "groups", defaultValue = "false") @ApiParam(value = "Boolean if we want to display wiht commision's group ids") Boolean groups) | ||||
|                         @RequestParam(name = "groups", defaultValue = "false") @ApiParam(value = "Boolean if we want to display wiht commision's group ids") Boolean groups, | ||||
|                         @RequestParam(name = "extraInfo", defaultValue = "false") @ApiParam(value = "Boolean if we want to display extra info about listed groups. Works only if we have groups set top true") Boolean extraInfo) | ||||
|                         throws UserNotFoundException { | ||||
|                 User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException()); | ||||
|  | ||||
|                 List<? extends CommisionResponse> result; | ||||
|  | ||||
|                 final List<Commision> commisions = this.commisionService.getUsersCommisions(user); | ||||
|                 if (!groups) { | ||||
|                         result = CommisionResponseMappers.mapToResponse(this.commisionService.getUsersCommisions(user)); | ||||
|                         result = CommisionResponseMappers.mapToResponse(commisions); | ||||
|                 } else { | ||||
|                         result = CommisionResponseMappers | ||||
|                                         .mapToResponseWithGroups(this.commisionService.getUsersCommisions(user)); | ||||
|                         if (extraInfo) { | ||||
|                                 result = CommisionResponseMappers.mapToResponseWithExtraInforGroups(commisions); | ||||
|                         } else { | ||||
|                                 result = CommisionResponseMappers.mapToResponseWithGroups(commisions); | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|                 return new ResponseEntity<>(result, HttpStatus.OK); | ||||
|   | ||||
| @@ -10,6 +10,7 @@ import com.plannaplan.App; | ||||
| import com.plannaplan.entities.User; | ||||
| import com.plannaplan.models.ConfigData; | ||||
| import com.plannaplan.models.TourData; | ||||
| import com.plannaplan.responses.models.ConfigTourResponse; | ||||
| import com.plannaplan.security.cas.CasUserIdentity; | ||||
| import com.plannaplan.security.cas.CasValidationExcepiton; | ||||
| import com.plannaplan.security.cas.CasValidator; | ||||
| @@ -34,6 +35,7 @@ import org.springframework.web.multipart.MultipartFile; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import io.swagger.annotations.ApiParam; | ||||
| import org.springframework.web.bind.annotation.GetMapping; | ||||
|  | ||||
| /** | ||||
|  * Rest controller to Config related endpoints. More detailed api docs is | ||||
| @@ -167,4 +169,27 @@ public class ConfigController { | ||||
|             return new ResponseEntity<>("Internal Server Error", HttpStatus.INTERNAL_SERVER_ERROR); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return api response entity | ||||
|      */ | ||||
|     @GetMapping(path = "/config/tour") | ||||
|     @ApiOperation("It will return what tour is currently on.") | ||||
|     public ResponseEntity<ConfigTourResponse> getCurrentTourDate() { | ||||
|         final ConfigTourResponse response = new ConfigTourResponse(this.contrl.getCurrentConfig().getCurrentState()); | ||||
|         return new ResponseEntity<>(response, HttpStatus.OK); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return api response entity | ||||
|      */ | ||||
|     @Deprecated | ||||
|     @GetMapping(path = "/admin/tour") | ||||
|     @PreAuthorize("hasRole('ROLE_ADMIN')") | ||||
|     @ApiOperation("It will return what tour is currently on. You need to provide admin token. It is depreaceted use /configurator/config/tour isntead.") | ||||
|     public ResponseEntity<ConfigTourResponse> getTourDate() { | ||||
|         final ConfigTourResponse response = new ConfigTourResponse(this.contrl.getCurrentConfig().getCurrentState()); | ||||
|         return new ResponseEntity<>(response, HttpStatus.OK); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -68,7 +68,7 @@ public class CoursesController { | ||||
|                     final HashMap<Long, Integer> ammounts = this.groupService.getTakenPlaces(course.getGroups()); | ||||
|  | ||||
|                     course.getGroups().stream().forEach(group -> { | ||||
|                         if (group.getType() == GroupType.CLASS) { | ||||
|                         if (GroupType.isLectureOrClass(group.getType()) == GroupType.CLASS) { | ||||
|                             classes.add(new GroupWithCapacityResponse(group, ammounts.get(group.getId()))); | ||||
|                         } else { | ||||
|                             lectures.add(new GroupWithCapacityResponse(group, ammounts.get(group.getId()))); | ||||
|   | ||||
							
								
								
									
										103
									
								
								restservice/src/main/java/com/plannaplan/controllers/DeveloperController.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										103
									
								
								restservice/src/main/java/com/plannaplan/controllers/DeveloperController.java
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,103 @@ | ||||
| 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.PostMapping; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
|  | ||||
| import io.swagger.annotations.Api; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| import com.plannaplan.App; | ||||
| import com.plannaplan.models.TourData; | ||||
| import com.plannaplan.services.AssignmentService; | ||||
| import com.plannaplan.services.ConfiguratorService; | ||||
| import com.plannaplan.services.ExchangeService; | ||||
|  | ||||
| /** | ||||
|  * Rest controller to enpoint that help deveopler test the app | ||||
|  */ | ||||
| @RestController | ||||
| @CrossOrigin | ||||
| @RequestMapping("/api/" + App.API_VERSION + "/developer") | ||||
| @Api(tags = { | ||||
|         "DeveloperController" }, value = "DeveloperController", description = "All endpoints to use in development time to help app testing") | ||||
| public class DeveloperController { | ||||
|  | ||||
|     private static final long ONE_DAY = 86400000; | ||||
|  | ||||
|     @Autowired | ||||
|     private AssignmentService assignmentService; | ||||
|  | ||||
|     @Autowired | ||||
|     private ExchangeService exchangeService; | ||||
|  | ||||
|     @Autowired | ||||
|     private ConfiguratorService configurationController; | ||||
|  | ||||
|     /** | ||||
|      * @return if accept algorythm was perfomed | ||||
|      */ | ||||
|     @PreAuthorize("hasRole('ROLE_DEVELOPER')") | ||||
|     @PostMapping(path = "/algorythm/accept") | ||||
|     public ResponseEntity<String> performAcceptAlgorythm() { | ||||
|         this.assignmentService.callAcceptAlgorythm(); | ||||
|         return new ResponseEntity<>("Success", HttpStatus.OK); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return if exchange algorythm was perfomed | ||||
|      */ | ||||
|     @PreAuthorize("hasRole('ROLE_DEVELOPER')") | ||||
|     @PostMapping(path = "/algorythm/exchange") | ||||
|     public ResponseEntity<String> performExchangeAlgorythm() { | ||||
|         this.exchangeService.performExchange(); | ||||
|         return new ResponseEntity<>("Success", HttpStatus.OK); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return if tour was set | ||||
|      */ | ||||
|     @PreAuthorize("hasRole('ROLE_DEVELOPER')") | ||||
|     @PostMapping(path = "/tours/first") | ||||
|     public ResponseEntity<String> setFirstTour() { | ||||
|         this.configurationController.saveTours( | ||||
|                 new TourData(new Date(System.currentTimeMillis() - ONE_DAY), | ||||
|                         new Date(System.currentTimeMillis() + ONE_DAY)), | ||||
|                 new TourData(new Date(System.currentTimeMillis() + 2 * ONE_DAY), | ||||
|                         new Date(System.currentTimeMillis() + 3 * ONE_DAY))); | ||||
|         return new ResponseEntity<>("Success", HttpStatus.OK); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return if tour was set | ||||
|      */ | ||||
|     @PreAuthorize("hasRole('ROLE_DEVELOPER')") | ||||
|     @PostMapping(path = "/tours/second") | ||||
|     public ResponseEntity<String> setSecondTour() { | ||||
|         this.configurationController.saveTours( | ||||
|                 new TourData(new Date(System.currentTimeMillis() - 3 * ONE_DAY), | ||||
|                         new Date(System.currentTimeMillis() - 2 * ONE_DAY)), | ||||
|                 new TourData(new Date(System.currentTimeMillis() - ONE_DAY), | ||||
|                         new Date(System.currentTimeMillis() + ONE_DAY))); | ||||
|         return new ResponseEntity<>("Success", HttpStatus.OK); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return if tour was set | ||||
|      */ | ||||
|     @PreAuthorize("hasRole('ROLE_DEVELOPER')") | ||||
|     @PostMapping(path = "/tours/no") | ||||
|     public ResponseEntity<String> setNoTour() { | ||||
|         this.configurationController.saveTours( | ||||
|                 new TourData(new Date(System.currentTimeMillis() - ONE_DAY), new Date(System.currentTimeMillis())), | ||||
|                 new TourData(new Date(System.currentTimeMillis() + ONE_DAY), | ||||
|                         new Date(System.currentTimeMillis() + 2 * ONE_DAY))); | ||||
|         return new ResponseEntity<>("Success", HttpStatus.OK); | ||||
|     } | ||||
| } | ||||
| @@ -16,6 +16,7 @@ import com.plannaplan.responses.models.ExchangeResponse; | ||||
| import com.plannaplan.services.AssignmentService; | ||||
| import com.plannaplan.services.ExchangeService; | ||||
| import com.plannaplan.services.GroupService; | ||||
| import com.plannaplan.types.GroupType; | ||||
|  | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.http.HttpStatus; | ||||
| @@ -89,11 +90,14 @@ public class ExchangeController extends TokenBasedController { | ||||
|         final Groups groupInstance = group.get(); | ||||
|  | ||||
|         if (assignmentInstance.getGroup().getCourseId() != null | ||||
|                 && assignmentInstance.getGroup().getCourseId().getId() != groupInstance.getCourseId().getId()) { | ||||
|                 && !assignmentInstance.getGroup().getCourseId().getId().equals(groupInstance.getCourseId().getId())) { | ||||
|             System.out.println(assignmentInstance.getGroup().getCourseId().getId()); | ||||
|             System.out.println(groupInstance.getCourseId().getId()); | ||||
|             return new ResponseEntity<>("You can performe exchange only within one course.", HttpStatus.BAD_REQUEST); | ||||
|         } | ||||
|  | ||||
|         if (assignmentInstance.getGroup().getType() != groupInstance.getType()) { | ||||
|         if (GroupType.isLectureOrClass(assignmentInstance.getGroup().getType()) != GroupType | ||||
|                 .isLectureOrClass(groupInstance.getType())) { | ||||
|             return new ResponseEntity<>("You can't exchange lecture to class and otherwise.", HttpStatus.BAD_REQUEST); | ||||
|         } | ||||
|  | ||||
|   | ||||
							
								
								
									
										102
									
								
								restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										102
									
								
								restservice/src/main/java/com/plannaplan/controllers/StatisticsController.java
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| 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.StatisticSimpleNumberResponse; | ||||
| import com.plannaplan.services.GroupService; | ||||
| import com.plannaplan.services.UserService; | ||||
|  | ||||
| /** | ||||
|  * 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; | ||||
|  | ||||
|     @Autowired | ||||
|     private UserService userService; | ||||
|  | ||||
|     /** | ||||
|      * @return if tour was set | ||||
|      */ | ||||
|     @PreAuthorize("hasRole('ROLE_DEANERY')") | ||||
|     @GetMapping(path = "/groups/created") | ||||
|     public ResponseEntity<StatisticSimpleNumberResponse> getGroupsAmmounts() { | ||||
|         final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( | ||||
|                 this.groupService.getGroupsAmmount()); | ||||
|         return new ResponseEntity<>(response, HttpStatus.OK); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return if tour was set | ||||
|      */ | ||||
|     @PreAuthorize("hasRole('ROLE_DEANERY')") | ||||
|     @GetMapping(path = "/groups/full") | ||||
|     public ResponseEntity<StatisticSimpleNumberResponse> getGroupsFullAmmounts() { | ||||
|         final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( | ||||
|                 this.groupService.getFullgroupsAmmount()); | ||||
|         return new ResponseEntity<>(response, HttpStatus.OK); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return amount of registered to some groups | ||||
|      */ | ||||
|     @PreAuthorize("hasRole('ROLE_DEANERY')") | ||||
|     @GetMapping(path = "/users/registered") | ||||
|     public ResponseEntity<StatisticSimpleNumberResponse> getCommisionsAmmounts() { | ||||
|         final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( | ||||
|                 this.userService.getAmmountOfUsersWithAssignedGroups()); | ||||
|         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<StatisticSimpleNumberResponse> getNonCommisionsAmmounts() { | ||||
|         final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( | ||||
|                 this.userService.getAmmountOfUsersWithNoAssignedGroups()); | ||||
|         return new ResponseEntity<>(response, HttpStatus.OK); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return amount of students that have fully accepted schedules | ||||
|      */ | ||||
|     @PreAuthorize("hasRole('ROLE_DEANERY')") | ||||
|     @GetMapping(path = "/users/accepted") | ||||
|     public ResponseEntity<StatisticSimpleNumberResponse> getAcceptedAmmounts() { | ||||
|         final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( | ||||
|                 this.userService.getAmmountOfUsersWithAcceptedSchedules()); | ||||
|         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<StatisticSimpleNumberResponse> getAcceptedPartlyAmmounts() { | ||||
|         final StatisticSimpleNumberResponse response = new StatisticSimpleNumberResponse( | ||||
|                 this.userService.getAmmountOfUsersWithNoAcceptedSchedules()); | ||||
|         return new ResponseEntity<>(response, HttpStatus.OK); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -36,19 +36,19 @@ public class AssignmentResponseMappers { | ||||
|     public static final List<AssignmentResponse> mapToResponse(List<Assignment> assignments, | ||||
|             HashMap<Long, Integer> ammounts) { | ||||
|         List<AssignmentResponse> response = new ArrayList<>(); | ||||
|         HashMap<Course, List<Groups>> courses = new HashMap<>(); | ||||
|         HashMap<Course, List<Assignment>> courses = new HashMap<>(); | ||||
|         assignments.stream().forEach((Assignment assignment) -> { | ||||
|             final Groups group = assignment.getGroup(); | ||||
|             final Course course = group.getCourseId(); | ||||
|             if (courses.get(course) == null) { | ||||
|                 courses.put(course, new ArrayList<>()); | ||||
|             } | ||||
|             courses.get(course).add(group); | ||||
|             courses.get(course).add(assignment); | ||||
|         }); | ||||
|  | ||||
|         for (Map.Entry<Course, List<Groups>> entry : courses.entrySet()) { | ||||
|         for (Map.Entry<Course, List<Assignment>> entry : courses.entrySet()) { | ||||
|             final Course course = entry.getKey(); | ||||
|             final List<Groups> courseGroups = entry.getValue(); | ||||
|             final List<Assignment> courseGroups = entry.getValue(); | ||||
|             if (courseGroups.size() == 1) { | ||||
|                 if (ammounts != null) { | ||||
|                     response.add(new AssignmentResponse(course, courseGroups.get(0), ammounts)); | ||||
| @@ -57,9 +57,11 @@ public class AssignmentResponseMappers { | ||||
|                 } | ||||
|             } | ||||
|             if (courseGroups.size() == 2) { | ||||
|                 final Groups lecture = courseGroups.stream().filter(o -> o.getType() == GroupType.LECTURE).findFirst() | ||||
|                         .get(); | ||||
|                 final Groups classes = courseGroups.stream().filter(o -> o.getType() == GroupType.CLASS).findFirst() | ||||
|                 final Assignment lecture = courseGroups.stream() | ||||
|                         .filter(o -> GroupType.isLectureOrClass(o.getGroup().getType()) == GroupType.LECTURE) | ||||
|                         .findFirst().get(); | ||||
|                 final Assignment classes = courseGroups.stream() | ||||
|                         .filter(o -> GroupType.isLectureOrClass(o.getGroup().getType()) == GroupType.CLASS).findFirst() | ||||
|                         .get(); | ||||
|  | ||||
|                 if (ammounts != null) { | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import java.util.stream.Collectors; | ||||
|  | ||||
| import com.plannaplan.entities.Commision; | ||||
| import com.plannaplan.responses.models.CommisionResponse; | ||||
| import com.plannaplan.responses.models.CommisionWithAcceptedGroupsResponse; | ||||
| import com.plannaplan.responses.models.CommisionWithGroupsResponse; | ||||
|  | ||||
| /** | ||||
| @@ -28,4 +29,14 @@ public class CommisionResponseMappers { | ||||
|         return commisions.stream().filter(Objects::nonNull).map(CommisionWithGroupsResponse::new) | ||||
|                 .collect(Collectors.toList()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param commisions list of commisions to be mapped | ||||
|      * @return list of api responses | ||||
|      */ | ||||
|     public static final List<CommisionWithAcceptedGroupsResponse> mapToResponseWithExtraInforGroups( | ||||
|             List<Commision> commisions) { | ||||
|         return commisions.stream().filter(Objects::nonNull).map(CommisionWithAcceptedGroupsResponse::new) | ||||
|                 .collect(Collectors.toList()); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -83,7 +83,7 @@ public class GroupsMappers { | ||||
|         List<GroupDefaultResponse> classes = new ArrayList<>(); | ||||
|  | ||||
|         groups.stream().forEach(group -> { | ||||
|             if (group.getType() == GroupType.CLASS) { | ||||
|             if (GroupType.isLectureOrClass(group.getType()) == GroupType.CLASS) { | ||||
|                 if (taken != null) { | ||||
|                     classes.add(new GroupDefaultResponse(group, taken.get(group.getId()))); | ||||
|                 } else { | ||||
| @@ -122,7 +122,7 @@ public class GroupsMappers { | ||||
|         List<GroupWithCapacityResponse> classes = new ArrayList<>(); | ||||
|  | ||||
|         groups.stream().forEach(group -> { | ||||
|             if (group.getType() == GroupType.CLASS) { | ||||
|             if (GroupType.isLectureOrClass(group.getType()) == GroupType.CLASS) { | ||||
|                 if (taken != null) { | ||||
|                     classes.add(new GroupWithCapacityResponse(group, taken.get(group.getId()))); | ||||
|                 } else { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package com.plannaplan.responses.models; | ||||
|  | ||||
| import com.plannaplan.entities.Assignment; | ||||
| import com.plannaplan.entities.Groups; | ||||
| import com.plannaplan.types.GroupType; | ||||
|  | ||||
| /** | ||||
|  * Assignment detailed response for api | ||||
| @@ -25,15 +26,15 @@ public class AssignmentDetailedResponse { | ||||
|         this.day = group.getDay().label; | ||||
|         this.time = group.getTimeString(); | ||||
|         this.endTime = group.getEndTimeString(); | ||||
| 	this.lecturer = group.getLecturer().toString(); | ||||
| 	this.type = group.getType().toString(); | ||||
|         this.lecturer = group.getLecturer().toString(); | ||||
|         this.type = GroupType.isLectureOrClass(group.getType()).toString(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return type of the lecture | ||||
|      */ | ||||
|     public String getType() { | ||||
| 	return type; | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package com.plannaplan.responses.models; | ||||
|  | ||||
| import java.util.HashMap; | ||||
|  | ||||
| import com.plannaplan.entities.Assignment; | ||||
| import com.plannaplan.entities.Course; | ||||
| import com.plannaplan.entities.Groups; | ||||
| import com.plannaplan.types.GroupType; | ||||
| @@ -15,6 +16,7 @@ import io.swagger.annotations.ApiModel; | ||||
| public class AssignmentResponse { | ||||
|     private Long id; | ||||
|     private String name; | ||||
|     private String symbol; | ||||
|     private GroupWithCapacityResponse classes; | ||||
|     private GroupWithCapacityResponse lecture; | ||||
|  | ||||
| @@ -26,10 +28,18 @@ public class AssignmentResponse { | ||||
|     public AssignmentResponse(Course course, Groups lecture, Groups classes) { | ||||
|         this.id = course.getId(); | ||||
|         this.name = course.getName(); | ||||
|         this.symbol = course.getSymbol(); | ||||
|         this.lecture = lecture == null ? null : new GroupWithCapacityResponse(lecture); | ||||
|         this.classes = classes == null ? null : new GroupWithCapacityResponse(classes); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return returns symbol of assigned course | ||||
|      */ | ||||
|     public String getSymbol() { | ||||
|         return symbol; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param course   course entity | ||||
|      * @param lecture  lecture Groups entity | ||||
| @@ -40,6 +50,7 @@ public class AssignmentResponse { | ||||
|     public AssignmentResponse(Course course, Groups lecture, Groups classes, HashMap<Long, Integer> ammounts) { | ||||
|         this.id = course.getId(); | ||||
|         this.name = course.getName(); | ||||
|         this.symbol = course.getSymbol(); | ||||
|         this.lecture = lecture == null ? null : new GroupWithCapacityResponse(lecture, ammounts.get(lecture.getId())); | ||||
|         this.classes = classes == null ? null : new GroupWithCapacityResponse(classes, ammounts.get(classes.getId())); | ||||
|     } | ||||
| @@ -50,8 +61,8 @@ public class AssignmentResponse { | ||||
|      * @param group  class/lecture entity | ||||
|      */ | ||||
|     public AssignmentResponse(Course course, Groups group) { | ||||
|         this(course, group.getType() == GroupType.LECTURE ? group : null, | ||||
|                 group.getType() == GroupType.CLASS ? group : null); | ||||
|         this(course, GroupType.isLectureOrClass(group.getType()) == GroupType.LECTURE ? group : null, | ||||
|                 GroupType.isLectureOrClass(group.getType()) == GroupType.CLASS ? group : null); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -61,8 +72,61 @@ public class AssignmentResponse { | ||||
|      *                 places | ||||
|      */ | ||||
|     public AssignmentResponse(Course course, Groups group, HashMap<Long, Integer> ammounts) { | ||||
|         this(course, group.getType() == GroupType.LECTURE ? group : null, | ||||
|                 group.getType() == GroupType.CLASS ? group : null, ammounts); | ||||
|         this(course, GroupType.isLectureOrClass(group.getType()) == GroupType.LECTURE ? group : null, | ||||
|                 GroupType.isLectureOrClass(group.getType()) == GroupType.CLASS ? group : null, ammounts); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param course   course entity | ||||
|      * @param group    class/lecture entity | ||||
|      * @param ammounts map with ammounts key - group id, value - ammounts of taken | ||||
|      *                 places | ||||
|      */ | ||||
|     public AssignmentResponse(Course course, Assignment group, HashMap<Long, Integer> ammounts) { | ||||
|         this(course, GroupType.isLectureOrClass(group.getGroup().getType()) == GroupType.LECTURE ? group : null, | ||||
|                 GroupType.isLectureOrClass(group.getGroup().getType()) == GroupType.CLASS ? group : null, ammounts); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      *  | ||||
|      * @param course course entity | ||||
|      * @param group  class/lecture entity | ||||
|      */ | ||||
|     public AssignmentResponse(Course course, Assignment group) { | ||||
|         this(course, GroupType.isLectureOrClass(group.getGroup().getType()) == GroupType.LECTURE ? group : null, | ||||
|                 GroupType.isLectureOrClass(group.getGroup().getType()) == GroupType.CLASS ? group : null); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param course   course entity | ||||
|      * @param lecture  lecture Groups entity | ||||
|      * @param classes  class Groups entity | ||||
|      * @param ammounts map with ammounts key - group id, value - ammounts of taken | ||||
|      *                 places | ||||
|      */ | ||||
|     public AssignmentResponse(Course course, Assignment lecture, Assignment classes, HashMap<Long, Integer> ammounts) { | ||||
|         this.id = course.getId(); | ||||
|         this.name = course.getName(); | ||||
|         this.symbol = course.getSymbol(); | ||||
|         this.classes = classes != null | ||||
|                 ? new GroupWithCapacityResponse(classes, ammounts.get(classes.getGroup().getId())) | ||||
|                 : null; | ||||
|         this.lecture = lecture != null | ||||
|                 ? new GroupWithCapacityResponse(lecture, ammounts.get(lecture.getGroup().getId())) | ||||
|                 : null; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param course  course entity | ||||
|      * @param lecture lecture Groups entity | ||||
|      * @param classes class Groups entity | ||||
|      */ | ||||
|     public AssignmentResponse(Course course, Assignment lecture, Assignment classes) { | ||||
|         this.id = course.getId(); | ||||
|         this.name = course.getName(); | ||||
|         this.symbol = course.getSymbol(); | ||||
|         this.classes = classes != null ? new GroupWithCapacityResponse(classes) : null; | ||||
|         this.lecture = lecture != null ? new GroupWithCapacityResponse(lecture) : null; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -0,0 +1,34 @@ | ||||
| package com.plannaplan.responses.models; | ||||
|  | ||||
| import com.plannaplan.entities.Assignment; | ||||
|  | ||||
| /** | ||||
|  * Repsonse for single assignment to use in commision repsonse | ||||
|  */ | ||||
| public class AssignmentsSingleResponse { | ||||
|     private Long id; | ||||
|     private boolean isAccepted; | ||||
|  | ||||
|     /** | ||||
|      * @param assignment to map to response | ||||
|      */ | ||||
|     public AssignmentsSingleResponse(Assignment assignment) { | ||||
|         this.id = assignment.getGroup().getId(); | ||||
|         this.isAccepted = assignment.isAccepted(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return id of assigned group | ||||
|      */ | ||||
|     public Long getId() { | ||||
|         return id; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return is group already accepted or not | ||||
|      */ | ||||
|     public boolean isAccepted() { | ||||
|         return isAccepted; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,43 @@ | ||||
| package com.plannaplan.responses.models; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Objects; | ||||
| import java.util.function.Function; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import com.plannaplan.entities.Assignment; | ||||
| import com.plannaplan.entities.Commision; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
|  | ||||
| /** | ||||
|  * Commision With Groups api Response. It extends CommisionResponse repsone | ||||
|  */ | ||||
| @ApiModel(description = "Response shows information about commision and its groups. It also has info about group state (is accepted or not)", value = "CommisionWithGroupsResponse") | ||||
| public class CommisionWithAcceptedGroupsResponse extends CommisionResponse { | ||||
|  | ||||
|     private List<AssignmentsSingleResponse> groups; | ||||
|  | ||||
|     /** | ||||
|      * @param commision commision to map to api response | ||||
|      */ | ||||
|     public CommisionWithAcceptedGroupsResponse(Commision commision) { | ||||
|         super(commision); | ||||
|         this.groups = commision.getAssignments().stream().filter(Objects::nonNull) | ||||
|                 .map(new Function<Assignment, AssignmentsSingleResponse>() { | ||||
|  | ||||
|                     @Override | ||||
|                     public AssignmentsSingleResponse apply(Assignment arg0) { | ||||
|                         return new AssignmentsSingleResponse(arg0); | ||||
|                     } | ||||
|                 }).collect(Collectors.toList()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return lsit of fetured groups informations | ||||
|      */ | ||||
|     public List<AssignmentsSingleResponse> getGroups() { | ||||
|         return groups; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,26 @@ | ||||
| package com.plannaplan.responses.models; | ||||
|  | ||||
| import com.plannaplan.types.AppState; | ||||
|  | ||||
| /** | ||||
|  * Api response for config tours entpoint | ||||
|  */ | ||||
| public class ConfigTourResponse { | ||||
|  | ||||
|     private String currentTour; | ||||
|  | ||||
|     /** | ||||
|      * @param appState to send as a response | ||||
|      */ | ||||
|     public ConfigTourResponse(AppState appState) { | ||||
|         this.currentTour = appState.toString(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return current app state as string | ||||
|      */ | ||||
|     public String getCurrentTour() { | ||||
|         return currentTour; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -30,7 +30,7 @@ public class CoursesWithGroupsResponse extends CoursesResponse { | ||||
|     public CoursesWithGroupsResponse(Course course) { | ||||
|         super(course); | ||||
|         course.getGroups().stream().forEach(group -> { | ||||
|             if (group.getType() == GroupType.CLASS) { | ||||
|             if (GroupType.isLectureOrClass(group.getType()) == GroupType.CLASS) { | ||||
|                 this.classes.add(new GroupWithCapacityResponse(group)); | ||||
|             } else { | ||||
|                 this.lectures.add(new GroupWithCapacityResponse(group)); | ||||
|   | ||||
| @@ -16,6 +16,7 @@ public class ExchangeResponse { | ||||
| 	private GroupDefaultResponse ownedAssignment; | ||||
| 	@ApiModelProperty(value = "Group that user want to get") | ||||
| 	private GroupDefaultResponse desiredGroup; | ||||
| 	private String courseName; | ||||
|  | ||||
| 	/** | ||||
| 	 * creat new instance | ||||
| @@ -26,6 +27,16 @@ public class ExchangeResponse { | ||||
| 		this.id = exchange.getId(); | ||||
| 		this.ownedAssignment = new GroupDefaultResponse(exchange.getOwnedAssignment().getGroup()); | ||||
| 		this.desiredGroup = new GroupDefaultResponse(exchange.getDesiredAssignment()); | ||||
| 		this.courseName = exchange.getOwnedAssignment().getGroup().getCourseId() != null | ||||
| 				? exchange.getOwnedAssignment().getGroup().getCourseId().getName() | ||||
| 				: ""; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @return name of course related to exchange | ||||
| 	 */ | ||||
| 	public String getCourseName() { | ||||
| 		return courseName; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
|   | ||||
| @@ -39,6 +39,11 @@ public class GroupDefaultResponse { | ||||
|     @ApiModelProperty(value = "Value shows how many places is already taken by other students.") | ||||
|     private Integer takenPlaces; | ||||
|  | ||||
|     @ApiModelProperty(value = "Used only in resposnes realted to user assignments. For example in /api/v1/users/schedule.") | ||||
|     private Boolean isAccepted; | ||||
|  | ||||
|     private Integer grNr; | ||||
|  | ||||
|     /** | ||||
|      * creat new entity | ||||
|      *  | ||||
| @@ -51,7 +56,22 @@ public class GroupDefaultResponse { | ||||
|         this.endTime = group.getEndTimeString() != null ? group.getEndTimeString() : ""; | ||||
|         this.lecturer = group.getLecturer() != null ? group.getLecturer().toString() : ""; | ||||
|         this.room = group.getRoom() != null ? group.getRoom() : ""; | ||||
|         this.type = group.getType() != null ? group.getType() : null; | ||||
|         this.type = group.getType() != null ? GroupType.isLectureOrClass(group.getType()) : null; | ||||
|         this.grNr = group.getGrNr() != null ? group.getGrNr() : null; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return group number | ||||
|      */ | ||||
|     public Integer getGrNr() { | ||||
|         return grNr; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return is group accepted if its related to assignmetn | ||||
|      */ | ||||
|     public Boolean getIsAccepted() { | ||||
|         return isAccepted; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -73,6 +93,16 @@ public class GroupDefaultResponse { | ||||
|         this(assignment.getGroup()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      *  | ||||
|      * @param assignment  entity to map to api response | ||||
|      * @param takenPlaces map with ammounts of taken places | ||||
|      */ | ||||
|     public GroupDefaultResponse(Assignment assignment, int takenPlaces) { | ||||
|         this(assignment.getGroup(), takenPlaces); | ||||
|         this.isAccepted = assignment.isAccepted(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return what typew of group is this (lecture or class) | ||||
|      */ | ||||
|   | ||||
| @@ -49,7 +49,8 @@ public class GroupWithCapacityResponse extends GroupDefaultResponse { | ||||
|      * @param takenPlaces group taken places | ||||
|      */ | ||||
|     public GroupWithCapacityResponse(Assignment assignment, int takenPlaces) { | ||||
|         this(assignment.getGroup(), takenPlaces); | ||||
|         super(assignment, takenPlaces); | ||||
|         this.capacity = assignment.getGroup().getCapacity(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -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; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -9,6 +9,7 @@ public abstract class CoursesResponse { | ||||
|  | ||||
|     private Long id; | ||||
|     private String name; | ||||
|     private String symbol; | ||||
|  | ||||
|     /** | ||||
|      * create instance | ||||
| @@ -18,6 +19,7 @@ public abstract class CoursesResponse { | ||||
|     public CoursesResponse(Course course) { | ||||
|         this.id = course.getId() != null ? course.getId() : null; | ||||
|         this.name = course.getName() != null ? course.getName() : ""; | ||||
|         this.symbol = course.getSymbol() != null ? course.getSymbol() : ""; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -27,6 +29,13 @@ public abstract class CoursesResponse { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return course symbol | ||||
|      */ | ||||
|     public String getSymbol() { | ||||
|         return symbol; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return db id | ||||
|      */ | ||||
|   | ||||
| @@ -10,7 +10,8 @@ import org.springframework.security.core.GrantedAuthority; | ||||
|  * Users Roles for spring app | ||||
|  */ | ||||
| public enum AuthorityRoles implements GrantedAuthority { | ||||
|     STUDENT("ROLE_STUDENT"), DEANERY("ROLE_DEANERY"), ADMIN("ROLE_ADMIN"), TEST_USER("ROLE_TESTUSER"); | ||||
|     STUDENT("ROLE_STUDENT"), DEANERY("ROLE_DEANERY"), ADMIN("ROLE_ADMIN"), TEST_USER("ROLE_TESTUSER"), | ||||
|     DEVELOPER("ROLE_DEVELOPER"); | ||||
|  | ||||
|     private String role; | ||||
|  | ||||
| @@ -39,6 +40,8 @@ public enum AuthorityRoles implements GrantedAuthority { | ||||
|                 return Optional.of(AuthorityRoles.STUDENT); | ||||
|             case TEST_USER: | ||||
|                 return Optional.of(AuthorityRoles.TEST_USER); | ||||
|             case DEVELOPER: | ||||
|                 return Optional.of(AuthorityRoles.DEVELOPER); | ||||
|             default: | ||||
|                 return Optional.empty(); | ||||
|         } | ||||
|   | ||||
| @@ -40,7 +40,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { | ||||
|     @Override | ||||
|     public void configure(final WebSecurity webSecurity) { | ||||
|         webSecurity.ignoring().antMatchers("/token**").antMatchers("/token/refresh**") | ||||
|                 .antMatchers("/api/v1/courses/all").antMatchers("/api/v1/groups/course/{id}") | ||||
|                 .antMatchers("/api/v1/courses/all") | ||||
|                 .antMatchers("/api/v1/groups/course/{id}", "/api/v1/configurator/config/tour") | ||||
|                 .antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources/**", "/configuration/security", | ||||
|                         "/swagger-ui.html", "/webjars/**"); | ||||
|     } | ||||
|   | ||||
| @@ -40,6 +40,7 @@ public class ConfigControllerTest extends AbstractControllerTest { | ||||
|     private static final String COURSE_ENDPOINT = "/api/v1/configurator/config/courses"; | ||||
|     private static final String TOURS_ENDPOINT = "/api/v1/configurator/config/tours"; | ||||
|     private static final String ADMIN_INIT_ENDPOINT = "/api/v1/configurator/admin/init"; | ||||
|     private static final String TOUR_GET_ENDPOINT = "/api/v1/configurator/admin/tour"; | ||||
|     private static final String FIRST_TOUR_START = "firstTourBegin"; | ||||
|     private static final String FIRST_TOUR_END = "firstTourEnd"; | ||||
|     private static final String SECOND_TOUR_START = "secondTourBegin"; | ||||
| @@ -230,19 +231,19 @@ public class ConfigControllerTest extends AbstractControllerTest { | ||||
|     @Test | ||||
|     @Ignore | ||||
|     @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) | ||||
|     public void shouldCreateAdminBecouseOfEmptyDatabase() throws Exception{ | ||||
|     public void shouldCreateAdminBecouseOfEmptyDatabase() throws Exception { | ||||
|         // have no idea how to make this test independent from user that run this | ||||
|         final String ticket = ""; | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); | ||||
|         mockMvc.perform(get(ADMIN_INIT_ENDPOINT).param("ticket", ticket)).andExpect(status().isOk());         | ||||
|         mockMvc.perform(get(ADMIN_INIT_ENDPOINT).param("ticket", ticket)).andExpect(status().isOk()); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldFailDueToExistingAdmin() throws Exception{ | ||||
|     public void shouldFailDueToExistingAdmin() throws Exception { | ||||
|         this.service.save(new User(null, null, "shouldFailDueToExistingAdmin@ConfigController.Test", UserRoles.ADMIN)); | ||||
|         final String ticket = "hfewlhfjlewhipfqwehipqwef"; | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); | ||||
|         mockMvc.perform(get(ADMIN_INIT_ENDPOINT).param("ticket", ticket)).andExpect(status().is4xxClientError());         | ||||
|         mockMvc.perform(get(ADMIN_INIT_ENDPOINT).param("ticket", ticket)).andExpect(status().is4xxClientError()); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
| @@ -282,10 +283,9 @@ public class ConfigControllerTest extends AbstractControllerTest { | ||||
|         final String token = this.service.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020") | ||||
|                 .param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020") | ||||
|                 .param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().isOk()); | ||||
|         mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020").param(FIRST_TOUR_END, "14.12.2020") | ||||
|                 .param(SECOND_TOUR_START, "16.12.2020").param(SECOND_TOUR_END, "20.12.2020") | ||||
|                 .header("Authorization", "Bearer " + token)).andExpect(status().isOk()); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
| @@ -295,10 +295,9 @@ public class ConfigControllerTest extends AbstractControllerTest { | ||||
|         final String token = this.service.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020") | ||||
|                 .param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020") | ||||
|                 .param(SECOND_TOUR_END, "13.12.2020").header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().is4xxClientError()); | ||||
|         mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020").param(FIRST_TOUR_END, "14.12.2020") | ||||
|                 .param(SECOND_TOUR_START, "16.12.2020").param(SECOND_TOUR_END, "13.12.2020") | ||||
|                 .header("Authorization", "Bearer " + token)).andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
| @@ -309,10 +308,9 @@ public class ConfigControllerTest extends AbstractControllerTest { | ||||
|         final String token = this.service.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020") | ||||
|                 .param(FIRST_TOUR_END, "10.12.2020").param(SECOND_TOUR_START, "16.12.2020") | ||||
|                 .param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().is4xxClientError()); | ||||
|         mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020").param(FIRST_TOUR_END, "10.12.2020") | ||||
|                 .param(SECOND_TOUR_START, "16.12.2020").param(SECOND_TOUR_END, "20.12.2020") | ||||
|                 .header("Authorization", "Bearer " + token)).andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
| @@ -323,10 +321,9 @@ public class ConfigControllerTest extends AbstractControllerTest { | ||||
|         final String token = this.service.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020") | ||||
|                 .param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "13.12.2020") | ||||
|                 .param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().is4xxClientError()); | ||||
|         mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020").param(FIRST_TOUR_END, "14.12.2020") | ||||
|                 .param(SECOND_TOUR_START, "13.12.2020").param(SECOND_TOUR_END, "20.12.2020") | ||||
|                 .header("Authorization", "Bearer " + token)).andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
| @@ -337,10 +334,41 @@ public class ConfigControllerTest extends AbstractControllerTest { | ||||
|         final String token = this.service.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020") | ||||
|                 .param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020") | ||||
|                 .param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token)) | ||||
|         mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020").param(FIRST_TOUR_END, "14.12.2020") | ||||
|                 .param(SECOND_TOUR_START, "16.12.2020").param(SECOND_TOUR_END, "20.12.2020") | ||||
|                 .header("Authorization", "Bearer " + token)).andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldReturnOKAuthorizedForGetTours() throws Exception { | ||||
|         final String mail = "shouldReturnOKAuthorizedForGetTours@ConfigController.test"; | ||||
|         final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN)); | ||||
|  | ||||
|         final String token = this.service.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(get(TOUR_GET_ENDPOINT).header("Authorization", "Bearer " + token)).andExpect(status().isOk()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldDenyForGetTours() throws Exception { | ||||
|         final String mail = "shouldDenyForGetTours@ConfigController.test"; | ||||
|         final User usr = this.service.save(new User(null, null, mail, UserRoles.TEST_USER)); | ||||
|  | ||||
|         final String token = this.service.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(get(TOUR_GET_ENDPOINT).header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     }     | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldDenyWithNoToken() throws Exception { | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(get(TOUR_GET_ENDPOINT)).andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,205 @@ | ||||
| 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.post; | ||||
| 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 DeveloperControllerTest extends AbstractControllerTest { | ||||
|     private static final String ACCEPT_ENDPOINT = "/api/v1/developer/algorythm/accept"; | ||||
|     private static final String EXCHANGE_ENDPOINT = "/api/v1/developer/algorythm/exchange"; | ||||
|     private static final String FIRST_TOUR_ENDPOINT = "/api/v1/developer/tours/first"; | ||||
|     private static final String NO_TOUR_ENDPOINT = "/api/v1/developer/tours/no"; | ||||
|     private static final String SECOND_TOUR_ENDPOINT = "/api/v1/developer/tours/second"; | ||||
|  | ||||
|     @Autowired | ||||
|     private UserService userService; | ||||
|  | ||||
|     /* ACCEPT TESTS */ | ||||
|  | ||||
|     @Test | ||||
|     public void shouldFailWithWrongAcces() throws Exception { | ||||
|         final String mail = "shouldFailWithWrongAcces@DeveloperController.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(post(ACCEPT_ENDPOINT).header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldOkPerformingAcceptAlgotyrhm() throws Exception { | ||||
|         final String mail = "shouldOkPerformingAcceptAlgotyrhm@DeveloperController.test"; | ||||
|         final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEVELOPER)); | ||||
|  | ||||
|         final String token = this.userService.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(ACCEPT_ENDPOINT).header("Authorization", "Bearer " + token)).andExpect(status().isOk()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldFailWithNoToken() throws Exception { | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(ACCEPT_ENDPOINT)).andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /* EXCHANGE TESTS */ | ||||
|  | ||||
|     @Test | ||||
|     public void shouldFailExchangeWithWrongAcces() throws Exception { | ||||
|         final String mail = "shouldFailExchangeWithWrongAcces@DeveloperController.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(post(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldOkExchangeAlgotyrhm() throws Exception { | ||||
|         final String mail = "shouldOkExchangeAlgotyrhm@DeveloperController.test"; | ||||
|         final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEVELOPER)); | ||||
|  | ||||
|         final String token = this.userService.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " + token)).andExpect(status().isOk()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldFailExchaneWithNoToken() throws Exception { | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(EXCHANGE_ENDPOINT)).andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /* FIRST TOUR */ | ||||
|  | ||||
|     @Test | ||||
|     public void shouldFailFirstTourWithWrongAcces() throws Exception { | ||||
|         final String mail = "shouldFailFirstTourWithWrongAcces@DeveloperController.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(post(FIRST_TOUR_ENDPOINT).header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldOkFirstTourAlgotyrhm() throws Exception { | ||||
|         final String mail = "shouldOkFirstTourAlgotyrhm@DeveloperController.test"; | ||||
|         final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEVELOPER)); | ||||
|  | ||||
|         final String token = this.userService.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(FIRST_TOUR_ENDPOINT).header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().isOk()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldFirstTourWithNoToken() throws Exception { | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(FIRST_TOUR_ENDPOINT)).andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /* SECOND TOUR */ | ||||
|  | ||||
|     @Test | ||||
|     public void shouldFailSecondTourWithWrongAcces() throws Exception { | ||||
|         final String mail = "shouldFailSecondTourWithWrongAcces@DeveloperController.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(post(SECOND_TOUR_ENDPOINT).header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldOkSecondTourAlgotyrhm() throws Exception { | ||||
|         final String mail = "shouldOkSecondTourAlgotyrhm@DeveloperController.test"; | ||||
|         final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEVELOPER)); | ||||
|  | ||||
|         final String token = this.userService.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(SECOND_TOUR_ENDPOINT).header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().isOk()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldFailSecondTourWithNoToken() throws Exception { | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(SECOND_TOUR_ENDPOINT)).andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /* NO TOUR */ | ||||
|  | ||||
|     @Test | ||||
|     public void shouldNoTourWithWrongAcces() throws Exception { | ||||
|         final String mail = "shouldNoTourWithWrongAcces@DeveloperController.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(post(NO_TOUR_ENDPOINT).header("Authorization", "Bearer " + token)) | ||||
|                 .andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldOkNoAlgotyrhm() throws Exception { | ||||
|         final String mail = "shouldOkNoAlgotyrhm@DeveloperController.test"; | ||||
|         final User usr = this.userService.save(new User(null, null, mail, UserRoles.DEVELOPER)); | ||||
|  | ||||
|         final String token = this.userService.login(usr).getToken(); | ||||
|  | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(NO_TOUR_ENDPOINT).header("Authorization", "Bearer " + token)).andExpect(status().isOk()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void shouldFailNoTourWithNoToken() throws Exception { | ||||
|         MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); | ||||
|         mockMvc.perform(post(NO_TOUR_ENDPOINT)).andExpect(status().is4xxClientError()); | ||||
|  | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,244 @@ | ||||
| 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"; | ||||
|     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"; | ||||
|     private static final String USER_PARTLY_ACCEPTED_AMMOUNTS_ENDPOINT = "/api/v1/statistics/users/accepted/partly"; | ||||
|  | ||||
|     @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()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /* 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()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /* 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()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /* 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()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /* 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()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /* 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()); | ||||
|  | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user