/*
* JBoss, Home of Professional Open Source
* Copyright 2010, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* 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.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" );
}
}