WebClient.mutate() should not impact future .mutate() invocations
Before this commit, when adding filters to a builder obtained via `WebClient.mutate()`, the filters were added both to the original client as well as the mutated builder. This commit fixes that. Issue: SPR-16059
This commit is contained in:
parent
2962f085e5
commit
faa74988c4
|
@ -142,7 +142,7 @@ class DefaultWebClient implements WebClient {
|
|||
|
||||
@Override
|
||||
public Builder mutate() {
|
||||
return this.builder;
|
||||
return new DefaultWebClientBuilder(this.builder);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -31,10 +31,8 @@ import reactor.test.StepVerifier;
|
|||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link DefaultWebClient}.
|
||||
|
@ -136,17 +134,30 @@ public class DefaultWebClientTests {
|
|||
builder.defaultHeader("foo", "bar");
|
||||
builder.defaultCookie("foo", "bar");
|
||||
WebClient client1 = builder.build();
|
||||
|
||||
builder.filter((request, next) -> next.exchange(request));
|
||||
builder.defaultHeader("baz", "qux");
|
||||
builder.defaultCookie("baz", "qux");
|
||||
WebClient client2 = builder.build();
|
||||
|
||||
WebClient.Builder mutatedBuilder = client1.mutate();
|
||||
|
||||
mutatedBuilder.filter((request, next) -> next.exchange(request));
|
||||
mutatedBuilder.defaultHeader("baz", "qux");
|
||||
mutatedBuilder.defaultCookie("baz", "qux");
|
||||
WebClient clientFromMutatedBuilder = mutatedBuilder.build();
|
||||
|
||||
client1.mutate().filters(filters -> assertEquals(1, filters.size()));
|
||||
client1.mutate().defaultHeaders(headers -> assertEquals(1, headers.size()));
|
||||
client1.mutate().defaultCookies(cookies -> assertEquals(1, cookies.size()));
|
||||
|
||||
client2.mutate().filters(filters -> assertEquals(2, filters.size()));
|
||||
client2.mutate().defaultHeaders(headers -> assertEquals(2, headers.size()));
|
||||
client2.mutate().defaultCookies(cookies -> assertEquals(2, cookies.size()));
|
||||
|
||||
clientFromMutatedBuilder.mutate().filters(filters -> assertEquals(2, filters.size()));
|
||||
clientFromMutatedBuilder.mutate().defaultHeaders(headers -> assertEquals(2, headers.size()));
|
||||
clientFromMutatedBuilder.mutate().defaultCookies(cookies -> assertEquals(2, cookies.size()));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
Loading…
Reference in New Issue