Merge branch '6.2.x'

This commit is contained in:
rstoyanchev
2025-04-25 21:33:03 +01:00
9 changed files with 176 additions and 31 deletions
@@ -16,6 +16,8 @@
package org.springframework.mock.web.server;
import java.security.Principal;
import org.jspecify.annotations.Nullable;
import reactor.core.publisher.Mono;
@@ -40,15 +42,19 @@ import org.springframework.web.server.session.WebSessionManager;
*/
public final class MockServerWebExchange extends DefaultServerWebExchange {
private final Mono<Principal> principalMono;
private MockServerWebExchange(
MockServerHttpRequest request, @Nullable WebSessionManager sessionManager,
@Nullable ApplicationContext applicationContext) {
@Nullable ApplicationContext applicationContext, @Nullable Principal principal) {
super(request, new MockServerHttpResponse(),
sessionManager != null ? sessionManager : new DefaultWebSessionManager(),
ServerCodecConfigurer.create(), new AcceptHeaderLocaleContextResolver(),
applicationContext);
this.principalMono = (principal != null) ? Mono.just(principal) : Mono.empty();
}
@@ -57,6 +63,16 @@ public final class MockServerWebExchange extends DefaultServerWebExchange {
return (MockServerHttpResponse) super.getResponse();
}
/**
* Return the user set via {@link Builder#principal(Principal)}.
* @since 6.2.7
*/
@SuppressWarnings("unchecked")
@Override
public <T extends Principal> Mono<T> getPrincipal() {
return (Mono<T>) this.principalMono;
}
/**
* Create a {@link MockServerWebExchange} from the given mock request.
@@ -107,8 +123,9 @@ public final class MockServerWebExchange extends DefaultServerWebExchange {
private @Nullable WebSessionManager sessionManager;
@Nullable
private ApplicationContext applicationContext;
private @Nullable ApplicationContext applicationContext;
private @Nullable Principal principal;
public Builder(MockServerHttpRequest request) {
this.request = request;
@@ -146,11 +163,22 @@ public final class MockServerWebExchange extends DefaultServerWebExchange {
return this;
}
/**
* Provide a user to associate with the exchange.
* @param principal the principal to use
* @since 6.2.7
*/
public Builder principal(@Nullable Principal principal) {
this.principal = principal;
return this;
}
/**
* Build the {@code MockServerWebExchange} instance.
*/
public MockServerWebExchange build() {
return new MockServerWebExchange(this.request, this.sessionManager, this.applicationContext);
return new MockServerWebExchange(
this.request, this.sessionManager, this.applicationContext, this.principal);
}
}