Skip to content

Commit fde03c1

Browse files
committed
Add HTTP contract tests to order-service-restapi
Migrate api-gateway HTTP contracts from ftgo-order-service-contracts to order-service-restapi/src/contractTest/. This completes the contract test migration for Order Service. Co-authored by Claude Code
1 parent bd7ed30 commit fde03c1

4 files changed

Lines changed: 99 additions & 0 deletions

File tree

ftgo-order-service/order-service-restapi/build.gradle

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
plugins {
22
id 'io.eventuate.plugins.gradle.testing.integration-tests'
3+
id 'org.springframework.cloud.contract' version "$springCloudContractDependenciesVersion"
4+
}
5+
6+
sourceSets {
7+
contractTest {
8+
java {
9+
srcDir 'src/contractTest/java'
10+
}
11+
resources {
12+
srcDir 'src/contractTest/resources'
13+
}
14+
}
315
}
416

517
dependencies {
@@ -16,4 +28,26 @@ dependencies {
1628
integrationTestImplementation(platform("org.springframework.cloud:spring-cloud-contract-dependencies:$springCloudContractDependenciesVersion"))
1729
integrationTestImplementation 'org.springframework.cloud:spring-cloud-contract-stub-runner'
1830
integrationTestImplementation testFixtures(project(':order-service-domain'))
31+
32+
contractTestImplementation project(':order-service-domain')
33+
contractTestImplementation project(':order-service-persistence')
34+
contractTestImplementation testFixtures(project(':order-service-domain'))
35+
contractTestImplementation 'org.springframework.boot:spring-boot-starter-test'
36+
contractTestImplementation 'org.springframework.cloud:spring-cloud-starter-contract-verifier'
37+
contractTestImplementation 'io.rest-assured:spring-mock-mvc'
38+
contractTestImplementation 'io.eventuate.common:eventuate-common-json-mapper'
39+
}
40+
41+
contracts {
42+
testFramework = org.springframework.cloud.contract.verifier.config.TestFramework.JUNIT5
43+
contractsDslDir = file("${projectDir}/src/contractTest/resources/contracts")
44+
baseClassForTests = "net.chrisrichardson.ftgo.orderservice.contracts.HttpBase"
45+
}
46+
47+
contractTest {
48+
useJUnitPlatform()
49+
}
50+
51+
tasks.named('processContractTestResources') {
52+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
1953
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package net.chrisrichardson.ftgo.orderservice.contracts;
2+
3+
import io.eventuate.common.json.mapper.JSonMapper;
4+
import io.restassured.module.mockmvc.RestAssuredMockMvc;
5+
import net.chrisrichardson.ftgo.common.CommonJsonMapperInitializer;
6+
import net.chrisrichardson.ftgo.orderservice.OrderDetailsMother;
7+
import net.chrisrichardson.ftgo.orderservice.domain.OrderRepository;
8+
import net.chrisrichardson.ftgo.orderservice.domain.OrderService;
9+
import net.chrisrichardson.ftgo.orderservice.web.OrderController;
10+
import org.junit.jupiter.api.BeforeEach;
11+
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
12+
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
13+
import org.springframework.test.web.servlet.setup.StandaloneMockMvcBuilder;
14+
15+
import java.util.Optional;
16+
17+
import static java.util.Optional.empty;
18+
import static org.mockito.Mockito.mock;
19+
import static org.mockito.Mockito.when;
20+
21+
public abstract class HttpBase {
22+
23+
private StandaloneMockMvcBuilder controllers(Object... controllers) {
24+
CommonJsonMapperInitializer.registerMoneyModule();
25+
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(JSonMapper.objectMapper);
26+
return MockMvcBuilders.standaloneSetup(controllers).setMessageConverters(converter);
27+
}
28+
29+
@BeforeEach
30+
public void setup() {
31+
OrderService orderService = mock(OrderService.class);
32+
OrderRepository orderRepository = mock(OrderRepository.class);
33+
OrderController orderController = new OrderController(orderService, orderRepository);
34+
35+
when(orderRepository.findById(OrderDetailsMother.ORDER_ID)).thenReturn(Optional.of(OrderDetailsMother.CHICKEN_VINDALOO_ORDER));
36+
when(orderRepository.findById(555L)).thenReturn(empty());
37+
RestAssuredMockMvc.standaloneSetup(controllers(orderController));
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package contracts.http
2+
3+
org.springframework.cloud.contract.spec.Contract.make {
4+
request {
5+
method 'GET'
6+
url '/orders/555'
7+
}
8+
response {
9+
status 404
10+
}
11+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package contracts.http
2+
3+
org.springframework.cloud.contract.spec.Contract.make {
4+
request {
5+
method 'GET'
6+
url '/orders/99'
7+
}
8+
response {
9+
status 200
10+
headers {
11+
header('Content-Type': 'application/json')
12+
}
13+
body('''{"orderId" : 99, "state" : "APPROVAL_PENDING", "orderTotal" : "61.70"}''')
14+
}
15+
}

0 commit comments

Comments
 (0)