package org.qi4j.sample.scala;
import java.io.IOException;
import org.junit.Assert;
import org.junit.Test;
import org.qi4j.api.constraint.ConstraintViolationException;
import org.qi4j.api.unitofwork.UnitOfWork;
import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
import org.qi4j.bootstrap.AssemblyException;
import org.qi4j.bootstrap.ModuleAssembly;
import org.qi4j.bootstrap.SingletonAssembler;
import org.qi4j.index.rdf.assembly.RdfMemoryStoreAssembler;
import org.qi4j.lang.scala.ScalaTraitMixin;
import org.qi4j.spi.query.IndexExporter;
import org.qi4j.test.EntityTestAssembler;
import static org.qi4j.api.query.QueryExpressions.eq;
import static org.qi4j.api.query.QueryExpressions.templateFor;
/**
* TODO
*/
public class HelloWorldCompositeTest
{
@Test
public void testComposite()
{
SingletonAssembler assembler = new SingletonAssembler()
{
@Override
public void assemble( ModuleAssembly module )
throws AssemblyException
{
module.transients( HelloWorldComposite.class, HelloWorldComposite2.class ).
withMixins( ScalaTraitMixin.class ).
withConcerns( ExclamationGenericConcern.class );
}
};
HelloWorldComposite composite = assembler.module().newTransient( HelloWorldComposite.class );
Assert.assertEquals( "Do stuff!", composite.doStuff() );
Assert.assertEquals( "Hello there World!", composite.sayHello( "World" ) );
try
{
composite.sayHello( "AReallyReallyLongName" );
}
catch( ConstraintViolationException e )
{
// Ok!
}
HelloWorldComposite2 composite2 = assembler.module().newTransient( HelloWorldComposite2.class );
Assert.assertEquals( "Do custom stuff!", composite2.doStuff() );
}
@Test
public void testEntity()
throws UnitOfWorkCompletionException, IOException
{
SingletonAssembler assembler = new SingletonAssembler()
{
@Override
public void assemble( ModuleAssembly module )
throws AssemblyException
{
module.entities( TestEntity.class ).withMixins( ScalaTraitMixin.class );
module.services( TestService.class ).withMixins( ScalaTraitMixin.class );
new EntityTestAssembler().assemble( module );
new RdfMemoryStoreAssembler().assemble( module );
}
};
// Create and update Entity
UnitOfWork uow = assembler.module().newUnitOfWork();
try
{
Commands entity = uow.newEntity( Commands.class );
entity.updateFoo( "Foo" );
Data data = uow.get( Data.class, entity.toString() );
Assert.assertEquals( "FooFoo", data.foo().get() );
}
finally
{
uow.complete();
}
assembler.module().findService( IndexExporter.class ).get().exportReadableToStream( System.out );
// Find it
uow = assembler.module().newUnitOfWork();
try
{
Data data = uow.newQuery( assembler.module()
.newQueryBuilder( Data.class )
.where( eq( templateFor( Data.class ).foo(), "FooFoo" ) ) ).find();
Assert.assertEquals( "FooFoo", data.foo().get() );
}
finally
{
uow.discard();
}
}
}