|
16 | 16 |
|
17 | 17 | package org.springframework.web.reactive.function.server;
|
18 | 18 |
|
| 19 | +import java.time.Duration; |
19 | 20 | import java.time.ZonedDateTime;
|
20 | 21 | import java.time.format.DateTimeFormatter;
|
21 | 22 | import java.time.temporal.ChronoUnit;
|
|
37 | 38 | import org.springframework.util.LinkedMultiValueMap;
|
38 | 39 | import org.springframework.util.MultiValueMap;
|
39 | 40 | import org.springframework.web.reactive.result.view.AbstractView;
|
| 41 | +import org.springframework.web.reactive.result.view.RedirectView; |
40 | 42 | import org.springframework.web.reactive.result.view.View;
|
41 | 43 | import org.springframework.web.reactive.result.view.ViewResolver;
|
42 | 44 | import org.springframework.web.reactive.result.view.ViewResolverSupport;
|
|
47 | 49 |
|
48 | 50 | import static org.assertj.core.api.Assertions.assertThat;
|
49 | 51 | import static org.mockito.ArgumentMatchers.any;
|
| 52 | +import static org.mockito.ArgumentMatchers.eq; |
50 | 53 | import static org.mockito.BDDMockito.given;
|
51 | 54 | import static org.mockito.Mockito.mock;
|
| 55 | +import static org.mockito.Mockito.verify; |
52 | 56 |
|
53 | 57 | /**
|
54 | 58 | * @author Arjen Poutsma
|
@@ -155,6 +159,41 @@ public void render() {
|
155 | 159 | .verify();
|
156 | 160 | }
|
157 | 161 |
|
| 162 | + @Test |
| 163 | + public void writeTo() { |
| 164 | + Map<String, Object> model = Collections.singletonMap("foo", "bar"); |
| 165 | + RenderingResponse renderingResponse = RenderingResponse.create("view") |
| 166 | + .status(HttpStatus.FOUND) |
| 167 | + .modelAttributes(model) |
| 168 | + .build().block(Duration.of(5, ChronoUnit.MILLIS)); |
| 169 | + assertThat(renderingResponse).isNotNull(); |
| 170 | + |
| 171 | + MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("http://localhost")); |
| 172 | + MediaType contentType = MediaType.APPLICATION_PDF; |
| 173 | + exchange.getResponse().getHeaders().setContentType(contentType); |
| 174 | + |
| 175 | + ViewResolver viewResolver = mock(ViewResolver.class); |
| 176 | + RedirectView view = mock(RedirectView.class); |
| 177 | + given(viewResolver.resolveViewName(eq("view"), any())).willReturn(Mono.just(view)); |
| 178 | + given(view.render(model, contentType, exchange)).willReturn(Mono.empty()); |
| 179 | + |
| 180 | + List<ViewResolver> viewResolvers = new ArrayList<>(); |
| 181 | + viewResolvers.add(viewResolver); |
| 182 | + |
| 183 | + HandlerStrategies mockConfig = mock(HandlerStrategies.class); |
| 184 | + given(mockConfig.viewResolvers()).willReturn(viewResolvers); |
| 185 | + |
| 186 | + ServerResponse.Context context = mock(ServerResponse.Context.class); |
| 187 | + given(context.viewResolvers()).willReturn(viewResolvers); |
| 188 | + |
| 189 | + Mono<Void> result = renderingResponse.writeTo(exchange, context); |
| 190 | + StepVerifier.create(result) |
| 191 | + .expectComplete() |
| 192 | + .verify(); |
| 193 | + |
| 194 | + verify(view).setStatusCode(HttpStatus.FOUND); |
| 195 | + } |
| 196 | + |
158 | 197 | @Test
|
159 | 198 | public void defaultContentType() {
|
160 | 199 | Mono<RenderingResponse> result = RenderingResponse.create("view").build();
|
|
0 commit comments