diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java b/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java index 11a4898..baa7510 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java @@ -2,6 +2,7 @@ package com.plannaplan.services; import com.plannaplan.models.ConfigData; import com.plannaplan.models.FileData; +import com.plannaplan.models.TourData; import com.plannaplan.repositories.AppConfigRepository; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +42,15 @@ public class ConfiguratorService { migrator.migrate(coursesData); } + /** + * Save tours to DataBase + * @param firstTour First tour period. + * @param secondTour Second tour period. + */ + public void saveTours(TourData firstTour, TourData secondTour) { + this.configRepo.save(new AppConfig(firstTour, secondTour)); + } + /** * current config getter * diff --git a/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java b/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java index 146dc12..9b59955 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/ConfigController.java @@ -82,6 +82,28 @@ public class ConfigController { } } + + @PostMapping(path = "/config/tours") + @PreAuthorize("hasRole('ROLE_ADMIN')") + @ApiOperation("Set tours dates. To call you need to provide ADMIN token") + public ResponseEntity configToursApp( + @RequestParam("firstTourBegin") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when first tour begin in format dd.MM.yyyy") Date firstTourBegin, + @RequestParam("firstTourEnd") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when first tour ends in format dd.MM.yyyy") Date firstTourEnd, + @RequestParam("secondTourBegin") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when second tour begin in format dd.MM.yyyy") Date secondTourBegin, + @RequestParam("secondTourEnd") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when second tour ends in format dd.MM.yyyy") Date secondTourEnd) { + if (!(firstTourBegin.before(firstTourEnd) + && (firstTourEnd.before(secondTourBegin) || firstTourEnd.equals(secondTourBegin)) + && secondTourBegin.before(secondTourEnd))) { + return new ResponseEntity<>("Bad dates", HttpStatus.BAD_REQUEST); + } + + final TourData firstTour = new TourData(firstTourBegin, firstTourEnd); + final TourData secondTour = new TourData(secondTourBegin, secondTourEnd); + + this.contrl.saveTours(firstTour, secondTour); + return new ResponseEntity<>("Sucess", HttpStatus.OK); + } + @PostMapping(path = "/config/courses", consumes = { "multipart/form-data" }) @PreAuthorize("hasRole('ROLE_ADMIN')") @ApiOperation("Imports data to system. To call you need to provide ADMIN token") diff --git a/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java index edee516..44275c9 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java @@ -5,6 +5,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.junit.jupiter.api.Assertions.assertTrue; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import java.io.InputStream; import java.sql.Date; @@ -37,6 +38,7 @@ public class ConfigControllerTest extends AbstractControllerTest { private static final String FILE_NAME = "Zajecia.xlsx"; private static final String CONFIG_ENDPOINT = "/api/v1/configurator/config"; private static final String 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 FIRST_TOUR_START = "firstTourBegin"; private static final String FIRST_TOUR_END = "firstTourEnd"; @@ -259,7 +261,7 @@ public class ConfigControllerTest extends AbstractControllerTest { } @Test - public void shouldDeniedForCoursesDueToWrongRole() throws Exception { + public void shouldDenyForCoursesDueToWrongRole() throws Exception { final String mail = "shouldReturnOKAuthorizedForCourses@ConfigController.test"; final User usr = this.service.save(new User(null, null, mail, UserRoles.TEST_USER)); @@ -272,4 +274,73 @@ public class ConfigControllerTest extends AbstractControllerTest { .andExpect(status().is4xxClientError()); } -} + + @Test + public void shouldReturnOKAuthorizedForTours() throws Exception { + final String mail = "shouldReturnOKAuthorizedForTours@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(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 + public void shouldFailWithWrongSecondTour() throws Exception { + final String mail = "shouldFailToursWithWrongSecondTour@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(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()); + + } + + @Test + public void shouldFailWithWrongFirstTour() throws Exception { + final String mail = "shouldFailWithWrongFirstTour@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(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()); + + } + + @Test + public void shouldFailWithWrongSecondTourBegin() throws Exception { + final String mail = "shouldFailWithWrongSecondTourBegin@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(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()); + + } + + @Test + public void shouldDenyForTours() throws Exception { + final String mail = "shouldDenyForTours@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(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()); + + } +} \ No newline at end of file