@Override public boolean test(ServerRequest request) { Map<String, Object> oldAttributes = new HashMap<>(request.attributes()); boolean result = !this.delegate.test(request); if (!result) { restoreAttributes(request, oldAttributes); } return result; }
@Test public void or() { RequestPredicate predicate1 = request -> true; RequestPredicate predicate2 = request -> false; RequestPredicate predicate3 = request -> false; MockServerRequest request = MockServerRequest.builder().build(); assertTrue(predicate1.or(predicate2).test(request)); assertTrue(predicate2.or(predicate1).test(request)); assertFalse(predicate2.or(predicate3).test(request)); }
@Test public void queryParam() { MockServerRequest request = MockServerRequest.builder().queryParam("foo", "bar").build(); RequestPredicate predicate = RequestPredicates.queryParam("foo", s -> s.equals("bar")); assertTrue(predicate.test(request)); predicate = RequestPredicates.queryParam("foo", s -> s.equals("baz")); assertFalse(predicate.test(request)); }
@Test public void and() { RequestPredicate predicate1 = request -> true; RequestPredicate predicate2 = request -> true; RequestPredicate predicate3 = request -> false; MockServerRequest request = MockServerRequest.builder().build(); assertTrue(predicate1.and(predicate2).test(request)); assertTrue(predicate2.and(predicate1).test(request)); assertFalse(predicate1.and(predicate3).test(request)); }
@Test public void negate() { RequestPredicate predicate = request -> false; RequestPredicate negated = predicate.negate(); MockServerRequest mockRequest = MockServerRequest.builder().build(); assertTrue(negated.test(mockRequest)); predicate = request -> true; negated = predicate.negate(); assertFalse(negated.test(mockRequest)); }
@Test public void headers() { String name = "MyHeader"; String value = "MyValue"; RequestPredicate predicate = RequestPredicates.headers( headers -> headers.header(name).equals(Collections.singletonList(value))); MockServerRequest request = MockServerRequest.builder().header(name, value).build(); assertTrue(predicate.test(request)); request = MockServerRequest.builder().build(); assertFalse(predicate.test(request)); }
@Test public void pathEncoded() { URI uri = URI.create("http://localhost/foo%20bar"); RequestPredicate predicate = RequestPredicates.path("/foo bar"); MockServerRequest request = MockServerRequest.builder().uri(uri).build(); assertTrue(predicate.test(request)); request = MockServerRequest.builder().build(); assertFalse(predicate.test(request)); }
@Test public void negateSucceed() { RequestPredicate predicate = new AddAttributePredicate(false, "predicate", "baz").negate(); boolean result = predicate.test(this.request); assertTrue(result); assertEquals("bar", this.request.attributes().get("exchange")); assertEquals("baz", this.request.attributes().get("predicate")); }
@Test public void negateFail() { RequestPredicate predicate = new AddAttributePredicate(true, "predicate", "baz").negate(); boolean result = predicate.test(this.request); assertFalse(result); assertEquals("bar", this.request.attributes().get("exchange")); assertFalse(this.request.attributes().containsKey("baz")); }
@Test public void methods() { RequestPredicate predicate = RequestPredicates.methods(HttpMethod.GET, HttpMethod.HEAD); MockServerRequest request = MockServerRequest.builder().method(HttpMethod.GET).build(); assertTrue(predicate.test(request)); request = MockServerRequest.builder().method(HttpMethod.HEAD).build(); assertTrue(predicate.test(request)); request = MockServerRequest.builder().method(HttpMethod.POST).build(); assertFalse(predicate.test(request)); }
@Test public void orLeftSucceed() { RequestPredicate left = new AddAttributePredicate(true, "left", "baz"); RequestPredicate right = new AddAttributePredicate(false, "right", "qux"); RequestPredicate predicate = new RequestPredicates.OrRequestPredicate(left, right); boolean result = predicate.test(this.request); assertTrue(result); assertEquals("bar", this.request.attributes().get("exchange")); assertEquals("baz", this.request.attributes().get("left")); assertFalse(this.request.attributes().containsKey("right")); }
@Test public void andRightSucceed() { RequestPredicate left = new AddAttributePredicate(false, "left", "bar"); RequestPredicate right = new AddAttributePredicate(true, "right", "qux"); RequestPredicate predicate = new RequestPredicates.AndRequestPredicate(left, right); boolean result = predicate.test(this.request); assertFalse(result); assertEquals("bar", this.request.attributes().get("exchange")); assertFalse(this.request.attributes().containsKey("left")); assertFalse(this.request.attributes().containsKey("right")); }
@Test public void orBothSucceed() { RequestPredicate left = new AddAttributePredicate(true, "left", "baz"); RequestPredicate right = new AddAttributePredicate(true, "right", "qux"); RequestPredicate predicate = new RequestPredicates.OrRequestPredicate(left, right); boolean result = predicate.test(this.request); assertTrue(result); assertEquals("bar", this.request.attributes().get("exchange")); assertEquals("baz", this.request.attributes().get("left")); assertFalse(this.request.attributes().containsKey("right")); }
@Test public void andLeftSucceed() { RequestPredicate left = new AddAttributePredicate(true, "left", "bar"); RequestPredicate right = new AddAttributePredicate(false, "right", "qux"); RequestPredicate predicate = new RequestPredicates.AndRequestPredicate(left, right); boolean result = predicate.test(this.request); assertFalse(result); assertEquals("bar", this.request.attributes().get("exchange")); assertFalse(this.request.attributes().containsKey("left")); assertFalse(this.request.attributes().containsKey("right")); }
@Test public void andBothFail() { RequestPredicate left = new AddAttributePredicate(false, "left", "bar"); RequestPredicate right = new AddAttributePredicate(false, "right", "qux"); RequestPredicate predicate = new RequestPredicates.AndRequestPredicate(left, right); boolean result = predicate.test(this.request); assertFalse(result); assertEquals("bar", this.request.attributes().get("exchange")); assertFalse(this.request.attributes().containsKey("left")); assertFalse(this.request.attributes().containsKey("right")); }
@Test public void all() { RequestPredicate predicate = RequestPredicates.all(); MockServerRequest request = MockServerRequest.builder().build(); assertTrue(predicate.test(request)); }
@Test public void orRightSucceed() { RequestPredicate left = new AddAttributePredicate(false, "left", "baz"); RequestPredicate right = new AddAttributePredicate(true, "right", "qux"); RequestPredicate predicate = new RequestPredicates.OrRequestPredicate(left, right); boolean result = predicate.test(this.request); assertTrue(result); assertEquals("bar", this.request.attributes().get("exchange")); assertFalse(this.request.attributes().containsKey("left")); assertEquals("qux", this.request.attributes().get("right")); }
@Test public void orBothFail() { RequestPredicate left = new AddAttributePredicate(false, "left", "baz"); RequestPredicate right = new AddAttributePredicate(false, "right", "qux"); RequestPredicate predicate = new RequestPredicates.OrRequestPredicate(left, right); boolean result = predicate.test(this.request); assertFalse(result); assertEquals("bar", this.request.attributes().get("exchange")); assertFalse(this.request.attributes().containsKey("baz")); assertFalse(this.request.attributes().containsKey("quux")); }
@Test public void contentType() { MediaType json = MediaType.APPLICATION_JSON; RequestPredicate predicate = RequestPredicates.contentType(json); MockServerRequest request = MockServerRequest.builder().header("Content-Type", json.toString()).build(); assertTrue(predicate.test(request)); request = MockServerRequest.builder().build(); assertFalse(predicate.test(request)); }
@Test public void accept() { MediaType json = MediaType.APPLICATION_JSON; RequestPredicate predicate = RequestPredicates.accept(json); MockServerRequest request = MockServerRequest.builder().header("Accept", json.toString()).build(); assertTrue(predicate.test(request)); request = MockServerRequest.builder().header("Accept", MediaType.TEXT_XML_VALUE).build(); assertFalse(predicate.test(request)); }