private void testGetAttributeFromModel(String expectedAttrName, MethodParameter param) throws Exception { Object target = new TestBean(); this.container.addAttribute(expectedAttrName, target); WebDataBinder dataBinder = new WebRequestDataBinder(target); WebDataBinderFactory factory = mock(WebDataBinderFactory.class); given(factory.createBinder(this.request, target, expectedAttrName)).willReturn(dataBinder); this.processor.resolveArgument(param, this.container, this.request, factory); verify(factory).createBinder(this.request, target, expectedAttrName); }
@Test public void resolveArgumentBindingDisabled() throws Exception { String name = "noBindAttr"; Object target = new TestBean(); this.container.addAttribute(name, target); StubRequestDataBinder dataBinder = new StubRequestDataBinder(target, name); WebDataBinderFactory factory = mock(WebDataBinderFactory.class); given(factory.createBinder(this.request, target, name)).willReturn(dataBinder); this.processor.resolveArgument(this.paramBindingDisabledAttr, this.container, this.request, factory); assertFalse(dataBinder.isBindInvoked()); assertTrue(dataBinder.isValidateInvoked()); }
@Test public void resolveArgumentValidation() throws Exception { String name = "attrName"; Object target = new TestBean(); this.container.addAttribute(name, target); StubRequestDataBinder dataBinder = new StubRequestDataBinder(target, name); WebDataBinderFactory factory = mock(WebDataBinderFactory.class); given(factory.createBinder(this.request, target, name)).willReturn(dataBinder); this.processor.resolveArgument(this.paramNamedValidModelAttr, this.container, this.request, factory); assertTrue(dataBinder.isBindInvoked()); assertTrue(dataBinder.isValidateInvoked()); }
@Test // SPR-9378 public void resolveArgumentOrdering() throws Exception { String name = "testBean"; Object testBean = new TestBean(name); this.container.addAttribute(name, testBean); this.container.addAttribute(BindingResult.MODEL_KEY_PREFIX + name, testBean); Object anotherTestBean = new TestBean(); this.container.addAttribute("anotherTestBean", anotherTestBean); StubRequestDataBinder dataBinder = new StubRequestDataBinder(testBean, name); WebDataBinderFactory binderFactory = mock(WebDataBinderFactory.class); given(binderFactory.createBinder(this.request, testBean, name)).willReturn(dataBinder); this.processor.resolveArgument(this.paramModelAttr, this.container, this.request, binderFactory); Object[] values = this.container.getModel().values().toArray(); assertSame("Resolved attribute should be updated to be last", testBean, values[1]); assertSame("BindingResult of resolved attr should be last", dataBinder.getBindingResult(), values[2]); }
@Test(expected = BindException.class) public void resolveArgumentBindException() throws Exception { String name = "testBean"; Object target = new TestBean(); this.container.getModel().addAttribute(target); StubRequestDataBinder dataBinder = new StubRequestDataBinder(target, name); dataBinder.getBindingResult().reject("error"); WebDataBinderFactory binderFactory = mock(WebDataBinderFactory.class); given(binderFactory.createBinder(this.request, target, name)).willReturn(dataBinder); this.processor.resolveArgument(this.paramNonSimpleType, this.container, this.request, binderFactory); verify(binderFactory).createBinder(this.request, target, name); }
@Test public void resolveArgumentViaDefaultConstructor() throws Exception { WebDataBinder dataBinder = new WebRequestDataBinder(null); WebDataBinderFactory factory = mock(WebDataBinderFactory.class); given(factory.createBinder(any(), notNull(), eq("attrName"))).willReturn(dataBinder); this.processor.resolveArgument(this.paramNamedValidModelAttr, this.container, this.request, factory); verify(factory).createBinder(any(), notNull(), eq("attrName")); }
@Test public void resolveArgumentBindingDisabledPreviously() throws Exception { String name = "attrName"; Object target = new TestBean(); this.container.addAttribute(name, target); // Declare binding disabled (e.g. via @ModelAttribute method) this.container.setBindingDisabled(name); StubRequestDataBinder dataBinder = new StubRequestDataBinder(target, name); WebDataBinderFactory factory = mock(WebDataBinderFactory.class); given(factory.createBinder(this.request, target, name)).willReturn(dataBinder); this.processor.resolveArgument(this.paramNamedValidModelAttr, this.container, this.request, factory); assertFalse(dataBinder.isBindInvoked()); assertTrue(dataBinder.isValidateInvoked()); }