package org.castor.jdo.jpa.info;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.castor.cpa.persistence.sql.keygen.TableKeyGenerator;
import org.castor.jdo.jpa.natures.JPAClassNature;
import org.exolab.castor.jdo.engine.KeyGeneratorDescriptor;
import org.exolab.castor.jdo.engine.nature.ClassDescriptorJDONature;
import org.exolab.castor.mapping.loader.ClassDescriptorImpl;
import org.exolab.castor.mapping.xml.NamedNativeQuery;
import org.exolab.castor.xml.ClassDescriptorResolver;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
public class InfoToDescriptorConverterTest {
final static String NAME = "name";
final static String QUERY = "query";
final static String NAME2 = "name2";
final static String QUERY2 = "query2";
ClassInfo classInfo;
@Mock
ClassDescriptorResolver resolver;
ClassDescriptorImpl descriptor;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void cacheInformationWillBeConverted() throws Exception {
classInfo = new ClassInfo();
classInfo.addNature(JPAClassNature.class.getCanonicalName());
classInfo.setDescribedClass(JpaCacheTestClass.class);
JPAClassNature nature = new JPAClassNature(classInfo);
Properties cacheProperties = new Properties();
cacheProperties.setProperty("type", "none");
nature.setCacheProperties(cacheProperties);
descriptor = new ClassDescriptorImpl();
InfoToDescriptorConverter.convert(classInfo, resolver, descriptor);
Properties properties = (Properties) descriptor
.getProperty(ClassDescriptorJDONature.class.getCanonicalName()
+ "cacheParameters");
assertEquals("none", properties.getProperty("type"));
}
@Test
public void namedQueriesInformationWillBeConverted() throws Exception {
classInfo = new ClassInfo();
classInfo.addNature(JPAClassNature.class.getCanonicalName());
classInfo.setDescribedClass(JpaNamedQueriesTestClass.class);
JPAClassNature nature = new JPAClassNature(classInfo);
Map<String, String> namedQueriesMap = new HashMap<String, String>();
namedQueriesMap.put(NAME, QUERY);
namedQueriesMap.put(NAME2, QUERY2);
nature.setNamedQuery(namedQueriesMap);
descriptor = new ClassDescriptorImpl();
InfoToDescriptorConverter.convert(classInfo, resolver, descriptor);
Map<String, String> returnedMap = (Map) descriptor
.getProperty(ClassDescriptorJDONature.class.getCanonicalName()
+ "namedQueries");
assertTrue(returnedMap.keySet().contains(NAME));
assertTrue(returnedMap.keySet().contains(NAME2));
assertEquals(QUERY, returnedMap.get(NAME));
assertEquals(QUERY2, returnedMap.get(NAME2));
}
@Test
public void namedNativeQueryInformationWillBeConverted() throws Exception {
classInfo = new ClassInfo();
classInfo.addNature(JPAClassNature.class.getCanonicalName());
classInfo.setDescribedClass(JPANamedNativeQueryTestClass.class);
JPAClassNature nature = new JPAClassNature(classInfo);
Map<String, String> namedNativeQueryMap = new HashMap<String, String>();
namedNativeQueryMap.put(NAME, QUERY);
nature.setNamedNativeQuery(namedNativeQueryMap);
descriptor = new ClassDescriptorImpl();
InfoToDescriptorConverter.convert(classInfo, resolver, descriptor);
Map<String, NamedNativeQuery> returnedMap = (Map) descriptor
.getProperty(ClassDescriptorJDONature.class.getCanonicalName()
+ "namedNativeQueries");
assertEquals(NAME, returnedMap.keySet().iterator().next());
assertEquals(NAME, returnedMap.values().iterator().next().getName());
assertEquals(QUERY, returnedMap.values().iterator().next().getQuery());
}
@Test
public void sequenceGeneratedValueWillBeConverted() throws Exception {
classInfo = ClassInfoBuilder
.buildClassInfo(SequenceGeneratedValueTestClass.class);
descriptor = new ClassDescriptorImpl();
InfoToDescriptorConverter.convert(classInfo, resolver, descriptor);
ClassDescriptorJDONature jdoDescriptor = new ClassDescriptorJDONature(
descriptor);
KeyGeneratorDescriptor generatorDescriptor = jdoDescriptor
.getKeyGeneratorDescriptor();
assertEquals("SEQUENCE",
generatorDescriptor.getKeyGeneratorFactoryName());
Properties generatorParameters = generatorDescriptor.getParams();
assertEquals("test_sequence",
generatorParameters.getProperty("sequence"));
}
@Test
public void tableGeneratedValueWillBeConverted() throws Exception {
classInfo = ClassInfoBuilder
.buildClassInfo(TableGeneratedValueTestClass.class);
descriptor = new ClassDescriptorImpl();
InfoToDescriptorConverter.convert(classInfo, resolver, descriptor);
ClassDescriptorJDONature jdoDescriptor = new ClassDescriptorJDONature(
descriptor);
KeyGeneratorDescriptor generatorDescriptor = jdoDescriptor
.getKeyGeneratorDescriptor();
assertEquals("TABLE", generatorDescriptor.getKeyGeneratorFactoryName());
}
@Test
public void primaryKeyTypeWillBeSetInTableGeneratorDescriptor()
throws Exception {
classInfo = ClassInfoBuilder
.buildClassInfo(TableGeneratedValueTestClass.class);
descriptor = new ClassDescriptorImpl();
InfoToDescriptorConverter.convert(classInfo, resolver, descriptor);
ClassDescriptorJDONature jdoDescriptor = new ClassDescriptorJDONature(
descriptor);
KeyGeneratorDescriptor generatorDescriptor = jdoDescriptor
.getKeyGeneratorDescriptor();
JPATableGeneratorDescriptor jpaDescriptor = (JPATableGeneratorDescriptor) generatorDescriptor
.getParams().get(TableKeyGenerator.DESCRIPTOR_KEY);
assertEquals(Long.class, jpaDescriptor.getPrimaryKeyType());
}
@Test
public void versionFieldWillBeSet() throws Exception {
classInfo = ClassInfoBuilder
.buildClassInfo(VersionTestClass.class);
descriptor = new ClassDescriptorImpl();
InfoToDescriptorConverter.convert(classInfo, resolver, descriptor);
ClassDescriptorJDONature jdoDescriptor = new ClassDescriptorJDONature(
descriptor);
assertEquals("version", jdoDescriptor.getVersionField());
}
@Test
public void namedNativeQueriesInformationWillBeConverted() throws Exception {
classInfo = new ClassInfo();
classInfo.addNature(JPAClassNature.class.getCanonicalName());
classInfo.setDescribedClass(JpaNamedQueriesTestClass.class);
JPAClassNature nature = new JPAClassNature(classInfo);
Map<String, String> namedNativeQueriesMap = new HashMap<String, String>();
namedNativeQueriesMap.put(NAME, QUERY);
namedNativeQueriesMap.put(NAME2, QUERY2);
nature.setNamedNativeQuery(namedNativeQueriesMap);
descriptor = new ClassDescriptorImpl();
InfoToDescriptorConverter.convert(classInfo, resolver, descriptor);
Map<String, NamedNativeQuery> returnedMap = (Map) descriptor
.getProperty(ClassDescriptorJDONature.class.getCanonicalName()
+ "namedNativeQueries");
assertTrue(returnedMap.keySet().contains(NAME));
assertTrue(returnedMap.keySet().contains(NAME2));
assertEquals(NAME, returnedMap.get(NAME).getName());
assertEquals(NAME2, returnedMap.get(NAME2).getName());
assertEquals(QUERY, returnedMap.get(NAME).getQuery());
assertEquals(QUERY2, returnedMap.get(NAME2).getQuery());
}
}