/* * Copyright (C) 2011 Red Hat, Inc. and/or its affiliates. * * 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.jboss.errai.validation.client.test; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.inject.Singleton; import javax.validation.ConstraintViolation; import javax.validation.constraints.DecimalMax; import javax.validation.constraints.Digits; import javax.validation.constraints.Max; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import org.jboss.errai.ioc.client.container.IOC; import org.jboss.errai.ioc.client.container.SyncBeanDef; import org.jboss.errai.ioc.client.test.AbstractErraiIOCTest; import org.jboss.errai.validation.client.ModuleWithInjectedValidator; import org.jboss.errai.validation.client.dynamic.DynamicValidator; /** * Integration tests for {@link DynamicValidator DynamicValidators}. * * @author Max Barkley <mbarkley@redhat.com> */ public class DynamicValidationIntegrationTest extends AbstractErraiIOCTest { @Override public String getModuleName() { return "org.jboss.errai.validation.ValidationTestModule"; } @Override protected void gwtSetUp() throws Exception { super.gwtSetUp(); } public void testLookupDynamicValidatorWithIoc() throws Exception { final SyncBeanDef<DynamicValidator> beanDef = IOC.getBeanManager().lookupBean(DynamicValidator.class); assertEquals(Singleton.class, beanDef.getScope()); final DynamicValidator validator = beanDef.getInstance(); assertNotNull(validator); assertSame(validator, beanDef.getInstance()); } public void testInjectionOfDynamicValidator() throws Exception { final ModuleWithInjectedValidator module = IOC.getBeanManager().lookupBean(ModuleWithInjectedValidator.class).getInstance(); final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); assertNotNull(module.getDynamicValidator()); assertNotNull(validator); assertSame(validator, module.getDynamicValidator()); } public void testValidateMaxStringValidator() throws Exception { final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); final Set<ConstraintViolation<String>> validResult = validator.validate(Max.class, Collections.singletonMap("value", 100L), "99"); assertTrue(validResult.toString(), validResult.isEmpty()); final Set<ConstraintViolation<String>> invalidResult = validator.validate(Max.class, Collections.singletonMap("value", 100L), "101"); assertEquals(1, invalidResult.size()); } public void testValidateMaxStringValidatorWithMessage() throws Exception { final Map<String, Object> parameters = new HashMap<>(); parameters.put("value", 100l); parameters.put("message", "{javax.validation.constraints.Max.message}"); final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); final Set<ConstraintViolation<String>> invalidResult = validator.validate(Max.class, parameters, "101"); assertEquals(1, invalidResult.size()); assertNotNull(invalidResult.iterator().next().getMessage()); // i.e. must be less than or equal to 100 (not verifying the rest of the text as it's dependent on the locale) assertTrue(invalidResult.iterator().next().getMessage().contains("100")); } public void testValidateMaxLongValidator() throws Exception { final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); final Set<ConstraintViolation<Long>> validResult = validator.validate(Max.class, Collections.singletonMap("value", 100L), 99l); assertTrue(validResult.toString(), validResult.isEmpty()); final Set<ConstraintViolation<Long>> invalidResult = validator.validate(Max.class, Collections.singletonMap("value", 100L), 101l); assertEquals(1, invalidResult.size()); } public void testValidateMaxIntegerValidator() throws Exception { final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); final Set<ConstraintViolation<Integer>> validResult = validator.validate(Max.class, Collections.singletonMap("value", 100l), 99); assertTrue(validResult.toString(), validResult.isEmpty()); final Set<ConstraintViolation<Integer>> invalidResult = validator.validate(Max.class, Collections.singletonMap("value", 100l), 101); assertEquals(1, invalidResult.size()); } public void testValidateMaxDoubleValidator() throws Exception { final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); final Set<ConstraintViolation<Double>> validResult = validator.validate(Max.class, Collections.singletonMap("value", 100l), 99d); assertTrue(validResult.toString(), validResult.isEmpty()); final Set<ConstraintViolation<Double>> invalidResult = validator.validate(Max.class, Collections.singletonMap("value", 100l), 101d); assertEquals(1, invalidResult.size()); } public void testValidateDecimalMaxFloatValidator() throws Exception { final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); final Set<ConstraintViolation<Float>> validResult = validator.validate(DecimalMax.class, Collections.singletonMap("value", "100.0"), 99.9f); assertTrue(validResult.toString(), validResult.isEmpty()); final Set<ConstraintViolation<Float>> invalidResult = validator.validate(DecimalMax.class, Collections.singletonMap("value", "100.0"), 100.1f); assertEquals(1, invalidResult.size()); } public void testValidateMaxBigDecimalValidator() throws Exception { final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); final Set<ConstraintViolation<BigDecimal>> validResult = validator.validate(Max.class, Collections.singletonMap("value", 100l), BigDecimal.valueOf(99l)); assertTrue(validResult.toString(), validResult.isEmpty()); final Set<ConstraintViolation<BigDecimal>> invalidResult = validator.validate(Max.class, Collections.singletonMap("value", 100l), BigDecimal.valueOf(101l)); assertEquals(1, invalidResult.size()); } public void testValidateMaxBigIntegerValidator() throws Exception { final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); final Set<ConstraintViolation<BigInteger>> validResult = validator.validate(Max.class, Collections.singletonMap("value", 100l), BigInteger.valueOf(99l)); assertTrue(validResult.toString(), validResult.isEmpty()); final Set<ConstraintViolation<BigInteger>> invalidResult = validator.validate(Max.class, Collections.singletonMap("value", 100l), BigInteger.valueOf(101l)); assertEquals(1, invalidResult.size()); } public void testValidationWithMultipleParams() throws Exception { final Map<String, Object> params = new HashMap<>(); params.put("integer", 3); params.put("fraction", 3); final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); final Set<ConstraintViolation<String>> validResult = validator.validate(Digits.class, params, "123.123"); assertTrue(validResult.isEmpty()); final Set<ConstraintViolation<String>> invalidResult = validator.validate(Digits.class, params, "1234.123"); assertEquals(1, invalidResult.size()); } public void testValidateSeveralTypesForSameConstraintAndParams() throws Exception { final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); final Map<String, Object> params = new HashMap<>(); params.put("min", 1); params.put("max", 1); assertFalse(validator.validate(Size.class, params, Collections.emptyList()).isEmpty()); assertTrue(validator.validate(Size.class, params, Collections.singleton(new Object())).isEmpty()); assertFalse(validator.validate(Size.class, params, "").isEmpty()); assertTrue(validator.validate(Size.class, params, "a").isEmpty()); assertFalse(validator.validate(Size.class, params, new int[0]).isEmpty()); assertTrue(validator.validate(Size.class, params, new int[] { 1 }).isEmpty()); assertFalse(validator.validate(Size.class, params, new Integer[0]).isEmpty()); assertTrue(validator.validate(Size.class, params, new Integer[] { 1 }).isEmpty()); } public void testNotNullValidator() throws Exception { final DynamicValidator validator = IOC.getBeanManager().lookupBean(DynamicValidator.class).getInstance(); assertFalse(validator.validate(NotNull.class, Collections.emptyMap(), null).isEmpty()); assertTrue(validator.validate(NotNull.class, Collections.emptyMap(), new Object()).isEmpty()); assertTrue(validator.validate(NotNull.class, Collections.emptyMap(), "foo").isEmpty()); } }