Skip to content

Commit b3b9dbf

Browse files
committed
update Spring Cloud Contract blog example
1 parent 66a289c commit b3b9dbf

File tree

8 files changed

+59
-44
lines changed

8 files changed

+59
-44
lines changed

consumer-driven-contracts-with-spring-cloud-contract/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ Steps to run this project:
44

55
1. Clone this Git repository
66
2. Navigate to the folder `consumer-driven-contracts-with-spring-cloud-contract`
7-
3. Navigate to the `book-store-server` folder and build the project with `mvn install`
7+
3. Navigate to the `book-store-server` folder and build the project with `mvn install` (yes - `install` is required here)
88
4. Navigate to the `book-store-client` folder and execute `mvn test`. The tests should pass and make use of the `book-store-server` stubs

consumer-driven-contracts-with-spring-cloud-contract/book-store-client/pom.xml

+13-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
3-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2+
<project
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns="http://maven.apache.org/POM/4.0.0"
5+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
46
<modelVersion>4.0.0</modelVersion>
7+
58
<parent>
69
<groupId>org.springframework.boot</groupId>
710
<artifactId>spring-boot-starter-parent</artifactId>
8-
<version>2.3.0.RELEASE</version>
11+
<version>2.4.6</version>
912
<relativePath/> <!-- lookup parent from repository -->
1013
</parent>
14+
1115
<groupId>de.rieckpil.blog</groupId>
1216
<artifactId>book-store-client</artifactId>
1317
<version>0.0.1-SNAPSHOT</version>
@@ -16,7 +20,7 @@
1620

1721
<properties>
1822
<java.version>11</java.version>
19-
<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
23+
<spring-cloud.version>2020.0.2</spring-cloud.version>
2024
</properties>
2125

2226
<dependencies>
@@ -59,6 +63,11 @@
5963
<groupId>org.springframework.boot</groupId>
6064
<artifactId>spring-boot-maven-plugin</artifactId>
6165
</plugin>
66+
<plugin>
67+
<groupId>org.apache.maven.plugins</groupId>
68+
<artifactId>maven-surefire-plugin</artifactId>
69+
<version>3.0.0-M5</version>
70+
</plugin>
6271
</plugins>
6372
</build>
6473

consumer-driven-contracts-with-spring-cloud-contract/book-store-client/src/main/java/de/rieckpil/blog/BookClient.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,29 @@
66
import io.netty.handler.timeout.WriteTimeoutHandler;
77
import org.springframework.http.MediaType;
88
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
9+
import org.springframework.stereotype.Component;
910
import org.springframework.stereotype.Service;
1011
import org.springframework.web.reactive.function.client.WebClient;
1112
import reactor.netty.http.client.HttpClient;
12-
import reactor.netty.tcp.TcpClient;
1313

1414
import javax.annotation.PostConstruct;
1515

16-
@Service
16+
@Component
1717
public class BookClient {
1818

1919
private WebClient webClient;
2020

2121
@PostConstruct
2222
public void setUpWebClient() {
23-
var tcpClient = TcpClient.create()
23+
var httpClient = HttpClient.create()
2424
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 2_000)
2525
.doOnConnected(connection ->
2626
connection.addHandlerLast(new ReadTimeoutHandler(2))
2727
.addHandlerLast(new WriteTimeoutHandler(2)));
2828

2929
this.webClient = WebClient.builder()
3030
.baseUrl("http://localhost:8080")
31-
.clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient)))
31+
.clientConnector(new ReactorClientHttpConnector(httpClient))
3232
.build();
3333
}
3434

consumer-driven-contracts-with-spring-cloud-contract/book-store-client/src/test/java/de/rieckpil/blog/BookClientTest.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,18 @@
99

1010
import static org.junit.jupiter.api.Assertions.assertTrue;
1111

12-
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
13-
@AutoConfigureStubRunner(ids = {"de.rieckpil.blog:book-store-server:+:stubs:8080"}, stubsMode = StubRunnerProperties.StubsMode.LOCAL)
14-
public class BookClientTest {
12+
@SpringBootTest
13+
@AutoConfigureStubRunner(
14+
ids = {"de.rieckpil.blog:book-store-server:+:stubs:8080"},
15+
stubsMode = StubRunnerProperties.StubsMode.LOCAL
16+
)
17+
class BookClientTest {
1518

1619
@Autowired
1720
private BookClient cut;
1821

1922
@Test
20-
public void testContractToBookStoreServer() {
23+
void testContractToBookStoreServer() {
2124

2225
JsonNode result = cut.getAllAvailableBooks();
2326

@@ -32,5 +35,4 @@ public void testContractToBookStoreServer() {
3235
assertTrue(firstBook.get("genre").isTextual());
3336
assertTrue(firstBook.get("title").isTextual());
3437
}
35-
3638
}

consumer-driven-contracts-with-spring-cloud-contract/book-store-client/src/test/java/de/rieckpil/blog/BookStoreClientApplicationTests.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
import org.springframework.boot.test.context.SpringBootTest;
55

66
@SpringBootTest
7-
public class BookStoreClientApplicationTests {
7+
class BookStoreClientApplicationTests {
88

99
@Test
10-
public void contextLoads() {
10+
void contextLoads() {
1111
}
1212

1313
}

consumer-driven-contracts-with-spring-cloud-contract/book-store-server/pom.xml

+20-15
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>org.springframework.boot</groupId>
88
<artifactId>spring-boot-starter-parent</artifactId>
9-
<version>2.3.0.RELEASE</version>
9+
<version>2.4.6</version>
1010
<relativePath/> <!-- lookup parent from repository -->
1111
</parent>
1212

@@ -18,7 +18,7 @@
1818

1919
<properties>
2020
<java.version>11</java.version>
21-
<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
21+
<spring-cloud.version>2020.0.2</spring-cloud.version>
2222
</properties>
2323

2424
<dependencies>
@@ -55,20 +55,25 @@
5555
</dependencies>
5656
</dependencyManagement>
5757

58-
<build>
59-
<plugins>
60-
<plugin>
61-
<groupId>org.springframework.boot</groupId>
62-
<artifactId>spring-boot-maven-plugin</artifactId>
63-
</plugin>
58+
<build>
59+
<plugins>
60+
<plugin>
61+
<groupId>org.springframework.boot</groupId>
62+
<artifactId>spring-boot-maven-plugin</artifactId>
63+
</plugin>
64+
<plugin>
65+
<groupId>org.springframework.cloud</groupId>
66+
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
67+
<version>3.0.2</version>
68+
<extensions>true</extensions>
69+
<configuration>
70+
<baseClassForTests>de.rieckpil.blog.BaseTest</baseClassForTests>
71+
</configuration>
72+
</plugin>
6473
<plugin>
65-
<groupId>org.springframework.cloud</groupId>
66-
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
67-
<version>2.2.2.RELEASE</version>
68-
<extensions>true</extensions>
69-
<configuration>
70-
<baseClassForTests>de.rieckpil.blog.BaseTest</baseClassForTests>
71-
</configuration>
74+
<groupId>org.apache.maven.plugins</groupId>
75+
<artifactId>maven-surefire-plugin</artifactId>
76+
<version>3.0.0-M5</version>
7277
</plugin>
7378
</plugins>
7479
</build>
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
package de.rieckpil.blog;
22

33
import io.restassured.module.mockmvc.RestAssuredMockMvc;
4-
import org.junit.Before;
5-
import org.junit.runner.RunWith;
4+
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.extension.ExtendWith;
66
import org.mockito.Mock;
7-
import org.springframework.test.context.junit4.SpringRunner;
7+
import org.mockito.junit.jupiter.MockitoExtension;
88

99
import java.util.List;
1010

1111
import static org.mockito.Mockito.when;
1212

13-
@RunWith(SpringRunner.class)
13+
@ExtendWith(MockitoExtension.class)
1414
public abstract class BaseTest {
1515

1616
@Mock
1717
private BookService mockedBookService;
1818

19-
@Before
20-
public void setup() {
21-
when(mockedBookService.getBooks()).thenReturn(List.of(new Book("Java 11", "Technology", "42")));
19+
@BeforeEach
20+
void setup() {
21+
when(mockedBookService.getBooks())
22+
.thenReturn(List.of(new Book("Java 11", "Technology", "42")));
23+
2224
RestAssuredMockMvc.standaloneSetup(new BookController(mockedBookService));
2325
}
2426
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package de.rieckpil.blog;
22

3-
import org.junit.Test;
4-
import org.junit.runner.RunWith;
3+
import org.junit.jupiter.api.Test;
54
import org.springframework.boot.test.context.SpringBootTest;
6-
import org.springframework.test.context.junit4.SpringRunner;
75

8-
@RunWith(SpringRunner.class)
96
@SpringBootTest
10-
public class BookStoreServerApplicationTests {
7+
class BookStoreServerApplicationTests {
118

129
@Test
13-
public void contextLoads() {
10+
void contextLoads() {
1411
}
1512

1613
}

0 commit comments

Comments
 (0)