package org.tynamo.hibernate;
import org.apache.tapestry5.hibernate.modules.HibernateCoreModule;
import org.apache.tapestry5.hibernate.modules.HibernateModule;
import org.apache.tapestry5.ioc.Registry;
import org.apache.tapestry5.ioc.RegistryBuilder;
import org.apache.tapestry5.modules.TapestryModule;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import org.tynamo.descriptor.EmbeddedDescriptor;
import org.tynamo.descriptor.TynamoClassDescriptor;
import org.tynamo.descriptor.TynamoPropertyDescriptor;
import org.tynamo.hibernate.services.TynamoHibernateModule;
import org.tynamo.model.test.entities.Embeddee;
import org.tynamo.model.test.entities.Embeddor;
import org.tynamo.services.DescriptorService;
import org.tynamo.services.TynamoCoreModule;
/**
* https://jira.codehaus.org/browse/TYNAMO-22
*
* Properties in embeddable (@Embeddable) components are not being identified by the TynamoDataTypeAnalyzer, because there
* is no classDescriptor for Embeddables in the descriptorService.
*
*/
public class DescriptorServiceAndEmbeddalesTest
{
private DescriptorService descriptorService;
private static Registry registry;
@BeforeSuite
public final void setup_registry()
{
RegistryBuilder builder = new RegistryBuilder();
builder.add(TapestryModule.class);
builder.add(HibernateCoreModule.class);
builder.add(HibernateModule.class);
builder.add(TynamoCoreModule.class);
builder.add(TynamoHibernateModule.class);
// builder.add(TynamoHibernate4Module.class);
builder.add(TestModule.class);
registry = builder.build();
registry.performRegistryStartup();
descriptorService = registry.getService(DescriptorService.class);
}
@AfterSuite
public final void shutdown_registry()
{
registry.shutdown();
registry = null;
}
@AfterMethod
public final void cleanupThread()
{
registry.cleanupThread();
}
@Test
public void there_should_be_classDescriptor_for_embedable_in_descriptorService() throws Exception
{
TynamoClassDescriptor embeddorDescriptor = descriptorService.getClassDescriptor(Embeddor.class);
TynamoPropertyDescriptor embeddeePropertyDescriptor = embeddorDescriptor.getPropertyDescriptor("embeddee");
Assert.assertTrue(embeddeePropertyDescriptor.isEmbedded());
EmbeddedDescriptor embeddedDescriptor = (EmbeddedDescriptor) embeddeePropertyDescriptor;
Assert.assertEquals("embeddee", embeddedDescriptor.getName());
Assert.assertEquals(Embeddor.class, embeddedDescriptor.getBeanType(), "right bean type");
Assert.assertEquals(embeddedDescriptor.getEmbeddedClassDescriptor().getPropertyDescriptors().size(), 3, "3 prop descriptors");
Assert.assertNotNull(descriptorService.getClassDescriptor(Embeddee.class));
}
}