@Test
public void entitiesAmbiguousDeclaration()
throws UnitOfWorkCompletionException, ActivationException, AssemblyException
{
Module module = new SingletonAssembler()
{
@Override
public void assemble( ModuleAssembly module )
throws AssemblyException
{
new EntityTestAssembler().assemble( module );
module.entities( SomeOtherFoo.class, BasicFoo.class );
}
}.module();
UnitOfWork uow = module.newUnitOfWork();
SomeOtherFoo someOtherFoo = uow.newEntityBuilder( SomeOtherFoo.class ).newInstance();
BasicFoo basicFoo = uow.newEntityBuilder( BasicFoo.class ).newInstance();
try
{
uow.newEntityBuilder( Foo.class ).newInstance();
fail( "Ambiguous type exception not detected for Entities" );
}
catch( AmbiguousTypeException expected )
{
}
// Specific Type used
assertEquals( CATHEDRAL, uow.newEntityBuilder( SomeOtherFoo.class ).newInstance().bar() );
// Specific Type used
assertEquals( BAZAR, uow.newEntityBuilder( BasicFoo.class ).newInstance().bar() );
String someOtherFooIdentity = ( (Identity) someOtherFoo ).identity().get();
String basicFooIdentity = ( (Identity) basicFoo ).identity().get();
uow.complete();
uow = module.newUnitOfWork();
assertEquals( CATHEDRAL, uow.get( SomeOtherFoo.class, someOtherFooIdentity ).bar() );
assertEquals( BAZAR, uow.get( BasicFoo.class, basicFooIdentity ).bar() );
assertEquals( CATHEDRAL, uow.get( Foo.class, someOtherFooIdentity ).bar() );
assertEquals( BAZAR, uow.get( Foo.class, basicFooIdentity ).bar() );