package org.vaadin.viritin; import org.vaadin.viritin.v7.MBeanFieldGroup; import org.vaadin.viritin.v7.BeanBinder; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; import java.util.Arrays; import java.util.Locale; import javax.validation.constraints.NotNull; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.vaadin.viritin.v7.fields.MTextField; import org.vaadin.viritin.v7.form.AbstractForm; import org.vaadin.viritin.layouts.MVerticalLayout; import com.vaadin.v7.ui.AbstractField; import com.vaadin.ui.Component; import com.vaadin.v7.ui.Field; import com.vaadin.v7.ui.TextField; /** * Created by marco on 06/05/16. */ public class MBeanFieldGroupTest { private Locale defaultLocale; @Before public void storeDefaultLocale() { defaultLocale = Locale.getDefault(); } @After public void restoreDefaultLocale() { Locale.setDefault(defaultLocale); } @Test public void notNullAnnotatedFieldsShouldHaveInterpolatedErrorMessage() { // Force en_US as default for test purpose Locale.setDefault(Locale.US); MBeanFieldGroup fieldGroup = new MBeanFieldGroup<>(Tester.class); Field<?> defaultMessageField = fieldGroup.buildAndBind("defaultMessage"); Field<?> customMessageKeyField = fieldGroup.buildAndBind("customMessageKey"); Field<?> customMessageField = fieldGroup.buildAndBind("customMessage"); fieldGroup.configureMaddonDefaults(); assertThat(defaultMessageField.getRequiredError(), equalTo("may not be null")); assertThat(customMessageKeyField.getRequiredError(), equalTo("Emails must match!")); assertThat(customMessageField.getRequiredError(), equalTo("Custom message")); } @Test public void notNullAnnotatedFieldsShouldHaveInterpolatedErrorMessageWithLocale() { Locale locale = Locale.ITALIAN; MBeanFieldGroup fieldGroup = new MBeanFieldGroup<>(Tester.class); Field<?> defaultMessageField = fieldGroup.buildAndBind("defaultMessage"); Field<?> customMessageKeyField = fieldGroup.buildAndBind("customMessageKey"); Field<?> customMessageField = fieldGroup.buildAndBind("customMessage"); withLocale(locale, defaultMessageField, customMessageField, customMessageKeyField); fieldGroup.configureMaddonDefaults(); assertThat(defaultMessageField.getRequiredError(), equalTo("Non deve essere nullo")); assertThat(customMessageKeyField.getRequiredError(), equalTo("Gli indirizzi email devono corrispondere!")); assertThat(customMessageField.getRequiredError(), equalTo("Custom message")); } @Test public void readOnlyFieldsShouldNotBeMadeRequired() { MBeanFieldGroup<Tester> bfg = new MBeanFieldGroup<>(Tester.class); TextField readOnlyField = new TextField(); readOnlyField.setReadOnly(true); TextField basic = new TextField(); bfg.bind(readOnlyField, "defaultMessage"); bfg.bind(basic, "customMessageKey"); bfg.configureMaddonDefaults(); Assert.assertFalse("Read only field don't need to be marked required", readOnlyField.isRequired()); Assert.assertTrue("Editable notnull properties should make fields required", basic.isRequired()); } @Test public void validateOnlyBoundFields() { Tester2 tester = new Tester2(); tester.setDefaultMessage("test"); //sets only one of NotNull values TesterForm form = new TesterForm(); MBeanFieldGroup<Tester2> fieldGroup = BeanBinder.bind(tester, form); Assert.assertTrue(fieldGroup.isValid()); fieldGroup.setValidateOnlyBoundFields(false); //tells that all properties should be validated Assert.assertFalse(fieldGroup.isValid()); } private void withLocale(Locale locale, Field<?>... fields) { Arrays.stream(fields).map(AbstractField.class::cast).forEach(f -> f.setLocale(locale)); } public static class Tester { @NotNull private String defaultMessage; @NotNull(message = "{YourMsgKey}") private String customMessageKey; @NotNull(message = "Custom message") private String customMessage; public String getCustomMessage() { return customMessage; } public String getCustomMessageKey() { return customMessageKey; } public String getDefaultMessage() { return defaultMessage; } } public static class Tester2 { @NotNull private String defaultMessage; @NotNull(message = "{YourMsgKey}") private String customMessageKey; @NotNull(message = "Custom message") private String customMessage; public String getDefaultMessage() { return defaultMessage; } public void setDefaultMessage(String defaultMessage) { this.defaultMessage = defaultMessage; } public String getCustomMessageKey() { return customMessageKey; } public void setCustomMessageKey(String customMessageKey) { this.customMessageKey = customMessageKey; } public String getCustomMessage() { return customMessage; } public void setCustomMessage(String customMessage) { this.customMessage = customMessage; } } public class TesterForm extends AbstractForm<Tester2> { private static final long serialVersionUID = -3550932858549479910L; private MTextField defaultMessage; @Override protected Component createContent() { defaultMessage = new MTextField("default message"); return new MVerticalLayout(defaultMessage, getToolbar()); } } }