package de.gedoplan.seminar.sbt.sbtrestexercise; import de.gedoplan.seminar.sbt.sbtrestexercise.domain.Person; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.reactive.function.client.WebClient; import java.util.List; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class PersonenResourceTest { @LocalServerPort private int port; private WebClient client; @BeforeEach public void init() { client = WebClient.create("http://localhost:"+port+"/personen"); } @Test public void testGetPersonen() { List personen = client.get() .retrieve().bodyToFlux(Person.class) .collectList().block(); System.out.printf("Found %d talks:\n", personen.size()); personen.forEach(talk -> System.out.println(" "+talk)); } @Test public void testGetPersonById() { Person person = client.get() .uri(ub -> ub.path("/{id}").build(1)) .retrieve().bodyToMono(Person.class) .block(); System.out.println(person); } @Test public void testCreateTalk() { Person person = new Person("Duck","Donald"); ResponseEntity response = client.post() .contentType(MediaType.APPLICATION_JSON) .bodyValue(person) .retrieve() .toEntity(String.class) .block(); HttpStatus httpStatus = HttpStatus.resolve(response.getStatusCode().value()); System.out.printf("Response status: %03d %s\n", httpStatus.value(), httpStatus.getReasonPhrase()); String message = switch (httpStatus) { case CREATED -> "URI: %s\n".formatted(response.getHeaders().getLocation()); case INTERNAL_SERVER_ERROR -> response.getBody(); default -> ""; }; System.out.println(message); } }