CtrlK
BlogDocsLog inGet started
Tessl Logo

giuseppe-trisciuoglio/developer-kit

Comprehensive developer toolkit providing reusable skills for Java/Spring Boot, TypeScript/NestJS/React/Next.js, Python, PHP, AWS CloudFormation, AI/RAG, DevOps, and more.

90

Quality

90%

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Risky

Do not use without reviewing

This version of the tile failed moderation
Moderation pipeline encountered an internal error
Overview
Quality
Evals
Security
Files

advanced-examples.mdplugins/developer-kit-java/skills/unit-test-wiremock-rest-api/references/

WireMock Advanced Examples

Additional patterns for complex WireMock testing scenarios.

Error Scenario Testing (4xx/5xx)

@Test
void shouldHandleNotFoundError() {
  wireMock.stubFor(get(urlEqualTo("/api/users/999"))
    .willReturn(aResponse()
      .withStatus(404)
      .withBody("{\"error\":\"User not found\"}")));

  ApiClient client = new ApiClient(wireMock.getRuntimeInfo().getHttpBaseUrl());

  assertThatThrownBy(() -> client.getUser(999))
    .isInstanceOf(UserNotFoundException.class)
    .hasMessageContaining("User not found");
}

@Test
void shouldHandleServerError() {
  wireMock.stubFor(get(urlEqualTo("/api/data"))
    .willReturn(aResponse()
      .withStatus(500)
      .withBody("{\"error\":\"Internal server error\"}")));

  ApiClient client = new ApiClient(wireMock.getRuntimeInfo().getHttpBaseUrl());

  assertThatThrownBy(() -> client.fetchData())
    .isInstanceOf(ServerErrorException.class);
}

Request Body Verification

@Test
void shouldVerifyRequestBody() {
  wireMock.stubFor(post(urlEqualTo("/api/users"))
    .willReturn(aResponse()
      .withStatus(201)
      .withBody("{\"id\":123,\"name\":\"Alice\"}")));

  ApiClient client = new ApiClient(wireMock.getRuntimeInfo().getHttpBaseUrl());
  UserResponse response = client.createUser("Alice");

  assertThat(response.getId()).isEqualTo(123);

  wireMock.verify(postRequestedFor(urlEqualTo("/api/users"))
    .withRequestBody(matchingJsonPath("$.name", equalTo("Alice")))
    .withHeader("Content-Type", containing("application/json")));
}

Timeout Simulation

@Test
void shouldHandleTimeout() {
  wireMock.stubFor(get(urlEqualTo("/api/slow"))
    .willReturn(aResponse()
      .withFixedDelay(5000)
      .withStatus(200)));

  // Configure client timeout < 5000ms
  assertThatThrownBy(() -> client.fetchSlowEndpoint())
    .isInstanceOf(SocketTimeoutException.class);
}

Partial Response Matching

@Test
void shouldMatchPartialRequestBody() {
  wireMock.stubFor(post(urlEqualTo("/api/orders"))
    .withRequestBody(matchingJsonPath("$.items[*]", equalTo("[1,2,3]")))
    .willReturn(aResponse()
      .withStatus(201)));

  ApiClient client = new ApiClient(wireMock.getRuntimeInfo().getHttpBaseUrl());
  client.createOrder(List.of(1, 2, 3));

  wireMock.verify(postRequestedFor(urlEqualTo("/api/orders")));
}

Scenarios (Stateful Behavior)

@Test
void shouldSupportStatefulScenarios() {
  wireMock.stubFor(get(urlEqualTo("/api/status"))
    .inScenario("OrderWorkflow")
    .whenScenarioStateIs(STARTED)
    .willSetStateTo("PROCESSING")
    .willReturn(aResponse()
      .withStatus(202)
      .withBody("{\"status\":\"processing\"}")));

  wireMock.stubFor(get(urlEqualTo("/api/status"))
    .inScenario("OrderWorkflow")
    .whenScenarioStateIs("PROCESSING")
    .willSetStateTo("COMPLETED")
    .willReturn(aResponse()
      .withStatus(200)
      .withBody("{\"status\":\"completed\"}")));

  // First call
  client.getOrderStatus();
  wireMock.verify(getRequestedFor(urlEqualTo("/api/status"))
    .inScenario("OrderWorkflow"));

  // Second call
  client.getOrderStatus();
  wireMock.verify(getRequestedFor(urlEqualTo("/api/status")));
}

plugins

developer-kit-java

skills

unit-test-wiremock-rest-api

README.md

CHANGELOG.md

context7.json

CONTRIBUTING.md

README_CN.md

README_ES.md

README_IT.md

README.md

tessl.json

tile.json