Hendrik Jungnitsch
2022-09-05 4aefdfdd2b3a9864ef488b76b5f9c69ab4c23b9f
exercise
3 Dateien geändert
145 ■■■■■ Geänderte Dateien
src/main/java/de/gedoplan/seminar/jpa/exercise/rest/HighwayResource.java 1 ●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/rest/JunctionResource.java 6 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise04Test.java 138 ●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/rest/HighwayResource.java
@@ -11,7 +11,6 @@
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ResponseStatusException;
src/main/java/de/gedoplan/seminar/jpa/exercise/rest/JunctionResource.java
@@ -9,6 +9,7 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -54,4 +55,9 @@
    junction.ifPresent(j -> this.logger.debug(name+": "+j));
    return junction.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
  }
  @PutMapping("/{junctionId}/assignToHighway/{highwayId}")
  public void assignToHighway(@PathVariable Integer junctionId, @PathVariable Integer highwayId) {
  }
}
src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise04Test.java
@@ -1,16 +1,15 @@
package de.gedoplan.seminar.jpa.exercise;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.jupiter.params.provider.Arguments.arguments;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.stream.Stream;
import org.hamcrest.MatcherAssert;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
@@ -18,13 +17,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.gedoplan.seminar.jpa.exercise.domain.Highway;
import de.gedoplan.seminar.jpa.exercise.domain.Junction;
import com.jayway.jsonpath.JsonPath;
@TestMethodOrder(MethodOrderer.MethodName.class)
@AutoConfigureMockMvc
@@ -33,108 +28,51 @@
    @Autowired
    MockMvc mockMvc;
    @Autowired
    private ObjectMapper objectMapper;
    @Test
    void test01_joinJunctionsToHighways() throws Exception {
        /*
         * Read highways and junctions from the database and associate them.
         * Do not use the objects from TestData directly, because they are transient!
         */
        /*
         * Connect highway 4610 with junctions "Schwerte", "Westhofener Kreuz" and "Hagen-Nord"
         */
        Highway highwayA1_DO_K = loadHighway(4610);
        Junction junctionSchwerte = loadJunction("Schwerte");
//        highwayA1_DO_K.getJunctions().add(junctionSchwerte);
//        junctionSchwerte.setHighway(highwayA1_DO_K);
        Junction junctionWesthofen = loadJunction("Westhofener Kreuz");
//        highwayA1_DO_K.getJunctions().add(junctionWesthofen);
//        junctionWesthofen.setHighway(highwayA1_DO_K);
        Junction junctionHagenNord = loadJunction("Hagen-Nord");
//        highwayA1_DO_K.getJunctions().add(junctionHagenNord);
//        junctionHagenNord.setHighway(highwayA1_DO_K);
        updateJunctions(junctionSchwerte,junctionWesthofen,junctionHagenNord);
        /*
         * Connect highway 4711 with junctions "Bielefeld-Ost", "Ostwestfalen/Lippe" and "Herford/Bad Salzuflen"
         */
        Highway highwayA2_DO_H = loadHighway(4711);
        Junction junctionBielefeldOst = loadJunction("Bielefeld-Ost");
//        highwayA2_DO_H.getJunctions().add(junctionBielefeldOst);
//        junctionBielefeldOst.setHighway(highwayA2_DO_H);
        Junction junctionOWL = loadJunction("Ostwestfalen/Lippe");
//        highwayA2_DO_H.getJunctions().add(junctionOWL);
//        junctionOWL.setHighway(highwayA2_DO_H);
        Junction junctionSennestadt = loadJunction("Herford/Bad Salzuflen");
//        highwayA2_DO_H.getJunctions().add(junctionSennestadt);
//        junctionSennestadt.setHighway(highwayA2_DO_H);
        updateJunctions(junctionBielefeldOst,junctionOWL,junctionSennestadt);
        /*
         * Connect highway 4812 with junction "Paderborn-Zentrum"
         */
        Highway highwayA33_BI_PB = loadHighway(4812);
        Junction junctionStukenbrock = loadJunction("Paderborn-Zentrum");
//        highwayA33_BI_PB.getJunctions().add(junctionStukenbrock);
//        junctionStukenbrock.setHighway(highwayA33_BI_PB);
        updateJunctions(junctionStukenbrock);
    @ParameterizedTest
    @MethodSource("getTestDataJunction")
    void test01_joinJunctionsToHighways(String junctionName, Integer highwayId) throws Exception {
        Integer junctionId = loadJunctionId(junctionName);
        mockMvc.perform(
                put("/junctions/{junctionId}/assignToHighway/{highwayId}",junctionId,highwayId))
                .andExpect(status().isOk());
    }
    
    @ParameterizedTest
    @MethodSource("getTestData")
    void test2_findById(String junctionName, String highwayName) throws Exception {
    @MethodSource("getTestDataJunction")
    void test02_checkHighwayAssignedToJunction(String junctionName, Integer highwayId) throws Exception {
        mockMvc.perform(get("/junctions/loadByName").param("name", junctionName))
                .andExpect(jsonPath("$.highway.name").value(highwayName));
                .andExpect(jsonPath("$.highway.id").value(highwayId.toString()));
    }
    @ParameterizedTest
    @MethodSource("getTestDataHighway")
    void test03_checkJunctionsAssignedToHighway(Integer highwayId, Integer countJunctions) throws Exception {
        mockMvc.perform(get("/highways/{id}",highwayId))
            .andExpect(jsonPath("$.name",is(countJunctions)));
    }
    
    
    private void updateJunctions(Junction... junctions) {
        Stream.of(junctions).forEach(junction ->
            {
                try {
                    mockMvc.perform(
                        post("/junctions").contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(junction)))
                        .andExpect(status().isOk());
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
    private Integer loadJunctionId(String name) throws Exception {
        return JsonPath.parse(mockMvc.perform(get("/junctions/loadByName").param("name", name)).andExpect(status().isOk())
                .andReturn().getResponse().getContentAsString()).read("$.id", Integer.class);
    }
    
    private Highway loadHighway(Integer id) throws Exception {
        return objectMapper.readValue(mockMvc.perform(get("/highways/{id}", id)).andExpect(status().isOk())
                .andReturn().getResponse().getContentAsString(), Highway.class);
    }
    private Junction loadJunction(String name) throws Exception {
        return objectMapper.readValue(mockMvc.perform(get("/junctions/loadByName").param("name", name)).andExpect(status().isOk())
                .andReturn().getResponse().getContentAsString(), Junction.class);
    }
    private static Stream<Arguments> getTestData() {
    private static Stream<Arguments> getTestDataJunction() {
        return Stream.of(
                arguments("Schwerte","A2"),
                arguments("Westhofener Kreuz", "A1"),
                arguments("Hagen-Nord", "A1"),
                arguments("Bielefeld-Ost", "A2"),
                arguments("Ostwestfalen/Lippe", "A2"),
                arguments("Herford/Bad Salzuflen", "A2"),
                arguments("Paderborn-Zentrum", "A33"));
                arguments("Schwerte", 4610),
                arguments("Westhofener Kreuz", 4610),
                arguments("Hagen-Nord", 4610),
                arguments("Bielefeld-Ost", 4711),
                arguments("Ostwestfalen/Lippe", 4711),
                arguments("Herford/Bad Salzuflen", 4711),
                arguments("Paderborn-Zentrum", 4812));
    }
    private static Stream<Arguments> getTestDataHighway() {
        return Stream.of(
                arguments(4610,3),
                arguments(4711,3),
                arguments(4812,1));
    }
}