Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;


@SpringBootTest
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Testcontainers
class AvroTestApplicationTests {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
class TodoTest {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request;

@SpringBootTest
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
class TodoTest {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package community.flock.wirespec.integration.spring.java.application;

import community.flock.wirespec.integration.spring.java.configuration.EnableWirespec;
import community.flock.wirespec.integration.spring.java.configuration.EnableWirespecController;
import community.flock.wirespec.integration.spring.java.configuration.EnableWirespecWebClient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableWirespec
@EnableWirespecController
@EnableWirespecWebClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.web.reactive.function.client.WebClient;

Expand All @@ -14,8 +15,8 @@ public Configuration() {
}

@Bean("wirespecSpringWebClient")
public WebClient webClientForWirespec() {
public WebClient webClientForWirespec(@Value("${server.port}") int port) {
log.info("Creating custom webClient");
return WebClient.create("http://localhost:8080");
return WebClient.create("http://localhost:" + port);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package community.flock.wirespec.integration.spring.java.it.client;

import community.flock.wirespec.integration.spring.java.application.Application;
import community.flock.wirespec.integration.spring.java.generated.endpoint.*;
import community.flock.wirespec.integration.spring.java.generated.model.ApiResponse;
import community.flock.wirespec.integration.spring.java.generated.model.Pet;
import community.flock.wirespec.integration.spring.java.generated.model.UploadFileRequestBody;
import community.flock.wirespec.integration.spring.java.generated.model.UploadFileRequestBodyJson;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;

import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, classes = {Application.class, WirespecPetstoreWebClient.class})
@EnableConfigurationProperties
public class WebClientIntegrationTest {

@Autowired
private WirespecPetstoreWebClient wirespecPetstoreWebClient;

@Test
public void crudWebClientIntegrationTest() throws ExecutionException, InterruptedException {
Pet pet = new Pet(
Optional.of(1L),
"Dog",
Optional.empty(),
List.of(),
Optional.empty(),
Optional.empty()
);

AddPet.Response<?> addPetResponse = wirespecPetstoreWebClient.addPet(new AddPet.Request(pet)).get();
assertEquals(new AddPet.Response200(Optional.of(100), pet), addPetResponse);

Pet updatedPet = new Pet(
pet.id(),
"Cat",
pet.category(),
pet.photoUrls(),
pet.tags(),
pet.status()
);
UpdatePet.Response<?> updatePetResponse = wirespecPetstoreWebClient.updatePet(new UpdatePet.Request(updatedPet)).get();
assertEquals(new UpdatePet.Response200(updatedPet), updatePetResponse);

GetPetById.Response<?> getPetResponse = wirespecPetstoreWebClient.getPetById(new GetPetById.Request(pet.id().orElseThrow())).get();
assertEquals(new GetPetById.Response200(updatedPet), getPetResponse);

DeletePet.Response<?> deletePetResponse = wirespecPetstoreWebClient.deletePet(new DeletePet.Request(pet.id().get(), Optional.empty())).get();
assertEquals(new DeletePet.Response400(), deletePetResponse);
}

@Test
public void queryParameters() throws ExecutionException, InterruptedException {
FindPetsByTags.Response<?> queryParamResponse = wirespecPetstoreWebClient.findPetsByTags(
new FindPetsByTags.Request(Optional.of(List.of("Smilodon", "Dodo", "Mammoth")))
).get();
assertEquals(new FindPetsByTags.Response200(List.of()), queryParamResponse);
}

@Test
public void multipartFormData() throws ExecutionException, InterruptedException {
UploadFile.Request request = new UploadFile.Request(
1L,
Optional.of("metadata"),
new UploadFileRequestBody(
Optional.of("metadata"),
Optional.of("data".getBytes()),
Optional.of(new UploadFileRequestBodyJson(Optional.of("bar")))
)
);
UploadFile.Response<?> response = wirespecPetstoreWebClient.uploadFile(request).get();
assertEquals(
new UploadFile.Response200(new ApiResponse(Optional.of(200), Optional.of("type"), Optional.of("metadata"))),
response
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package community.flock.wirespec.integration.spring.java.it.client;

import community.flock.wirespec.integration.spring.java.client.WirespecWebClient;
import community.flock.wirespec.integration.spring.java.generated.endpoint.AddPet;
import community.flock.wirespec.integration.spring.java.generated.endpoint.DeletePet;
import community.flock.wirespec.integration.spring.java.generated.endpoint.FindPetsByTags;
import community.flock.wirespec.integration.spring.java.generated.endpoint.GetPetById;
import community.flock.wirespec.integration.spring.java.generated.endpoint.UpdatePet;
import community.flock.wirespec.integration.spring.java.generated.endpoint.UploadFile;
import org.springframework.stereotype.Component;

import java.util.concurrent.CompletableFuture;

@Component
public class WirespecPetstoreWebClient implements
AddPet.Handler,
UpdatePet.Handler,
GetPetById.Handler,
DeletePet.Handler,
FindPetsByTags.Handler,
UploadFile.Handler {

private final WirespecWebClient wirespecWebClient;

public WirespecPetstoreWebClient(WirespecWebClient wirespecWebClient) {
this.wirespecWebClient = wirespecWebClient;
}

@Override
public CompletableFuture<GetPetById.Response<?>> getPetById(GetPetById.Request request) {
return wirespecWebClient.send(request);
}

@Override
public CompletableFuture<AddPet.Response<?>> addPet(AddPet.Request request) {
return wirespecWebClient.send(request);
}

@Override
public CompletableFuture<UpdatePet.Response<?>> updatePet(UpdatePet.Request request) {
return wirespecWebClient.send(request);
}

@Override
public CompletableFuture<DeletePet.Response<?>> deletePet(DeletePet.Request request) {
return wirespecWebClient.send(request);
}

@Override
public CompletableFuture<FindPetsByTags.Response<?>> findPetsByTags(FindPetsByTags.Request request) {
return wirespecWebClient.send(request);
}

@Override
public CompletableFuture<UploadFile.Response<?>> uploadFile(UploadFile.Request request) {
return wirespecWebClient.send(request);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest(classes = Application.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, classes = Application.class)
@AutoConfigureMockMvc
public class RestControllerIntegrationTest {

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
import kotlin.test.Test
import kotlin.test.assertContentEquals

@SpringBootTest(classes = [Application::class])
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, classes = [Application::class])
@AutoConfigureMockMvc
class RestControllerIntegrationTest {

Expand Down
5 changes: 4 additions & 1 deletion src/integration/spring/src/jvmTest/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ logging:
level:
root: info

# Random, often unued port name
server.port: 5317

wirespec:
spring:
webclient:
base-url: http://localhost:8080
base-url: http://localhost:${server.port}
Loading