Selaa lähdekoodia

Add test for ServerRequestCacheWebFilter

Eleftheria Stein 5 vuotta sitten
vanhempi
commit
38979b1b09

+ 91 - 0
web/src/test/java/org/springframework/security/web/server/savedrequest/ServerRequestCacheWebFilterTests.java

@@ -0,0 +1,91 @@
+/*
+ * Copyright 2002-2020 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.security.web.server.savedrequest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
+import org.springframework.mock.web.server.MockServerWebExchange;
+import org.springframework.web.server.ServerWebExchange;
+import org.springframework.web.server.WebFilterChain;
+import reactor.core.publisher.Mono;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+/**
+ * Tests for {@link ServerRequestCacheWebFilter}
+ *
+ * @author Eleftheria Stein
+ */
+@RunWith(MockitoJUnitRunner.class)
+public class ServerRequestCacheWebFilterTests {
+	private ServerRequestCacheWebFilter requestCacheFilter;
+
+	@Mock
+	private WebFilterChain chain;
+
+	@Mock
+	private ServerRequestCache requestCache;
+
+	@Captor
+	private ArgumentCaptor<ServerWebExchange> exchangeCaptor;
+
+	@Before
+	public void setup() {
+		this.requestCacheFilter = new ServerRequestCacheWebFilter();
+		this.requestCacheFilter.setRequestCache(requestCache);
+		when(this.chain.filter(any(ServerWebExchange.class))).thenReturn(Mono.empty());
+	}
+
+	@Test
+	public void filterWhenRequestMatchesThenRequestUpdated() {
+		ServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/"));
+		ServerHttpRequest savedRequest = MockServerHttpRequest.get("/")
+				.header(HttpHeaders.ACCEPT, MediaType.TEXT_HTML.getType()).build();
+		when(this.requestCache.removeMatchingRequest(any())).thenReturn(Mono.just(savedRequest));
+
+		this.requestCacheFilter.filter(exchange, this.chain).block();
+
+		verify(chain).filter(exchangeCaptor.capture());
+		ServerWebExchange updatedExchange = exchangeCaptor.getValue();
+		assertThat(updatedExchange.getRequest()).isEqualTo(savedRequest);
+	}
+
+	@Test
+	public void filterWhenRequestDoesNotMatchThenRequestDoesNotChange() {
+		MockServerHttpRequest initialRequest = MockServerHttpRequest.get("/").build();
+		ServerWebExchange exchange = MockServerWebExchange.from(initialRequest);
+		when(this.requestCache.removeMatchingRequest(any())).thenReturn(Mono.empty());
+
+		this.requestCacheFilter.filter(exchange, this.chain).block();
+
+		verify(chain).filter(exchangeCaptor.capture());
+		ServerWebExchange updatedExchange = exchangeCaptor.getValue();
+		assertThat(updatedExchange.getRequest()).isEqualTo(initialRequest);
+	}
+}