Package org.springframework.webflow.validation

Source Code of org.springframework.webflow.validation.ValidationHelperTests$ErrorsModelValidator

/*
* Copyright 2008-2012 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
*
*      http://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.webflow.validation;

import junit.framework.TestCase;

import org.springframework.binding.expression.support.StaticExpression;
import org.springframework.binding.message.MessageContext;
import org.springframework.binding.validation.ValidationContext;
import org.springframework.context.support.StaticApplicationContext;
import org.springframework.validation.DefaultMessageCodesResolver;
import org.springframework.validation.Errors;
import org.springframework.validation.SmartValidator;
import org.springframework.webflow.engine.Flow;
import org.springframework.webflow.engine.StubViewFactory;
import org.springframework.webflow.engine.Transition;
import org.springframework.webflow.engine.ViewState;
import org.springframework.webflow.engine.support.DefaultTransitionCriteria;
import org.springframework.webflow.test.MockRequestControlContext;

/**
* Unit test for {@link ValidationHelper}
*/
public class ValidationHelperTests extends TestCase {

  private MockRequestControlContext requestContext;

  private String eventId;

  private String modelName;

  private DefaultMessageCodesResolver codesResolver;


  protected void setUp() throws Exception {
    requestContext = new MockRequestControlContext();
    eventId = "userEvent";
    modelName = "model";
    codesResolver = new DefaultMessageCodesResolver();
  }

  public void testValidateWithMessageContext() {
    Object model = new StubModelMessageContext();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null, null, null);
    helper.validate();
    MessageContext messages = requestContext.getMessageContext();
    assertEquals(1, messages.getAllMessages().length);
    assertEquals(1, messages.getMessagesBySource("messagecontext").length);
    assertEquals(0, messages.getMessagesBySource("validationcontext").length);
  }

  public void testValidateWithValidationContext() {
    Object model = new StubModelValidationContext();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    helper.validate();
    MessageContext messages = requestContext.getMessageContext();
    assertEquals(1, messages.getAllMessages().length);
    assertEquals(1, messages.getMessagesBySource("validationcontext").length);
  }

  public void testValidateWithMessageContextForBeanValidator() {
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.registerSingleton("modelValidator", StubModelMessageContext.class);
    ((Flow) requestContext.getActiveFlow()).setApplicationContext(applicationContext);
    ValidationHelper helper = new ValidationHelper(new Object(), requestContext, eventId, modelName, null,
        this.codesResolver, null);
    helper.validate();
    MessageContext messages = requestContext.getMessageContext();
    assertEquals(1, messages.getAllMessages().length);
    assertEquals(1, messages.getMessagesBySource("messagecontext-external").length);
  }

  public void testValidateWithValidationContextForBeanValidator() {
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.registerSingleton("modelValidator", StubModelValidationContext.class);
    ((Flow) requestContext.getActiveFlow()).setApplicationContext(applicationContext);
    ValidationHelper helper = new ValidationHelper(new Object(), requestContext, eventId, modelName, null,
        this.codesResolver, null);
    helper.validate();
    MessageContext messages = requestContext.getMessageContext();
    assertEquals(1, messages.getAllMessages().length);
    assertEquals(1, messages.getMessagesBySource("validationcontext-external").length);
  }

  public void testValidateWithErrorsForBeanValidator() {
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.registerSingleton("modelValidator", StubModelErrors.class);
    ((Flow) requestContext.getActiveFlow()).setApplicationContext(applicationContext);
    ValidationHelper helper = new ValidationHelper(new Object(), requestContext, eventId, modelName, null,
        this.codesResolver, null);
    helper.validate();
    MessageContext messages = requestContext.getMessageContext();
    assertEquals(1, messages.getAllMessages().length);
    assertEquals(1, messages.getMessagesBySource("errors-external").length);
  }

  public void testValidateWithErrorsForBeanValidatorOverridden() {
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.registerSingleton("modelValidator", StubModelErrorsOverridden.class);
    ((Flow) requestContext.getActiveFlow()).setApplicationContext(applicationContext);
    ValidationHelper helper = new ValidationHelper(new Object(), requestContext, eventId, modelName, null,
        this.codesResolver, null);
    helper.validate();
    MessageContext messages = requestContext.getMessageContext();
    assertEquals(1, messages.getAllMessages().length);
    assertEquals(1, messages.getMessagesBySource("validationcontext-external").length);
  }

  public void testStateAndFallbackModelValidationMethodInvoked() {
    Model model = new Model();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state1", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertTrue(model.state1Invoked);
    assertTrue(model.fallbackInvoked);
  }

  public void testFallbackModelValidationMethodInvoked() {
    Model model = new Model();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state2", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertFalse(model.state1Invoked);
    assertTrue(model.fallbackInvoked);
  }

  public void testStateAndFallbackErrorsModelValidationMethodInvoked() {
    ErrorsModel model = new ErrorsModel();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state1", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertTrue(model.state1Invoked);
    assertTrue(model.fallbackInvoked);
  }

  public void testFallbackModelErrorsValidationMethodInvoked() {
    ErrorsModel model = new ErrorsModel();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state2", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertFalse(model.state1Invoked);
    assertTrue(model.fallbackInvoked);
  }

  public void testStateAndFallbackValidatorInvoked() {
    ModelValidator validator = new ModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    Model model = new Model();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state1", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertTrue(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testStateAndFallbackValidatorInvokedForSubclass() {
    ModelValidator validator = new ModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    ExtendedModel model = new ExtendedModel();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state1", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertTrue(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testFallbackValidatorInvoked() {
    ModelValidator validator = new ModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    Model model = new Model();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state2", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertFalse(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testFallbackValidatorInvokedForSubclass() {
    ModelValidator validator = new ModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    ExtendedModel model = new ExtendedModel();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state2", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertFalse(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testStateAndFallbackLegacyValidatorInvoked() {
    LegacyModelValidator validator = new LegacyModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    Model model = new Model();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state1", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertTrue(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testStateAndFallbackLegacyValidatorInvokedForSubclass() {
    LegacyModelValidator validator = new LegacyModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    ExtendedModel model = new ExtendedModel();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state1", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertTrue(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testFallbackLegacyValidatorInvoked() {
    LegacyModelValidator validator = new LegacyModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    Model model = new Model();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state2", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertFalse(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testStateAndFallbackErrorsValidatorInvoked() {
    ErrorsModelValidator validator = new ErrorsModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    Model model = new Model();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state1", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertTrue(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testStateAndFallbackErrorsValidatorInvokedForSubclass() {
    ErrorsModelValidator validator = new ErrorsModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    ExtendedModel model = new ExtendedModel();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state1", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertTrue(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testFallbackErrorsValidatorInvoked() {
    ErrorsModelValidator validator = new ErrorsModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    Model model = new Model();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state2", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertFalse(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testFallbackErrorsValidatorInvokedForSubclass() {
    ErrorsModelValidator validator = new ErrorsModelValidator();
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.getBeanFactory().registerSingleton("modelValidator", validator);
    requestContext.getRootFlow().setApplicationContext(applicationContext);

    Model model = new Model();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null,
        this.codesResolver, null);
    ViewState state1 = new ViewState(requestContext.getRootFlow(), "state2", new StubViewFactory());
    requestContext.setCurrentState(state1);
    helper.validate();
    assertFalse(validator.state1Invoked);
    assertTrue(validator.fallbackInvoked);
  }

  public void testSmartValidatorWithClassHint() {
    ViewState state = new ViewState(requestContext.getRootFlow(), "state2", new StubViewFactory());
    state.getAttributes().put("validationHints", new StaticExpression(new Object[] { Model.State1.class }));
    requestContext.setCurrentState(state);

    LegacyModelValidator validator = new LegacyModelValidator();
    ExtendedModel model = new ExtendedModel();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null, codesResolver, null);
    helper.setValidator(validator);

    helper.validate();

    assertTrue(validator.fallbackInvoked);
    assertTrue(validator.hints.length > 0);
    assertEquals(Model.State1.class, validator.hints[0]);
  }

  public void testSmartValidatorWithHintResolution() {
    ViewState state = new ViewState(requestContext.getRootFlow(), "state2", new StubViewFactory());
    state.getAttributes().put("validationHints", new StaticExpression("State1"));
    requestContext.setCurrentState(state);

    LegacyModelValidator validator = new LegacyModelValidator();
    ExtendedModel model = new ExtendedModel();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null, codesResolver, null);
    helper.setValidator(validator);

    helper.validate();

    assertTrue(validator.fallbackInvoked);
    assertTrue(validator.hints.length > 0);
    assertEquals(Model.State1.class, validator.hints[0]);
  }

  public void testSmartValidatorWithHintOnTransition() {
    Transition transition = new Transition();
    transition.setMatchingCriteria(new DefaultTransitionCriteria(new StaticExpression(eventId)));
    transition.getAttributes().put("validationHints", new StaticExpression("State1"));

    ViewState state = new ViewState(requestContext.getRootFlow(), "state2", new StubViewFactory());
    state.getTransitionSet().add(transition);
    requestContext.setCurrentState(state);

    LegacyModelValidator validator = new LegacyModelValidator();
    ExtendedModel model = new ExtendedModel();
    ValidationHelper helper = new ValidationHelper(model, requestContext, eventId, modelName, null, codesResolver, null);
    helper.setValidator(validator);

    helper.validate();

    assertTrue(validator.fallbackInvoked);
    assertTrue(validator.hints.length > 0);
    assertEquals(Model.State1.class, validator.hints[0]);
  }


  public static class Model {
    private boolean state1Invoked;
    private boolean fallbackInvoked;

    public void validateState1(ValidationContext context) {
      state1Invoked = true;
    }

    public void validate(ValidationContext context) {
      fallbackInvoked = true;
    }

    private static interface State1 {}
  }

  public static class ExtendedModel extends Model {
  }

  public static class ErrorsModel {
    private boolean state1Invoked;
    private boolean fallbackInvoked;

    public void validateState1(Errors errors) {
      state1Invoked = true;
    }

    public void validate(Errors errors) {
      fallbackInvoked = true;
    }
  }

  public static class LegacyModelValidator implements SmartValidator {
    private boolean state1Invoked;
    private boolean fallbackInvoked;
    private Object[] hints;

    public void validateState1(Model model, Errors errors) {
      state1Invoked = true;
    }

    public void validate(Object object, Errors errors) {
      fallbackInvoked = true;
    }

    public void validate(Object object, Errors errors, Object... hints) {
      fallbackInvoked = true;
      this.hints = hints;
    }

    public boolean supports(Class<?> clazz) {
      return true;
    }
  }

  public static class ModelValidator {
    private boolean state1Invoked;
    private boolean fallbackInvoked;

    public void validateState1(Model model, ValidationContext context) {
      state1Invoked = true;
    }

    public void validate(Model model, ValidationContext context) {
      fallbackInvoked = true;
    }
  }

  public static class ErrorsModelValidator {
    private boolean state1Invoked;
    private boolean fallbackInvoked;

    public void validateState1(Model model, Errors context) {
      state1Invoked = true;
    }

    public void validate(Model model, Errors context) {
      fallbackInvoked = true;
    }
  }

}
TOP

Related Classes of org.springframework.webflow.validation.ValidationHelperTests$ErrorsModelValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.