diff --git a/src/test/java/cat/udl/eps/softarch/demo/steps/ModifyVisitSteps.java b/src/test/java/cat/udl/eps/softarch/demo/steps/ModifyVisitSteps.java new file mode 100644 index 0000000..3a0b8e3 --- /dev/null +++ b/src/test/java/cat/udl/eps/softarch/demo/steps/ModifyVisitSteps.java @@ -0,0 +1,54 @@ +package cat.udl.eps.softarch.demo.steps; + +import cat.udl.eps.softarch.demo.domain.Advertisement; +import cat.udl.eps.softarch.demo.domain.Visit; +import cat.udl.eps.softarch.demo.repository.AdvertisementRepository; +import cat.udl.eps.softarch.demo.repository.VisitRepository; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MvcResult; + +import java.time.ZonedDateTime; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +public class ModifyVisitSteps { + + @Autowired + private StepDefs stepDefs; + + @Autowired + private VisitRepository visitRepository; + + @Autowired + private AdvertisementRepository advertisementRepository; + + private MvcResult result; + + @When("I modify the visit request to the advertisement with title {string} with new date {string}") + public void iModifyTheVisitRequestToTheAdvertisementWithTitleWithNewDate(String title, String newDate) throws Exception { + Advertisement advertisement = advertisementRepository.findByTitle(title).get(0); + Visit visit = visitRepository.findByAdvertisement(advertisement).get(0); + visit.setVisitDateTime(ZonedDateTime.parse(newDate)); + + result = stepDefs.mockMvc.perform(put("/visits/" + visit.getId()) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"when\": \"" + newDate + "\"}") + .with(AuthenticationStepDefs.authenticate())) + .andDo(print()) + .andExpect(status().isNoContent()) + .andReturn(); + } + + @Then("The visit is successfully modified") + public void theVisitIsSuccessfullyModified() { + assertNotNull(result, "Result should not be null after visit modification"); + Assertions.assertEquals(204, result.getResponse().getStatus(), "Expected HTTP status 200 OK"); + } +} \ No newline at end of file diff --git a/src/test/java/cat/udl/eps/softarch/demo/steps/RequestVisitStepDefs.java b/src/test/java/cat/udl/eps/softarch/demo/steps/RequestVisitStepDefs.java index 6b33c59..55f9b0a 100644 --- a/src/test/java/cat/udl/eps/softarch/demo/steps/RequestVisitStepDefs.java +++ b/src/test/java/cat/udl/eps/softarch/demo/steps/RequestVisitStepDefs.java @@ -8,25 +8,20 @@ import cat.udl.eps.softarch.demo.repository.AdvertisementStatusRepository; import cat.udl.eps.softarch.demo.repository.ApartmentRepository; import cat.udl.eps.softarch.demo.repository.VisitRepository; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; -import org.checkerframework.checker.units.qual.A; import org.junit.jupiter.api.Assertions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; import java.math.BigDecimal; -import java.nio.charset.StandardCharsets; import java.time.ZonedDateTime; -import java.util.Objects; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -57,6 +52,7 @@ public void createAdvertisementStatus(String status) { advertisementStatusRepository.save(advertisementStatus); } + @Given("There is an advertisement with title {string} and address {string}") public void thereIsAnAdvertisementWithTitleAndAddress(String title, String address) { advertisement = new Advertisement(); @@ -83,10 +79,10 @@ public void iRequestAVisitToTheAdvertisementWithTitle(String title) throws Excep Advertisement advertisement; - if(title.equals("Invalid Advertisement")) - advertisement = null; - else { - advertisement = advertisementRepository.findByTitle(title).get(0); + if (title.equals("Invalid Advertisement")) + advertisement = null; + else { + advertisement = advertisementRepository.findByTitle(title).get(0); } String visitDateTime = ZonedDateTime.now().plusDays(30).toString(); @@ -101,7 +97,7 @@ public void iRequestAVisitToTheAdvertisementWithTitle(String title) throws Excep String jsonContent = objectMapper.writeValueAsString(visit); - if(advertisement != null) { + if (advertisement != null) { result = stepDefs.mockMvc.perform(post("/visits") .contentType(MediaType.APPLICATION_JSON) .content(jsonContent) diff --git a/src/test/resources/features/ModifyVisit.feature b/src/test/resources/features/ModifyVisit.feature new file mode 100644 index 0000000..d9277e9 --- /dev/null +++ b/src/test/resources/features/ModifyVisit.feature @@ -0,0 +1,12 @@ +# Created by abdee at 10/11/24 +Feature: Modify Visit + As a user + I want to modify a visit to an advertisement + So that I can change the visit details + + Scenario: Modify visit request + Given There is an advertisement with title "Cozy Loft" and address "Carrer de les Flors 10" + And I login as "demo" with password "password" + And I request a visit to the advertisement with title "Cozy Loft" + When I modify the visit request to the advertisement with title "Cozy Loft" with new date "2025-08-01T10:00:00Z" + Then The visit is successfully modified \ No newline at end of file