package org.springmodules.xt.ajax.validation;
import java.util.Locale;
import org.springframework.context.MessageSource;
import org.springframework.context.support.DelegatingMessageSource;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.validation.BindException;
import org.springmodules.xt.ajax.AjaxAction;
import org.springmodules.xt.ajax.AjaxResponse;
import org.springmodules.xt.ajax.AjaxSubmitEvent;
import org.springframework.validation.ObjectError;
import org.springmodules.xt.ajax.AjaxSubmitEventImpl;
import org.springmodules.xt.ajax.action.ReplaceContentAction;
import org.springmodules.xt.ajax.component.Component;
import org.springmodules.xt.ajax.component.SimpleText;
import org.springmodules.xt.ajax.component.TaggedText;
import org.springmodules.xt.ajax.validation.support.DefaultErrorRenderingCallback;
import org.springmodules.xt.test.domain.Employee;
import org.springmodules.xt.test.domain.IEmployee;
import org.springmodules.xt.test.xml.XMLEnhancedTestCase;
/**
* @author Sergio Bossa
*/
public class DefaultValidationHandlerTest extends XMLEnhancedTestCase {
private AjaxSubmitEvent submitEvent;
private BindException errors;
public DefaultValidationHandlerTest(String testName) {
super(testName);
}
protected void setUp() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
IEmployee target = new Employee();
this.errors = new BindException(target, "command");
this.errors.addError(new ObjectError("command", new String[]{"ErrorCode1"}, null, "Default Message 1"));
this.submitEvent = new AjaxSubmitEventImpl("submitEvent", request);
this.submitEvent.setCommandObject(target);
}
public void testValidateWithErrorsPart1() throws Exception {
AjaxResponse response = null;
String rendering = null;
DefaultValidationHandler handler = new DefaultValidationHandler();
handler.setMessageSource(new DelegatingMessageSource());
// Errors:
this.submitEvent.setValidationErrors(this.errors);
response = handler.validate(submitEvent);
rendering = response.render();
System.out.println(rendering);
assertXpathEvaluatesTo("Default Message 1", "//append-as-children/content/div", rendering);
assertXpathEvaluatesTo("wildcard", "//append-as-children/context/matcher/@matchMode", rendering);
assertXpathExists("//execute-javascript/content/script", rendering);
assertTrue(rendering.indexOf("new Effect.Highlight(\"ErrorCode1\",{\"startcolor\":\"#FF0A0A\"});") != -1);
}
public void testValidateWithErrorsPart2() throws Exception {
AjaxResponse response = null;
String rendering = null;
DefaultValidationHandler handler = new DefaultValidationHandler();
handler.setMessageSource(new DelegatingMessageSource());
handler.setErrorRenderingCallback(new DefaultErrorRenderingCallback() {
public Component getErrorComponent(AjaxSubmitEvent event, ObjectError error, MessageSource messageSource, Locale locale) {
return new TaggedText(messageSource.getMessage(error.getCode(), null, error.getDefaultMessage() + " for event : " + event.getEventId(), locale), TaggedText.Tag.SPAN);
}
});
// Errors:
this.submitEvent.setValidationErrors(this.errors);
response = handler.validate(submitEvent);
rendering = response.render();
System.out.println(rendering);
assertXpathEvaluatesTo("Default Message 1 for event : submitEvent", "//append-as-children/content/span", rendering);
assertXpathEvaluatesTo("wildcard", "//append-as-children/context/matcher/@matchMode", rendering);
assertXpathExists("//execute-javascript/content/script", rendering);
assertTrue(rendering.indexOf("new Effect.Highlight(\"ErrorCode1\",{\"startcolor\":\"#FF0A0A\"});") != -1);
}
public void testValidateWithNoErrorsPart1() throws Exception {
AjaxResponse response = null;
String rendering = null;
DefaultValidationHandler handler = new DefaultValidationHandler();
handler.setMessageSource(new DelegatingMessageSource());
response = handler.validate(submitEvent);
rendering = response.render();
System.out.println(rendering);
assertXpathNotExists("/ajax-response/*", rendering);
}
public void testValidateWithNoErrorsPart2() throws Exception {
AjaxResponse response = null;
String rendering = null;
DefaultValidationHandler handler = new DefaultValidationHandler();
handler.setMessageSource(new DelegatingMessageSource());
handler.setSuccessRenderingCallback(new SuccessRenderingCallback() {
public AjaxAction[] getSuccessActions(AjaxSubmitEvent event) {
AjaxAction action = new ReplaceContentAction("test", new SimpleText("Default message"));
return new AjaxAction[]{action};
}
});
response = handler.validate(submitEvent);
rendering = response.render();
System.out.println(rendering);
assertXpathEvaluatesTo("Default message", "//replace-children/content", rendering);
}
public void testEncoding() throws Exception {
DefaultValidationHandler handler = new DefaultValidationHandler();
AjaxResponse response = handler.validate(submitEvent);
String rendering = response.render();
System.out.println(rendering);
assertTrue(rendering.indexOf("encoding=\"ISO-8859-1\"") != -1);
handler = new DefaultValidationHandler();
handler.setAjaxResponseEncoding("UTF-8");
response = handler.validate(submitEvent);
rendering = response.render();
System.out.println(rendering);
assertTrue(rendering.indexOf("encoding=\"UTF-8\"") != -1);
}
}