Hendrik Jungnitsch
2022-09-07 ba63e9aac75a3e8e59ba00dc2a03bdf0a9433cd2
src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise07Test.java
@@ -1,23 +1,35 @@
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
@@ -35,10 +47,43 @@
   @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 {