| | |
| | | package de.gedoplan.seminar.jpa.exercise; |
| | | |
| | | 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.result.MockMvcResultMatchers.status; |
| | | |
| | | import java.util.List; |
| | | import java.util.stream.Stream; |
| | | |
| | | 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; |
| | | import org.junit.jupiter.params.provider.MethodSource; |
| | | import org.slf4j.Logger; |
| | | 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.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.fasterxml.jackson.databind.type.CollectionType; |
| | | |
| | | import de.gedoplan.seminar.jpa.exercise.domain.Highway; |
| | | import de.gedoplan.seminar.jpa.exercise.domain.Junction; |
| | | import de.gedoplan.seminar.jpa.exercise.domain.TrafficJam; |
| | | import de.gedoplan.seminar.jpa.exercise.domain.TrafficJamCause; |
| | | import de.gedoplan.seminar.jpa.exercise.domain.TrafficJamKind; |
| | | |
| | | @TestMethodOrder(MethodOrderer.MethodName.class) |
| | | @AutoConfigureMockMvc |
| | |
| | | @Autowired |
| | | private Logger logger; |
| | | |
| | | @ParameterizedTest |
| | | @MethodSource("getTestData") |
| | | void test01_insert(String junctionStart, String junctionEnd, Integer length, TrafficJamKind kind, |
| | | TrafficJamCause cause) throws Exception { |
| | | |
| | | TrafficJam trafficJam = new TrafficJam(loadJunctionId(junctionStart), loadJunctionId(junctionEnd), length, kind, |
| | | cause); |
| | | mockMvc.perform(post("/trafficjams").contentType(MediaType.APPLICATION_JSON) |
| | | .content(mapper.writeValueAsString(trafficJam))).andExpect(status().isOk()); |
| | | } |
| | | |
| | | @Test |
| | | void test02_outputTrafficJams() throws Exception { |
| | | parse(mockMvc.perform(get("/trafficjams")).andExpect(status().isOk()).andReturn().getResponse() |
| | | .getContentAsString(), TrafficJam.class) |
| | | .stream().map(this::toMessage).forEach(logger::info); |
| | | |
| | | } |
| | | |
| | | // Test01 insert |
| | | |
| | | // Test02 output |
| | | private String toMessage(TrafficJam trafficJam) { |
| | | Junction start = trafficJam.getStart(); |
| | | Highway highway = start.getHighway(); |
| | | Junction end = trafficJam.getEnd(); |
| | | return String.format(MESSAGE_FORMAT, |
| | | highway.getName(), highway.getOrigin(), highway.getDestination(), |
| | | trafficJam.getLength(), trafficJam.getKind(), |
| | | start.getName(), end.getName(), |
| | | trafficJam.getCause()); |
| | | } |
| | | |
| | | private static Stream<Arguments> getTestData() { |
| | | return Stream.of( |
| | | arguments("Bielefeld-Ost", "Ostwestfalen/Lippe", 2, TrafficJamKind.CONGESTION, |
| | | TrafficJamCause.ACCIDENT), |
| | | arguments("Westhofener Kreuz", "Schwerte", 8, TrafficJamKind.SLOW_MOVING_TRAFFIC, |
| | | TrafficJamCause.ROAD_WORKS)); |
| | | } |
| | | |
| | | |
| | | private Junction loadJunctionId(String name) throws Exception { |