/* * Copyright 2013-2017 Erudika. https://erudika.com * * 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. * * For issues and patches go to: https://github.com/erudika */ package com.erudika.para.utils; import com.erudika.para.core.App; import com.erudika.para.core.Sysprop; import com.erudika.para.core.Tag; import com.erudika.para.core.User; import static com.erudika.para.validation.ValidationUtils.*; import static com.erudika.para.validation.Constraint.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashMap; import static org.junit.Assert.*; import org.junit.Test; /** * * @author Alex Bogdanovski [alex@erudika.com] */ public class ValidationUtilsTest { @Test public void testGetValidator() { assertNotNull(getValidator()); } @Test public void testIsValidObject() { assertFalse(isValidObject(null)); assertFalse(isValidObject(new Tag())); assertTrue(isValidObject(new Tag("tag1"))); Tag t = new Tag(""); t.setName(""); assertFalse(isValidObject(t)); assertFalse(isValidObject(new User())); User u = new User(); u.setId("123"); u.setName("asd"); assertFalse(isValidObject(u)); } @Test public void testValidateObject() { assertTrue(validateObject(null).length > 0); assertEquals(0, validateObject(new Tag("test")).length); App app = new App(Config.PARA); assertTrue(validateObject(app).length == 0); app.resetSecret(); assertTrue(validateObject(app).length == 0); Sysprop s1 = new Sysprop("s1"); assertTrue(validateObject(s1).length == 0); assertTrue(validateObject(app, s1).length == 0); s1.setType("cat"); assertTrue(validateObject(s1).length == 0); assertTrue(validateObject(app, s1).length == 0); assertTrue(app.getValidationConstraints().isEmpty()); app.addValidationConstraint(null, null, null); assertTrue(app.getValidationConstraints().isEmpty()); // required app.addValidationConstraint(s1.getType(), "paws", required()); assertFalse(app.getValidationConstraints().get(s1.getType()).isEmpty()); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("paws", 2); assertTrue(validateObject(app, s1).length == 0); // min app.addValidationConstraint(s1.getType(), "paws", min(4L)); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("paws", 4); assertTrue(validateObject(app, s1).length == 0); // max app.addValidationConstraint(s1.getType(), "paws", max(5L)); s1.addProperty("paws", 6); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("paws", 5); assertTrue(validateObject(app, s1).length == 0); // size app.addValidationConstraint(s1.getType(), "name", size(2, 3)); assertFalse(validateObject(app, s1).length == 0); s1.setName("Bob"); assertTrue(validateObject(app, s1).length == 0); s1.setName("Bobsy"); assertFalse(validateObject(app, s1).length == 0); s1.setName("Bob"); // null values are allowed and treated as valid app.addValidationConstraint(s1.getType(), "fur", size(2, 3)); assertTrue(validateObject(app, s1).length == 0); // ints are a wrong type - not valid s1.addProperty("fur", 3); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("fur", "yes"); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("fur", new ArrayList <String>(0)); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("fur", Arrays.asList(new String[]{"one", "two", "three"})); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("fur", new HashMap<String, String>(0)); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("fur", new HashMap<String, String>() {{ put("1", "1"); put("2", "2"); put("3", "3"); }}); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("fur", new String[0]); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("fur", new String[]{"one", "two", "three"}); assertTrue(validateObject(app, s1).length == 0); // email app.addValidationConstraint(s1.getType(), "eemail", email()); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("eemail", 2); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("eemail", "a@.."); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("eemail", "a@bob.com"); assertTrue(validateObject(app, s1).length == 0); // digits app.addValidationConstraint(s1.getType(), "specialnum", digits(4, 2)); s1.addProperty("specialnum", "??"); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("specialnum", 12.34); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("specialnum", 1234.567); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("specialnum", 12345.67); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("specialnum", "1234.5"); assertTrue(validateObject(app, s1).length == 0); // pattern app.addValidationConstraint(s1.getType(), "regex", pattern("^test\\sok=$")); s1.addProperty("regex", "??"); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("regex", "test ok="); assertTrue(validateObject(app, s1).length == 0); // false app.addValidationConstraint(s1.getType(), "fals", falsy()); s1.addProperty("fals", "test"); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("fals", "false"); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("fals", "NO"); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("fals", "0"); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("fals", 0); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("fals", false); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("fals", "true"); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("fals", true); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("fals", false); // true app.addValidationConstraint(s1.getType(), "tru", truthy()); s1.addProperty("tru", "test"); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("tru", "false"); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("tru", true); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("tru", "true"); assertTrue(validateObject(app, s1).length == 0); // future app.addValidationConstraint(s1.getType(), "future", future()); s1.addProperty("future", 1234); assertFalse(validateObject(app, s1).length == 0); // s1.addProperty("future", System.currentTimeMillis()); // assertFalse(validateObject(app, s1).length == 0); // might fail on some machines s1.addProperty("future", System.currentTimeMillis() + 10000); assertTrue(validateObject(app, s1).length == 0); s1.addProperty("future", new Date(System.currentTimeMillis() + 10000)); assertTrue(validateObject(app, s1).length == 0); // past app.addValidationConstraint(s1.getType(), "past", past()); s1.addProperty("past", System.currentTimeMillis() + 10000); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("past", 1234); assertTrue(validateObject(app, s1).length == 0); // s1.addProperty("past", System.currentTimeMillis()); // assertFalse(validateObject(app, s1).length == 0); // might fail on some machines s1.addProperty("past", new Date(System.currentTimeMillis()-1)); assertTrue(validateObject(app, s1).length == 0); // url app.addValidationConstraint(s1.getType(), "url", url()); s1.addProperty("url", 1234); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("url", "http"); assertFalse(validateObject(app, s1).length == 0); s1.addProperty("url", "http://www.a.com"); assertTrue(validateObject(app, s1).length == 0); } @Test public void testGetCoreValidationConstraints() { assertTrue(getCoreValidationConstraints().containsKey("app")); } @Test public void testAllConstraints() { // null is ok, because value might not be required assertTrue(email().isValid(null)); assertTrue(email().isValid("abc@de.com")); assertFalse(email().isValid("abc@de.")); assertFalse(email().isValid("abc@.c")); assertFalse(email().isValid(123)); assertFalse(email().isValid(" ")); assertTrue(falsy().isValid(null)); assertTrue(falsy().isValid("false")); assertTrue(falsy().isValid("FALSE")); assertTrue(falsy().isValid(false)); assertTrue(falsy().isValid("fals")); assertTrue(falsy().isValid(" ")); assertFalse(falsy().isValid("true")); assertFalse(falsy().isValid(true)); assertTrue(truthy().isValid(null)); assertTrue(truthy().isValid("true")); assertTrue(truthy().isValid("True")); assertTrue(truthy().isValid(true)); assertFalse(truthy().isValid(false)); assertFalse(truthy().isValid("a")); assertFalse(truthy().isValid(" ")); assertFalse(required().isValid(null)); assertFalse(required().isValid(" ")); assertTrue(required().isValid("text")); assertTrue(required().isValid(1)); assertTrue(required().isValid(true)); long now = System.currentTimeMillis(); assertTrue(future().isValid(null)); assertTrue(future().isValid(new Date(now + 1000))); assertFalse(future().isValid(new Date(now - 1000))); assertTrue(past().isValid(null)); assertTrue(past().isValid(new Date(now - 1000))); assertFalse(past().isValid(new Date(now + 1000))); assertTrue(url().isValid(null)); assertTrue(url().isValid("http://abc.co")); assertFalse(url().isValid("htp://abc.co")); assertFalse(url().isValid("abc.com")); assertFalse(url().isValid(" ")); assertFalse(url().isValid(false)); assertTrue(min(3).isValid(null)); assertTrue(min(3).isValid(3)); assertTrue(min(3).isValid(4)); assertFalse(min(4).isValid(3)); assertFalse(min(2).isValid("3")); assertFalse(min(4).isValid(true)); assertFalse(min(null).isValid(" ")); assertFalse(min(null).isValid(3)); assertTrue(max(3).isValid(null)); assertTrue(max(3).isValid(3)); assertTrue(max(4).isValid(3)); assertFalse(max(3).isValid(4)); assertFalse(max(2).isValid("3")); assertFalse(max(4).isValid(true)); assertFalse(max(null).isValid(" ")); assertFalse(max(null).isValid(3)); assertTrue(size(2, 3).isValid(null)); assertTrue(size(2, 3).isValid("xx")); assertFalse(size(3, 2).isValid("xx")); assertFalse(size(2, 3).isValid("xxxx")); assertFalse(size(2, 3).isValid("x")); assertTrue(size(0, 0).isValid("")); assertTrue(size(0, 0).isValid(new String[0])); assertTrue(size(1, 2).isValid(new String[]{"a", "b"})); assertTrue(size(1, 2).isValid(Arrays.asList(new String[]{"a", "b"}))); assertTrue(size(1, 2).isValid(Collections.singletonMap("a", "b"))); assertTrue(digits(2, 2).isValid(null)); assertTrue(digits(2, 2).isValid("22.22")); assertFalse(digits(2, 2).isValid("22.222")); assertFalse(digits(1, 2).isValid("2.222")); assertTrue(digits(1, 2).isValid("2.22")); assertTrue(digits(1, 2).isValid(2.22)); assertTrue(digits(1, 2).isValid(0)); assertFalse(digits(1, 2).isValid(12)); assertFalse(digits(0, 2).isValid(1)); assertTrue(pattern(null).isValid(null)); assertTrue(pattern("").isValid("")); assertTrue(pattern("[ab]+").isValid("bababa")); assertTrue(pattern("\\.[ab]+").isValid(".babababa")); assertFalse(pattern("").isValid(" ")); } }