Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9770d38

Browse files
author
Rajeev Kumar Singh
committed
WebTestClient tests
1 parent edd333c commit 9770d38

File tree

4 files changed

+82
-5
lines changed

4 files changed

+82
-5
lines changed

‎README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# spring-webclient-webtestclient-demo

‎src/main/java/com/example/webclientdemo/GithubClient.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,12 @@ public Mono<Void> deleteRepository(String owner, String repo) {
8181

8282

8383
private ExchangeFilterFunction logRequest() {
84-
return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
84+
return (clientRequest, next) -> {
8585
logger.info("Request: {} {}", clientRequest.method(), clientRequest.url());
8686
clientRequest.headers()
8787
.forEach((name, values) -> values.forEach(value -> logger.info("{}={}", name, value)));
88-
return Mono.just(clientRequest);
89-
});
88+
return next.exchange(clientRequest);
89+
};
9090
}
9191

9292
}

‎src/main/java/com/example/webclientdemo/payload/RepoRequest.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ public class RepoRequest {
1818
@JsonProperty("private")
1919
private Boolean isPrivate;
2020

21+
22+
public RepoRequest() {
23+
24+
}
25+
26+
public RepoRequest(@NotBlank String name, String description) {
27+
this.name = name;
28+
this.description = description;
29+
}
30+
2131
public String getName() {
2232
return name;
2333
}
Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,82 @@
11
package com.example.webclientdemo;
22

3+
import com.example.webclientdemo.payload.GithubRepo;
4+
import com.example.webclientdemo.payload.RepoRequest;
5+
import org.assertj.core.api.Assertions;
36
import org.junit.Test;
47
import org.junit.runner.RunWith;
8+
import org.springframework.beans.factory.annotation.Autowired;
59
import org.springframework.boot.test.context.SpringBootTest;
10+
import org.springframework.http.MediaType;
611
import org.springframework.test.context.junit4.SpringRunner;
12+
import org.springframework.test.web.reactive.server.WebTestClient;
13+
import reactor.core.publisher.Mono;
14+
715

816
@RunWith(SpringRunner.class)
9-
@SpringBootTest
17+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
1018
public class WebclientDemoApplicationTests {
1119

20+
@Autowired
21+
private WebTestClient webTestClient;
22+
23+
@Test
24+
public void testCreateRepository() {
25+
RepoRequest repoRequest = new RepoRequest("test-webclient-repository", "Repository created for testing WebClient");
26+
27+
webTestClient.post().uri("/api/repos")
28+
.contentType(MediaType.APPLICATION_JSON_UTF8)
29+
.accept(MediaType.APPLICATION_JSON_UTF8)
30+
.body(Mono.just(repoRequest), RepoRequest.class)
31+
.exchange()
32+
.expectStatus().isOk()
33+
.expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
34+
.expectBody()
35+
.jsonPath("$.name").isNotEmpty()
36+
.jsonPath("$.name").isEqualTo("test-webclient-repository");
37+
}
38+
39+
@Test
40+
public void testGetAllRepositories() {
41+
webTestClient.get().uri("/api/repos")
42+
.accept(MediaType.APPLICATION_JSON_UTF8)
43+
.exchange()
44+
.expectStatus().isOk()
45+
.expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
46+
.expectBodyList(GithubRepo.class);
47+
}
48+
1249
@Test
13-
public void contextLoads() {
50+
public void testGetSingleRepository() {
51+
webTestClient.get()
52+
.uri("/api/repos/{repo}", "test-webclient-repository")
53+
.exchange()
54+
.expectStatus().isOk()
55+
.expectBody()
56+
.consumeWith(response ->
57+
Assertions.assertThat(response.getResponseBody()).isNotNull());
1458
}
1559

60+
@Test
61+
public void testEditRepository() {
62+
RepoRequest newRepoDetails = new RepoRequest("updated-webclient-repository", "Updated name and description");
63+
webTestClient.patch()
64+
.uri("/api/repos/{repo}", "test-webclient-repository")
65+
.contentType(MediaType.APPLICATION_JSON_UTF8)
66+
.accept(MediaType.APPLICATION_JSON_UTF8)
67+
.body(Mono.just(newRepoDetails), RepoRequest.class)
68+
.exchange()
69+
.expectStatus().isOk()
70+
.expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
71+
.expectBody()
72+
.jsonPath("$.name").isEqualTo("updated-webclient-repository");
73+
}
74+
75+
@Test
76+
public void testDeleteRepository() {
77+
webTestClient.delete()
78+
.uri("/api/repos/{repo}", "updated-webclient-repository")
79+
.exchange()
80+
.expectStatus().isOk();
81+
}
1682
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /