Hendrik Jungnitsch
2022-09-06 9220f7f3b82834e68fb1af23f0266e23d3a50952
exercise
5 Dateien hinzugefügt
208 ■■■■■ Geänderte Dateien
src/main/java/de/gedoplan/seminar/jpa/exercise/common/GeneratedIntegerIdEntity.java 39 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/MaintenanceDepartment.java 27 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/repository/MaintenanceDepartmentRepository.java 9 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/rest/MaintenanceDepartmentResource.java 61 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise05Test.java 72 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/common/GeneratedIntegerIdEntity.java
Neue Datei
@@ -0,0 +1,39 @@
package de.gedoplan.seminar.jpa.exercise.common;
import java.util.Objects;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class GeneratedIntegerIdEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    public Integer getId() {
        return id;
    }
    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        GeneratedIntegerIdEntity other = (GeneratedIntegerIdEntity) obj;
        return Objects.equals(id, other.id);
    }
}
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/MaintenanceDepartment.java
Neue Datei
@@ -0,0 +1,27 @@
package de.gedoplan.seminar.jpa.exercise.domain;
import javax.persistence.Entity;
import javax.persistence.Table;
import de.gedoplan.seminar.jpa.exercise.common.GeneratedIntegerIdEntity;
@Entity
@Table(name = MaintenanceDepartment.TABLE_NAME)
public class MaintenanceDepartment extends GeneratedIntegerIdEntity {
  public static final String TABLE_NAME = "JPA_MAINTENANCE_DEPT";
  public static final String TABLE_NAME_HIGHWAYS = "JPA_MAINTENANCE_DEPT_HIGHWAY";
  private String name;
  protected MaintenanceDepartment() {
  }
  public MaintenanceDepartment(String name, Highway... highways) {
    this.name = name;
  }
  public String getName() {
    return this.name;
  }
}
src/main/java/de/gedoplan/seminar/jpa/exercise/repository/MaintenanceDepartmentRepository.java
Neue Datei
@@ -0,0 +1,9 @@
package de.gedoplan.seminar.jpa.exercise.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import de.gedoplan.seminar.jpa.exercise.domain.MaintenanceDepartment;
public interface MaintenanceDepartmentRepository extends JpaRepository<MaintenanceDepartment, Integer> {
}
src/main/java/de/gedoplan/seminar/jpa/exercise/rest/MaintenanceDepartmentResource.java
Neue Datei
@@ -0,0 +1,61 @@
package de.gedoplan.seminar.jpa.exercise.rest;
import java.util.List;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
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 de.gedoplan.seminar.jpa.exercise.domain.MaintenanceDepartment;
import de.gedoplan.seminar.jpa.exercise.repository.MaintenanceDepartmentRepository;
@RequestMapping(path = "/mdeps", produces = MediaType.APPLICATION_JSON_VALUE)
@RestController
public class MaintenanceDepartmentResource {
    @Autowired
    Logger logger;
    @Autowired
    MaintenanceDepartmentRepository maintenanceDepartmentRepository;
    @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
    public void insert(@RequestBody MaintenanceDepartment maintenanceDepartment) {
        this.logger.debug("----- insert -----");
        this.maintenanceDepartmentRepository.save(maintenanceDepartment);
        this.logger.debug("Inserted: " + maintenanceDepartment);
    }
    /**
     * Exercise JPA_BASICS_05: Find all entries.
     */
    @GetMapping
    public List<MaintenanceDepartment> findAll() {
        this.logger.debug("----- findAll -----");
        List<MaintenanceDepartment> maintenanceDepartments = maintenanceDepartmentRepository.findAll();
        this.logger.debug("Gefunden: " + maintenanceDepartments);
        return maintenanceDepartments;
    }
    /**
     * Exercise JPA_BASICS_06: Find by highway name.
     */
    @GetMapping("findByHighwayName")
    public List<MaintenanceDepartment> findByHighwayName(@RequestParam("name") String highwayName) {
        this.logger.debug("----- findByHighwayName -----");
        List<MaintenanceDepartment> maintenanceDepartments = List.of(); // this.highwayRepository.
        this.logger.debug(highwayName + ": " + maintenanceDepartments);
        return maintenanceDepartments;
    }
}
src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise05Test.java
Neue Datei
@@ -0,0 +1,72 @@
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.result.MockMvcResultMatchers.jsonPath;
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.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 de.gedoplan.seminar.jpa.exercise.domain.Highway;
import de.gedoplan.seminar.jpa.exercise.domain.MaintenanceDepartment;
@TestMethodOrder(MethodOrderer.MethodName.class)
@AutoConfigureMockMvc
@SpringBootTest
public class Exercise05Test {
    @Autowired
    MockMvc mockMvc;
    @Autowired
    ObjectMapper objectMapper;
    @ParameterizedTest
    @MethodSource("getTestData")
    public void test01_insert(String maintenanceDepartmentName, List<Integer> highwayIds) throws JsonProcessingException, Exception {
        Highway[] highways = highwayIds.stream().map(this::loadHighway).toArray(Highway[]::new);
        MaintenanceDepartment maintenanceDepartment = new MaintenanceDepartment(maintenanceDepartmentName, highways);
        mockMvc.perform(post("/mdeps")
                .contentType(MediaType.APPLICATION_JSON)
                .content(objectMapper.writeValueAsString(maintenanceDepartment)))
            .andExpect(status().isOk());
    }
    @Test
    void test02_checkFindAll(Integer highwayId, Integer countJunctions) throws Exception {
        mockMvc.perform(get("/mdeps",highwayId))
            .andExpect(jsonPath("$[?(@.name=='Kamen')].highways.size()",is(2)))
            .andExpect(jsonPath("$[?(@.name=='Bielefeld')].highways.size()",is(2)));
    }
    private Highway loadHighway(Integer id) {
        try {
            return objectMapper.readValue(mockMvc.perform(get("/highways/{id}", id)).andExpect(status().isOk())
                    .andReturn().getResponse().getContentAsString(), Highway.class);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    private static Stream<Arguments> getTestData() {
        return Stream.of(arguments("Kamen", List.of(4610, 4711)), arguments("Bielefeld", List.of(4711, 4812)));
    }
}