/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.jpamodelgen.test.accesstype; import org.hibernate.jpamodelgen.test.util.CompilationTest; import org.hibernate.jpamodelgen.test.util.TestForIssue; import org.hibernate.jpamodelgen.test.util.TestUtil; import org.hibernate.jpamodelgen.test.util.WithClasses; import org.hibernate.jpamodelgen.test.util.WithMappingFiles; import org.junit.Test; import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAbsenceOfFieldInMetamodelFor; import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAttributeTypeInMetaModelFor; import static org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfFieldInMetamodelFor; /** * @author Emmanuel Bernard * @author Hardy Ferentschik */ // TODO - differentiate needed classes per test better. Right now all test classes are processed for each test (HF) @WithClasses({ Address.class, Area.class, Building.class, Country.class, Customer.class, Detail.class, Hominidae.class, Hotel.class, HotelRoom.class, House.class, Human.class, Inhabitant.class, Item.class, LivingBeing.class, Mammals.class, Order.class, Pet.class, Product.class, Room.class, Shop.class, User.class }) @WithMappingFiles("orm.xml") public class AccessTypeTest extends CompilationTest { @Test public void testXmlConfiguredEntityGenerated() { TestUtil.assertMetamodelClassGeneratedFor( Order.class ); } @Test public void testExcludeTransientFieldAndStatic() { TestUtil.assertAbsenceOfFieldInMetamodelFor( Product.class, "nonPersistent" ); TestUtil.assertAbsenceOfFieldInMetamodelFor( Product.class, "nonPersistent2" ); } @Test public void testDefaultAccessTypeOnEntity() { TestUtil.assertAbsenceOfFieldInMetamodelFor( User.class, "nonPersistent" ); } @Test public void testDefaultAccessTypeForSubclassOfEntity() { TestUtil.assertAbsenceOfFieldInMetamodelFor( Customer.class, "nonPersistent" ); } @Test public void testDefaultAccessTypeForEmbeddable() { TestUtil.assertAbsenceOfFieldInMetamodelFor( Detail.class, "nonPersistent" ); } @Test public void testInheritedAccessTypeForEmbeddable() { TestUtil.assertAbsenceOfFieldInMetamodelFor( Country.class, "nonPersistent" ); assertAbsenceOfFieldInMetamodelFor( Pet.class, "nonPersistent", "Collection of embeddable not taken care of" ); } @Test @TestForIssue(jiraKey = " METAGEN-81") public void testAccessTypeForEmbeddableDeterminedByIdAnnotationInRootEntity() { assertPresenceOfFieldInMetamodelFor( Hotel.class, "webmaster", "Access type should be inherited position of the @Id field annotation in the root entity" ); } @Test public void testDefaultAccessTypeForMappedSuperclass() { TestUtil.assertAbsenceOfFieldInMetamodelFor( Detail.class, "volume" ); } @Test public void testExplicitAccessTypeAndDefaultFromRootEntity() { assertAbsenceOfFieldInMetamodelFor( LivingBeing.class, "nonPersistent", "explicit access type on mapped superclass" ); assertAbsenceOfFieldInMetamodelFor( Hominidae.class, "nonPersistent", "explicit access type on entity" ); assertAbsenceOfFieldInMetamodelFor( Human.class, "nonPersistent", "proper inheritance from root entity access type" ); } @Test public void testMemberAccessType() { assertPresenceOfFieldInMetamodelFor( Customer.class, "goodPayer", "access type overriding" ); assertAttributeTypeInMetaModelFor( Customer.class, "goodPayer", Boolean.class, "access type overriding" ); } }