Skip to content

Commit

Permalink
switch to wiremock in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
tnaskali committed Feb 2, 2025
1 parent 539bcf8 commit fe3b8e8
Show file tree
Hide file tree
Showing 21 changed files with 397 additions and 755 deletions.
24 changes: 7 additions & 17 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,6 @@
<artifactId>graphql-java-extended-scalars</artifactId>
<version>22.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>jakarta.el</groupId>
<artifactId>jakarta.el-api</artifactId>
Expand All @@ -94,6 +84,11 @@
<artifactId>springdoc-openapi-starter-webflux-ui</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>org.wiremock.integrations</groupId>
<artifactId>wiremock-spring-boot</artifactId>
<version>3.6.0</version>
</dependency>
</dependencies>
</dependencyManagement>

Expand Down Expand Up @@ -182,13 +177,8 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<groupId>org.wiremock.integrations</groupId>
<artifactId>wiremock-spring-boot</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down
77 changes: 29 additions & 48 deletions src/test/java/li/naska/bgg/resource/AbstractMockServerIT.java
Original file line number Diff line number Diff line change
@@ -1,71 +1,56 @@
package li.naska.bgg.resource;

import static com.github.tomakehurst.wiremock.client.WireMock.*;

import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder;
import java.util.Arrays;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import lombok.SneakyThrows;
import okhttp3.mockwebserver.*;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.wiremock.spring.ConfigureWireMock;
import org.wiremock.spring.EnableWireMock;
import org.wiremock.spring.InjectWireMock;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@DirtiesContext
@EnableWireMock({@ConfigureWireMock(name = "bgg-service", baseUrlProperties = "bgg.web.baseurl-bgs")
})
public abstract class AbstractMockServerIT {

protected static MockWebServer mockWebServer;
@InjectWireMock("bgg-service")
protected WireMockServer wireMock;

@LocalServerPort
protected int port;

@BeforeAll
static void setupMockWebServer() throws Exception {
mockWebServer = new MockWebServer();
mockWebServer.setDispatcher(new QueueDispatcher());
mockWebServer.start();
}

@AfterAll
static void teardownMockWebServer() throws Exception {
mockWebServer.shutdown();
}

@DynamicPropertySource
static void registerProperties(DynamicPropertyRegistry registry) {
registry.add("bgg.web.baseurl-bgs", () -> mockWebServer.url("/").url().toString());
registry.add("bgg.web.baseurl-geekdo", () -> mockWebServer.url("/").url().toString());
}

protected void enqueueXml(int responseCode, String mockResponseBody) {
enqueue(new MockResponse()
.setResponseCode(responseCode)
.addHeader(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_XML)
.setBody(mockResponseBody));
enqueue(aResponse()
.withStatus(responseCode)
.withHeader(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_XML_VALUE)
.withBody(mockResponseBody));
}

protected void enqueueJson(int responseCode, String mockResponseBody) {
enqueue(new MockResponse()
.setResponseCode(responseCode)
.addHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
.setBody(mockResponseBody));
enqueue(aResponse()
.withStatus(responseCode)
.withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.withBody(mockResponseBody));
}

protected void enqueueHtml(int responseCode, String mockResponseBody) {
enqueue(new MockResponse()
.setResponseCode(responseCode)
.addHeader(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_HTML)
.setBody(mockResponseBody));
enqueue(aResponse()
.withStatus(responseCode)
.withHeader(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_HTML_VALUE)
.withBody(mockResponseBody));
}

protected void enqueue(MockResponse... responses) {
mockWebServer.setDispatcher(new QueueDispatcher());
Arrays.stream(responses).forEach(mockWebServer::enqueue);
protected void enqueue(ResponseDefinitionBuilder... responses) {
Arrays.stream(responses)
.forEach(response -> wireMock.stubFor(get(anyUrl()).willReturn(response)));
}

@SneakyThrows
Expand All @@ -75,11 +60,7 @@ protected String readFileContent(String fileName) {
.readAllBytes());
}

protected RecordedRequest takeRequest() {
try {
return mockWebServer.takeRequest(100, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
return null;
}
protected void verify(int count, RequestPatternBuilder requestPatternBuilder) {
wireMock.verify(count, requestPatternBuilder);
}
}
43 changes: 16 additions & 27 deletions src/test/java/li/naska/bgg/resource/v1/BoardgameResourceV1IT.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
package li.naska.bgg.resource.v1;

import static org.assertj.core.api.Assertions.assertThat;
import static com.github.tomakehurst.wiremock.client.WireMock.*;

import jakarta.annotation.PostConstruct;
import java.nio.charset.StandardCharsets;
import java.util.function.Function;
import java.util.function.Supplier;
import li.naska.bgg.resource.AbstractMockServerIT;
import okhttp3.mockwebserver.RecordedRequest;
import org.assertj.core.util.TriFunction;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.util.LinkedMultiValueMap;
Expand Down Expand Up @@ -109,12 +107,9 @@ class Then {

private WebTestClient.ResponseSpec result;

private RecordedRequest recordedRequest;

@BeforeEach
public void setup() {
result = test.get();
recordedRequest = takeRequest();
}

@Test
Expand All @@ -126,7 +121,7 @@ void should_1() {
@Test
@DisplayName("should not forward request")
void should_2() {
assertThat(recordedRequest).isNull();
verify(0, getRequestedFor(anyUrl()));
}
}
}
Expand All @@ -152,24 +147,21 @@ class Then {

private WebTestClient.ResponseSpec result;

private RecordedRequest recordedRequest;

@BeforeEach
public void setup() {
result = test.get();
recordedRequest = takeRequest();
}

@Test
@DisplayName("should forward request")
void should_1() {
assertThat(recordedRequest).isNotNull();
assertThat(recordedRequest.getMethod()).isEqualTo(HttpMethod.GET.name());
assertThat(recordedRequest.getHeader(HttpHeaders.ACCEPT))
.isEqualTo(MediaType.APPLICATION_XML_VALUE);
assertThat(recordedRequest.getHeader(HttpHeaders.ACCEPT_CHARSET))
.isEqualTo(StandardCharsets.UTF_8.displayName().toLowerCase());
assertThat(recordedRequest.getPath()).isEqualTo("/xmlapi/boardgame/71317");
verify(
1,
getRequestedFor(urlEqualTo("/xmlapi/boardgame/71317"))
.withHeader(HttpHeaders.ACCEPT, equalTo(MediaType.APPLICATION_XML_VALUE))
.withHeader(
HttpHeaders.ACCEPT_CHARSET,
equalTo(StandardCharsets.UTF_8.displayName().toLowerCase())));
}

@Test
Expand Down Expand Up @@ -199,24 +191,21 @@ class Then {

private WebTestClient.ResponseSpec result;

private RecordedRequest recordedRequest;

@BeforeEach
public void setup() {
result = test.get();
recordedRequest = takeRequest();
}

@Test
@DisplayName("should forward request")
void should_1() {
assertThat(recordedRequest).isNotNull();
assertThat(recordedRequest.getMethod()).isEqualTo(HttpMethod.GET.name());
assertThat(recordedRequest.getHeader(HttpHeaders.ACCEPT))
.isEqualTo(MediaType.APPLICATION_XML_VALUE);
assertThat(recordedRequest.getHeader(HttpHeaders.ACCEPT_CHARSET))
.isEqualTo(StandardCharsets.UTF_8.displayName().toLowerCase());
assertThat(recordedRequest.getPath()).isEqualTo("/xmlapi/boardgame/71317");
verify(
1,
getRequestedFor(urlEqualTo("/xmlapi/boardgame/71317"))
.withHeader(HttpHeaders.ACCEPT, equalTo(MediaType.APPLICATION_XML_VALUE))
.withHeader(
HttpHeaders.ACCEPT_CHARSET,
equalTo(StandardCharsets.UTF_8.displayName().toLowerCase())));
}

@Test
Expand Down
44 changes: 17 additions & 27 deletions src/test/java/li/naska/bgg/resource/v1/CompanyResourceV1IT.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
package li.naska.bgg.resource.v1;

import static org.assertj.core.api.Assertions.assertThat;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;

import jakarta.annotation.PostConstruct;
import java.nio.charset.StandardCharsets;
import java.util.function.Function;
import java.util.function.Supplier;
import li.naska.bgg.resource.AbstractMockServerIT;
import okhttp3.mockwebserver.RecordedRequest;
import org.assertj.core.util.TriFunction;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.util.LinkedMultiValueMap;
Expand Down Expand Up @@ -108,12 +107,9 @@ class Then {

private WebTestClient.ResponseSpec result;

private RecordedRequest recordedRequest;

@BeforeEach
public void setup() {
result = test.get();
recordedRequest = takeRequest();
}

@Test
Expand All @@ -125,7 +121,7 @@ void should_1() {
@Test
@DisplayName("should not forward request")
void should_2() {
assertThat(recordedRequest).isNull();
verify(0, getRequestedFor(anyUrl()));
}
}
}
Expand All @@ -151,24 +147,21 @@ class Then {

private WebTestClient.ResponseSpec result;

private RecordedRequest recordedRequest;

@BeforeEach
public void setup() {
result = test.get();
recordedRequest = takeRequest();
}

@Test
@DisplayName("should forward request")
void should_1() {
assertThat(recordedRequest).isNotNull();
assertThat(recordedRequest.getMethod()).isEqualTo(HttpMethod.GET.name());
assertThat(recordedRequest.getHeader(HttpHeaders.ACCEPT))
.isEqualTo(MediaType.APPLICATION_XML_VALUE);
assertThat(recordedRequest.getHeader(HttpHeaders.ACCEPT_CHARSET))
.isEqualTo(StandardCharsets.UTF_8.displayName().toLowerCase());
assertThat(recordedRequest.getPath()).isEqualTo("/xmlapi/company/22222");
verify(
1,
getRequestedFor(urlEqualTo("/xmlapi/company/22222"))
.withHeader(HttpHeaders.ACCEPT, equalTo(MediaType.APPLICATION_XML_VALUE))
.withHeader(
HttpHeaders.ACCEPT_CHARSET,
equalTo(StandardCharsets.UTF_8.displayName().toLowerCase())));
}

@Test
Expand Down Expand Up @@ -198,24 +191,21 @@ class Then {

private WebTestClient.ResponseSpec result;

private RecordedRequest recordedRequest;

@BeforeEach
public void setup() {
result = test.get();
recordedRequest = takeRequest();
}

@Test
@DisplayName("should forward request")
void should_1() {
assertThat(recordedRequest).isNotNull();
assertThat(recordedRequest.getMethod()).isEqualTo(HttpMethod.GET.name());
assertThat(recordedRequest.getHeader(HttpHeaders.ACCEPT))
.isEqualTo(MediaType.APPLICATION_XML_VALUE);
assertThat(recordedRequest.getHeader(HttpHeaders.ACCEPT_CHARSET))
.isEqualTo(StandardCharsets.UTF_8.displayName().toLowerCase());
assertThat(recordedRequest.getPath()).isEqualTo("/xmlapi/company/22222");
verify(
1,
getRequestedFor(urlEqualTo("/xmlapi/company/22222"))
.withHeader(HttpHeaders.ACCEPT, equalTo(MediaType.APPLICATION_XML_VALUE))
.withHeader(
HttpHeaders.ACCEPT_CHARSET,
equalTo(StandardCharsets.UTF_8.displayName().toLowerCase())));
}

@Test
Expand Down
Loading

0 comments on commit fe3b8e8

Please sign in to comment.