/** * Copyright 2009-2013 Oy Vaadin Ltd * * 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 com.vaadin.addon.jpacontainer.metadata; import static com.vaadin.addon.jpacontainer.metadata.TestClasses.*; import org.junit.Test; import static org.junit.Assert.*; /** * Test case for {@link EntityClassMetadata}. * * @author Petter Holmström (Vaadin Ltd) * @since 1.0 */ public class EntityClassMetadataTest { @Test public void testGetEntityName() { EntityClassMetadata<Person_F> metadata = new EntityClassMetadata<Person_F>( Person_F.class, "entityName"); assertEquals("entityName", metadata.getEntityName()); } @Test public void testIdentifierProperty() throws Exception { EntityClassMetadata<Person_F> metadata = new EntityClassMetadata<Person_F>( Person_F.class, "entityName"); PersistentPropertyMetadata idProp = new PersistentPropertyMetadata( "id", Integer.class, PropertyKind.SIMPLE, BaseEntity_F.class.getDeclaredField("id"), null); metadata.addProperties(idProp); assertFalse(metadata.hasIdentifierProperty()); assertFalse(metadata.hasEmbeddedIdentifier()); assertNull(metadata.getIdentifierProperty()); metadata.setIdentifierPropertyName("id"); assertTrue(metadata.hasIdentifierProperty()); assertFalse(metadata.hasEmbeddedIdentifier()); assertSame(idProp, metadata.getIdentifierProperty()); } @Test public void testIdentifierProperty_Embedded() throws Exception { EntityClassMetadata<Person_F> metadata = new EntityClassMetadata<Person_F>( Person_F.class, "entityName"); /* * It does not matter that 'id' is in fact not embedded, as no * validation is done by these classes. */ PersistentPropertyMetadata idProp = new PersistentPropertyMetadata( "id", new ClassMetadata<Integer>(Integer.class), PropertyKind.EMBEDDED, BaseEntity_F.class.getDeclaredField("id"), null); metadata.addProperties(idProp); assertFalse(metadata.hasIdentifierProperty()); assertFalse(metadata.hasEmbeddedIdentifier()); assertNull(metadata.getIdentifierProperty()); metadata.setIdentifierPropertyName("id"); assertTrue(metadata.hasIdentifierProperty()); assertTrue(metadata.hasEmbeddedIdentifier()); assertSame(idProp, metadata.getIdentifierProperty()); } @Test public void testIdentifierProperty_Invalid() { EntityClassMetadata<Person_F> metadata = new EntityClassMetadata<Person_F>( Person_F.class, "entityName"); try { metadata.setIdentifierPropertyName("nonexistent"); fail("Nothing happened"); } catch (IllegalArgumentException e) { assertNull(metadata.getIdentifierProperty()); assertFalse(metadata.hasIdentifierProperty()); assertFalse(metadata.hasEmbeddedIdentifier()); } } @Test public void testIdentifierProperty_Transient() throws Exception { EntityClassMetadata<Person_M> metadata = new EntityClassMetadata<Person_M>( Person_M.class, "entityName"); metadata.addProperties(new PropertyMetadata("transientField2", String.class, Person_M.class .getDeclaredMethod("getTransientField2"), Person_M.class.getDeclaredMethod("setTransientField2", String.class))); assertNotNull(metadata.getProperty("transientField2")); try { metadata.setIdentifierPropertyName("transientField2"); fail("Nothing happened"); } catch (IllegalArgumentException e) { assertNull(metadata.getIdentifierProperty()); assertFalse(metadata.hasIdentifierProperty()); assertFalse(metadata.hasEmbeddedIdentifier()); } } @Test public void testIdentifierProperty_Null() throws Exception { EntityClassMetadata<Person_F> metadata = new EntityClassMetadata<Person_F>( Person_F.class, "entityName"); metadata.addProperties(new PersistentPropertyMetadata("id", Integer.class, PropertyKind.SIMPLE, BaseEntity_F.class.getDeclaredField("id"), null)); metadata.setIdentifierPropertyName("id"); assertNotNull(metadata.getIdentifierProperty()); metadata.setIdentifierPropertyName(null); assertNull(metadata.getIdentifierProperty()); assertFalse(metadata.hasIdentifierProperty()); assertFalse(metadata.hasEmbeddedIdentifier()); } @Test public void testVersionProperty() throws Exception { EntityClassMetadata<Person_F> metadata = new EntityClassMetadata<Person_F>( Person_F.class, "entityName"); PersistentPropertyMetadata verProp = new PersistentPropertyMetadata( "version", Integer.class, PropertyKind.SIMPLE, BaseEntity_F.class.getDeclaredField("version"), null); metadata.addProperties(verProp); assertFalse(metadata.hasVersionProperty()); assertNull(metadata.getVersionProperty()); metadata.setVersionPropertyName("version"); assertTrue(metadata.hasVersionProperty()); assertSame(verProp, metadata.getVersionProperty()); } @Test public void testVersionProperty_Invalid() { EntityClassMetadata<Person_F> metadata = new EntityClassMetadata<Person_F>( Person_F.class, "entityName"); try { metadata.setVersionPropertyName("nonexistent"); fail("Nothing happened"); } catch (IllegalArgumentException e) { assertFalse(metadata.hasVersionProperty()); assertNull(metadata.getVersionProperty()); } } @Test public void testVersionProperty_Transient() throws Exception { EntityClassMetadata<Person_M> metadata = new EntityClassMetadata<Person_M>( Person_M.class, "entityName"); metadata.addProperties(new PropertyMetadata("transientField2", String.class, Person_M.class .getDeclaredMethod("getTransientField2"), Person_M.class.getDeclaredMethod("setTransientField2", String.class))); assertNotNull(metadata.getProperty("transientField2")); try { metadata.setVersionPropertyName("transientField2"); fail("Nothing happened"); } catch (IllegalArgumentException e) { assertFalse(metadata.hasVersionProperty()); assertNull(metadata.getVersionProperty()); } } @Test public void testVersionProperty_Null() throws Exception { EntityClassMetadata<Person_F> metadata = new EntityClassMetadata<Person_F>( Person_F.class, "entityName"); metadata.addProperties(new PersistentPropertyMetadata("version", Integer.class, PropertyKind.SIMPLE, BaseEntity_F.class.getDeclaredField("version"), null)); metadata.setVersionPropertyName("version"); assertNotNull(metadata.getVersionProperty()); metadata.setVersionPropertyName(null); assertNull(metadata.getVersionProperty()); assertFalse(metadata.hasVersionProperty()); } // TODO Add test for equals() and hashCode() }