package org.castor.jdo.jpa.processors.classprocessors; import org.mockito.MockitoAnnotations; import org.mockito.Mock; import org.castor.jdo.jpa.info.ClassInfoBuilder; import org.castor.jdo.jpa.info.ClassInfo; import org.castor.jdo.jpa.natures.JPAClassNature; import org.junit.Before; import org.junit.Test; import javax.persistence.Entity; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.NamedNativeQuery; import org.exolab.castor.mapping.MappingException; import static org.junit.Assert.*; public class JPAInheritanceProcessorTest { JPAInheritanceProcessor processor; JPAClassNature classNature; @Mock Inheritance annotation; @Before public void setUp() { MockitoAnnotations.initMocks(this); processor = new JPAInheritanceProcessor(); ClassInfo classInfo = new ClassInfo(); classInfo.addNature(JPAClassNature.class.getCanonicalName()); classNature = new JPAClassNature(classInfo); } @Test public void processorIsForNamedQueriesAnnotation() throws Exception { assertEquals(Inheritance.class, processor.forAnnotationClass()); } @Test(expected=MappingException.class) public void annotationDefaultValuesAreProcessedCorrectly() throws Exception { ClassInfo classInfo = ClassInfoBuilder. buildClassInfo(InheritanceAnnotatedClass.class); assertNotNull(classInfo); assertTrue(classInfo.hasNature(JPAClassNature.class.getName())); JPAClassNature jpaClassNature = new JPAClassNature(classInfo); assertEquals(InheritanceType.SINGLE_TABLE, jpaClassNature.getInheritanceStrategy()); } @Test public void annotationExplicitValuesAreProcessedCorrectly() throws Exception { ClassInfo classInfo = ClassInfoBuilder. buildClassInfo(JoinedAnnotatedClass.class); assertNotNull(classInfo); assertTrue(classInfo.hasNature(JPAClassNature.class.getName())); JPAClassNature jpaClassNature = new JPAClassNature(classInfo); assertEquals(InheritanceType.JOINED, jpaClassNature.getInheritanceStrategy()); } @Test public void processorReturnsFalseForNonAnnotatedClass() throws Exception { boolean result = processor.processAnnotation(classNature, annotation, NonAnnotatedClass.class); assertFalse(result); } @Test public void processorReturnsFalseForOtherwiseAnnotatedClass() throws Exception { boolean result = processor.processAnnotation(classNature, annotation, OtherwiseAnnotatedClass.class); assertFalse(result); } @Entity() private class BaseClass { } @Entity @Inheritance(strategy = InheritanceType.JOINED) private class JoinedAnnotatedClass extends BaseClass{ } @Entity() @Inheritance private class InheritanceAnnotatedClass extends BaseClass{ } private class NonAnnotatedClass { } @Entity @NamedNativeQuery(name = "this is not a Inheritance annotation", query = "") private class OtherwiseAnnotatedClass extends BaseClass{ } }