/* * Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com> * Licensed under the Apache License, Version 2.0 (the "License") * $Id: TestMetaData.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.site; import com.uwyn.rife.database.Datasources; import com.uwyn.rife.database.querymanagers.generic.GenericQueryManager; import com.uwyn.rife.database.querymanagers.generic.GenericQueryManagerFactory; import com.uwyn.rife.tools.ObjectUtils; import com.uwyn.rifetestmodels.Person; import com.uwyn.rifetestmodels.PersonCallbacks; import com.uwyn.rifetestmodels.PersonCloneable; import com.uwyn.rifetestmodels.PersonAnnotation; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; import junit.framework.TestCase; public class TestMetaData extends TestCase { public TestMetaData(String name) { super(name); } public void testConstraintsValidation() { Person person = new Person(); Constrained constrained = (Constrained)person; assertNotNull(constrained); Set<ValidationError> errors; Validated validated = (Validated)person; assertFalse(validated.validate()); assertFalse(validated.isSubjectValid("firstname")); assertTrue(validated.isSubjectValid("lastname")); errors = validated.getValidationErrors(); assertEquals(1, errors.size()); assertEquals(ValidationError.IDENTIFIER_MANDATORY, errors.iterator().next().getIdentifier()); validated.resetValidation(); person.setFirstname("John"); person.setLastname("Smith"); assertTrue(validated.validate()); validated.resetValidation(); person.setFirstname("John"); person.setLastname("Wayne"); assertFalse(validated.validate()); assertTrue(validated.isSubjectValid("firstname")); assertFalse(validated.isSubjectValid("lastname")); errors = validated.getValidationErrors(); assertEquals(1, errors.size()); assertEquals(ValidationError.IDENTIFIER_INVALID, errors.iterator().next().getIdentifier()); validated.resetValidation(); person.setFirstname("Dean Marie Alson"); person.setLastname("Jones"); assertFalse(validated.validate()); assertFalse(validated.isSubjectValid("firstname")); assertTrue(validated.isSubjectValid("lastname")); errors = validated.getValidationErrors(); assertEquals(1, errors.size()); assertEquals(ValidationError.IDENTIFIER_WRONGLENGTH, errors.iterator().next().getIdentifier()); } public void testConstraintsValidationAnnotation() { PersonAnnotation person = new PersonAnnotation(); Constrained constrained = (Constrained)person; assertNotNull(constrained); Set<ValidationError> errors; Validated validated = (Validated)person; assertFalse(validated.validate()); assertFalse(validated.isSubjectValid("firstname")); assertTrue(validated.isSubjectValid("lastname")); errors = validated.getValidationErrors(); assertEquals(1, errors.size()); assertEquals(ValidationError.IDENTIFIER_MANDATORY, errors.iterator().next().getIdentifier()); validated.resetValidation(); person.setFirstname("John"); person.setLastname("Smith"); assertTrue(validated.validate()); validated.resetValidation(); person.setFirstname("John"); person.setLastname("Wayne"); assertFalse(validated.validate()); assertTrue(validated.isSubjectValid("firstname")); assertFalse(validated.isSubjectValid("lastname")); errors = validated.getValidationErrors(); assertEquals(1, errors.size()); assertEquals(ValidationError.IDENTIFIER_INVALID, errors.iterator().next().getIdentifier()); validated.resetValidation(); person.setFirstname("Dean Marie Alson"); person.setLastname("Jones"); assertFalse(validated.validate()); assertFalse(validated.isSubjectValid("firstname")); assertTrue(validated.isSubjectValid("lastname")); errors = validated.getValidationErrors(); assertEquals(1, errors.size()); assertEquals(ValidationError.IDENTIFIER_WRONGLENGTH, errors.iterator().next().getIdentifier()); } public void testCloningNoMethod() { Person person = new Person(); person.setFirstname("John"); person.setLastname("Smith"); assertTrue(((Validated)person).validate()); Person person_clone = ObjectUtils.genericClone(person); assertTrue(((Validated)person_clone).validate()); person_clone.setFirstname("Jeremy Jackson James"); person_clone.setLastname("Dillinger"); assertFalse(((Validated)person_clone).validate()); assertEquals(2, ((Validated)person_clone).countValidationErrors()); assertEquals(0, ((Validated)person).countValidationErrors()); assertTrue(((Validated)person).validate()); ((Validated)person).resetValidation(); assertEquals(2, ((Validated)person_clone).countValidationErrors()); } public void testCloningExistingMethod() { PersonCloneable person = new PersonCloneable(); assertNull(person.getFirstname()); assertNull(person.getLastname()); PersonCloneable person_clone; // check if the original clone methods it still working person_clone = ObjectUtils.genericClone(person); assertNotNull(person_clone); assertEquals("autofirst", person_clone.getFirstname()); assertNull(person_clone.getLastname()); // check that the instance properties as really seperated assertNull(person.getFirstname()); assertNull(person.getLastname()); // check that the validation features are really seperated assertFalse(((Validated)person).validate()); assertEquals(1, ((Validated)person).countValidationErrors()); assertEquals(0, ((Validated)person_clone).countValidationErrors()); assertTrue(((Validated)person_clone).validate()); assertEquals(0, ((Validated)person_clone).countValidationErrors()); // try another path in the default clone method // also test that the original validation errors are cloned correctly ((Validated)person).resetValidation(); assertEquals(0, ((Validated)person).countValidationErrors()); person.setFirstname("this name is too long"); assertFalse(((Validated)person).validate()); assertEquals(1, ((Validated)person).countValidationErrors()); person_clone = ObjectUtils.genericClone(person); assertNotNull(person_clone); assertEquals(1, ((Validated)person_clone).countValidationErrors()); assertEquals("this name is too long", person_clone.getFirstname()); assertEquals("autolast", person_clone.getLastname()); // check that the error resetting is really seperated ((Validated)person).resetValidation(); assertEquals(0, ((Validated)person).countValidationErrors()); assertEquals(1, ((Validated)person_clone).countValidationErrors()); ((Validated)person_clone).resetValidation(); assertEquals(0, ((Validated)person_clone).countValidationErrors()); // check that the constrained properties are seperated ConstrainedProperty prop = ((Constrained)person_clone).getConstrainedProperty("lastname"); assertNotNull(prop); String[] list_array = prop.getInList(); List<String> list_list = new ArrayList<String>(Arrays.asList(list_array)); list_list.add("Chronno"); prop.inList(list_list); ((Constrained)person_clone).addConstraint(prop); person_clone.setFirstname("Jeremy"); person_clone.setLastname("Chronno"); assertTrue(((Validated)person_clone).validate()); assertEquals(0, ((Validated)person_clone).countValidationErrors()); person.setFirstname("Jeremy"); person.setLastname("Chronno"); assertFalse(((Validated)person).validate()); assertEquals(1, ((Validated)person).countValidationErrors()); } public void testCallbacks() { PersonCallbacks person = new PersonCallbacks(); person.setFirstname("John"); person.setLastname("Smith"); GenericQueryManager<PersonCallbacks> manager = GenericQueryManagerFactory.getInstance(Datasources.getRepInstance().getDatasource("unittestsderby"), PersonCallbacks.class); manager.install(); try { int id = manager.save(person); assertTrue(id >= 0); PersonCallbacks restored_person = manager.restore(id); assertNotNull(restored_person); assertEquals("beforeSave", restored_person.getFirstname()); assertEquals("Smith", restored_person.getLastname()); } finally { manager.remove(); } } }