@Test public void createAndBind() throws Exception { testBindFoo("foo", this.testMethod.annotPresent(ModelAttribute.class).arg(Foo.class), value -> { assertEquals(Foo.class, value.getClass()); return (Foo) value; }); }
@Test public void createAndBindToSingle() throws Exception { MethodParameter parameter = this.testMethod .annotPresent(ModelAttribute.class).arg(Single.class, Foo.class); testBindFoo("fooSingle", parameter, single -> { assertTrue(single.getClass().getName(), single instanceof Single); Object value = ((Single<?>) single).toBlocking().value(); assertEquals(Foo.class, value.getClass()); return (Foo) value; }); }
@Test public void resolveMultiValueMapArgument() throws Exception { MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(MultiValueMap.class); ServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/path?foo=bar&foo=baz")); Object result= resolve(param, exchange); assertTrue(result instanceof MultiValueMap); assertEquals(Collections.singletonMap("foo", Arrays.asList("bar", "baz")), result); }
@Test public void validationErrorToSingle() throws Exception { MethodParameter parameter = this.testMethod .annotPresent(ModelAttribute.class).arg(Single.class, Foo.class); testValidationError(parameter, resolvedArgumentMono -> { Object value = resolvedArgumentMono.block(Duration.ofSeconds(5)); assertNotNull(value); assertTrue(value instanceof Single); return Mono.from(RxReactiveStreams.toPublisher((Single<?>) value)); }); }
@Test(expected = MultipartException.class) public void isMultipartRequest() throws Exception { MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(MultipartFile.class); resolver.resolveArgument(param, null, webRequest, null); fail("Expected exception: request is not a multipart request"); }
@Test(expected = MissingServletRequestParameterException.class) public void missingRequestParam() throws Exception { MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(String[].class); resolver.resolveArgument(param, null, webRequest, null); fail("Expected exception"); }
@Test(expected = MultipartException.class) public void noMultipartContent() throws Exception { request.setMethod("POST"); MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(MultipartFile.class); resolver.resolveArgument(param, null, webRequest, null); fail("Expected exception: no multipart content"); }
@Test @SuppressWarnings("rawtypes") public void missingOptionalParamArray() throws Exception { ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer(); initializer.setConversionService(new DefaultConversionService()); WebDataBinderFactory binderFactory = new DefaultDataBinderFactory(initializer); MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(Optional.class, Integer[].class); Object result = resolver.resolveArgument(param, null, webRequest, binderFactory); assertEquals(Optional.empty(), result); result = resolver.resolveArgument(param, null, webRequest, binderFactory); assertEquals(Optional.class, result.getClass()); assertFalse(((Optional) result).isPresent()); }
@Test @SuppressWarnings("rawtypes") public void missingOptionalParamList() throws Exception { ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer(); initializer.setConversionService(new DefaultConversionService()); WebDataBinderFactory binderFactory = new DefaultDataBinderFactory(initializer); MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(Optional.class, List.class); Object result = resolver.resolveArgument(param, null, webRequest, binderFactory); assertEquals(Optional.empty(), result); result = resolver.resolveArgument(param, null, webRequest, binderFactory); assertEquals(Optional.class, result.getClass()); assertFalse(((Optional) result).isPresent()); }
@Test public void optionalMultipartFileWithoutMultipartRequest() throws Exception { ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer(); initializer.setConversionService(new DefaultConversionService()); WebDataBinderFactory binderFactory = new DefaultDataBinderFactory(initializer); MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(Optional.class, MultipartFile.class); Object actual = resolver.resolveArgument(param, null, webRequest, binderFactory); assertEquals(Optional.empty(), actual); }
@Test public void resolveStringArray() throws Exception { String[] expected = new String[] {"foo", "bar"}; request.addParameter("name", expected); MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(String[].class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertTrue(result instanceof String[]); assertArrayEquals("Invalid result", expected, (String[]) result); }
@Test(expected = MissingServletRequestPartException.class) public void missingMultipartFile() throws Exception { request.setMethod("POST"); request.setContentType("multipart/form-data"); MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(MultipartFile.class); resolver.resolveArgument(param, null, webRequest, null); fail("Expected exception: no such part found"); }
@Test public void resolveMultipartFile() throws Exception { MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); MultipartFile expected = new MockMultipartFile("mfile", "Hello World".getBytes()); request.addFile(expected); webRequest = new ServletWebRequest(request); MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(MultipartFile.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertTrue(result instanceof MultipartFile); assertEquals("Invalid result", expected, result); }
@Test public void missingOptionalMultipartFile() throws Exception { ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer(); initializer.setConversionService(new DefaultConversionService()); WebDataBinderFactory binderFactory = new DefaultDataBinderFactory(initializer); request.setMethod("POST"); request.setContentType("multipart/form-data"); MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(Optional.class, MultipartFile.class); Object actual = resolver.resolveArgument(param, null, webRequest, binderFactory); assertEquals(Optional.empty(), actual); }
@Test public void resolvePart() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); MockPart expected = new MockPart("pfile", "Hello World".getBytes()); request.setMethod("POST"); request.setContentType("multipart/form-data"); request.addPart(expected); webRequest = new ServletWebRequest(request); MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(Part.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertTrue(result instanceof Part); assertEquals("Invalid result", expected, result); }
@Test public void resolveStringArray() { MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(String[].class); MockServerHttpRequest request = MockServerHttpRequest.get("/path?name=foo&name=bar").build(); Object result = resolve(param, MockServerWebExchange.from(request)); assertTrue(result instanceof String[]); assertArrayEquals(new String[] {"foo", "bar"}, (String[]) result); }
@Test public void supports() throws Exception { ModelAttributeMethodArgumentResolver resolver = new ModelAttributeMethodArgumentResolver(ReactiveAdapterRegistry.getSharedInstance(), false); MethodParameter param = this.testMethod.annotPresent(ModelAttribute.class).arg(Foo.class); assertTrue(resolver.supportsParameter(param)); param = this.testMethod.annotPresent(ModelAttribute.class).arg(Mono.class, Foo.class); assertTrue(resolver.supportsParameter(param)); param = this.testMethod.annotNotPresent(ModelAttribute.class).arg(Foo.class); assertFalse(resolver.supportsParameter(param)); param = this.testMethod.annotNotPresent(ModelAttribute.class).arg(Mono.class, Foo.class); assertFalse(resolver.supportsParameter(param)); }
@Test public void missingRequestParam() { MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/")); MethodParameter param = this.testMethod.annotPresent(RequestParam.class).arg(String[].class); Mono<Object> mono = this.resolver.resolveArgument(param, this.bindContext, exchange); StepVerifier.create(mono) .expectNextCount(0) .expectError(ServerWebInputException.class) .verify(); }
@Test public void supportsParameter() throws Exception { assertTrue(this.resolver.supportsParameter( this.testMethod.annot(requestAttribute().noName()).arg(Foo.class))); // SPR-16158 assertTrue(this.resolver.supportsParameter( this.testMethod.annotPresent(RequestAttribute.class).arg(Mono.class, Foo.class))); assertFalse(this.resolver.supportsParameter( this.testMethod.annotNotPresent(RequestAttribute.class).arg())); }
@Test public void supportsParameter() { MethodParameter param = this.testMethod.annot(requestParam().noName()).arg(Map.class, String.class, String.class); assertTrue(resolver.supportsParameter(param)); param = this.testMethod.annotPresent(RequestParam.class).arg(MultiValueMap.class, String.class, String.class); assertTrue(resolver.supportsParameter(param)); param = this.testMethod.annot(requestParam().name("name")).arg(Map.class, String.class, String.class); assertFalse(resolver.supportsParameter(param)); param = this.testMethod.annotNotPresent(RequestParam.class).arg(Map.class, String.class, String.class); assertFalse(resolver.supportsParameter(param)); }