package org.castor.jdo.jpa.processors.fieldprocessors;
import org.castor.jdo.jpa.info.ClassInfo;
import org.castor.jdo.jpa.info.ClassInfoBuilder;
import org.castor.jdo.jpa.info.FieldInfo;
import org.castor.jdo.jpa.natures.JPAFieldNature;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
public class JPAEnumeratedProcessorTest {
JPAEnumeratedProcessor processor;
JPAFieldNature fieldNature;
@Mock
Enumerated annotation;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
processor = new JPAEnumeratedProcessor();
ClassInfo classInfo = new ClassInfo();
classInfo.addNature(JPAFieldNature.class.getCanonicalName());
fieldNature = new JPAFieldNature(classInfo);
}
@Test
public void processorIsForEnumeratedAnnotation() throws Exception {
assertEquals(Enumerated.class, processor.forAnnotationClass());
}
@Test
public void processorReturnsTrueForEnumeratedAnnotatedClassCorrectly()
throws Exception {
boolean result = processor.processAnnotation(fieldNature, annotation,
EnumeratedAnnotatedClass.class.getDeclaredMethod("getEnumerated"));
assertTrue(result);
}
@Test
public void processorReturnsFalseForNonAnnotatedClass() throws Exception {
boolean result = processor.processAnnotation(fieldNature, annotation,
NonAnnotatedClass.class.getDeclaredMethod("getEnumerated"));
assertFalse(result);
}
@Test
public void processorReturnsFalseForOtherwiseAnnotatedClass()
throws Exception {
boolean result = processor.processAnnotation(fieldNature, annotation,
OtherwiseAnnotatedClass.class.getDeclaredMethod("getEnumerated"));
assertFalse(result);
}
@Test
public void annotationValuesAreProcessedCorrectly() throws Exception {
ClassInfo classInfo = ClassInfoBuilder
.buildClassInfo(EnumeratedAnnotatedClass.class);
assertNotNull(classInfo);
FieldInfo fieldInfo = classInfo.getFieldInfoByName("enumerated");
assertTrue(fieldInfo.hasNature(JPAFieldNature.class.getName()));
JPAFieldNature jpaFieldNature = new JPAFieldNature(fieldInfo);
assertTrue(jpaFieldNature.isStringEnumType());
}
// Test classes
@Ignore
private enum EnumeratedType {
FOO, BAR, BAZ
}
@Ignore
@Entity
private class EnumeratedAnnotatedClass {
private EnumeratedType enumerated;
@Enumerated(EnumType.STRING)
public EnumeratedType getEnumerated() {
return enumerated;
}
public void setEnumerated(final EnumeratedType enumerated) {
this.enumerated = enumerated;
}
}
@Ignore
private class NonAnnotatedClass {
private EnumeratedType enumerated;
public EnumeratedType getEnumerated() {
return enumerated;
}
public void setEnumerated(final EnumeratedType enumerated) {
this.enumerated = enumerated;
}
}
@Ignore
private class OtherwiseAnnotatedClass {
private EnumeratedType enumerated;
@Column
public EnumeratedType getEnumerated() {
return enumerated;
}
public void setEnumerated(final EnumeratedType enumerated) {
this.enumerated = enumerated;
}
}
}