Is Lifecycle supposed not to work, if the entity/extended interface has no
methods but only Properties? Or am I missing something?

Cheers,
Marc
====================================
package org.qi4j.runtime.entity;

import org.hamcrest.CoreMatchers;
import org.junit.Test;
import org.qi4j.api.entity.EntityBuilder;
import org.qi4j.api.entity.EntityComposite;
import org.qi4j.api.entity.Lifecycle;
import org.qi4j.api.entity.LifecycleException;
import org.qi4j.api.mixin.Mixins;
import org.qi4j.api.property.Immutable;
import org.qi4j.api.property.Property;
import org.qi4j.api.unitofwork.UnitOfWork;
import org.qi4j.bootstrap.AssemblyException;
import org.qi4j.bootstrap.ModuleAssembly;
import org.qi4j.test.AbstractQi4jTest;
import org.qi4j.test.EntityTestAssembler;

import static org.junit.Assert.assertThat;

/**
 * Test for the Lifecycle interface
 */
public class LifecycleTest2
      extends AbstractQi4jTest
{
   public static boolean create;
   public static boolean create2;

   public void assemble( ModuleAssembly module )
         throws AssemblyException
   {
      new EntityTestAssembler().assemble( module );
      module.addEntities( TestEntity.class );
   }

   @Test
   public void whenEntityHasLifecycleWhenInstantiatedThenInvokeCreate()
   {
      UnitOfWork unitOfWork = unitOfWorkFactory.newUnitOfWork();
      try
      {
         EntityBuilder<TestEntity> builder = unitOfWork.newEntityBuilder(
TestEntity.class );
         builder.newInstance();
         unitOfWork.complete();
      }
      catch (Exception e)
      {
         unitOfWork.discard();
      }

      assertThat( "Lifecycle.create() was invoked", create,
CoreMatchers.equalTo( true ) );
   }

   @Test
   public void
whenEntityHasLifecycleAndPropertiesOnlyWhenInstantiatedThenInvokeCreateFails()
   {
      UnitOfWork unitOfWork = unitOfWorkFactory.newUnitOfWork();
      try
      {
         EntityBuilder<TestEntity2> builder = unitOfWork.newEntityBuilder(
TestEntity2.class );
         builder.newInstance();
         unitOfWork.complete();
      }
      catch (Exception e)
      {
         unitOfWork.discard();
      }

      assertThat( "Lifecycle.create() was (not) invoked", create2,
CoreMatchers.equalTo( true ) );
   }

   public interface Testing
   {
      void doSomething();
   }

   @Mixins( TestMixin.class )
   public interface TestEntity
         extends Testing, EntityComposite
   {
   }

   public static class TestMixin
         implements Lifecycle, Testing
   {
      public void create()
            throws LifecycleException
      {
         create = true;
      }

      public void remove() throws LifecycleException {}

      public void doSomething()
      {
         System.out.println( "Test!" );
      }
   }

   public interface Testing2
   {
      // Lifecycle won't work on Properties only...
      Property<String> someString();
   }

   @Mixins( TestMixin2.class )
   public interface TestEntity2
         extends Testing2, EntityComposite
   {
   }

   public static abstract class TestMixin2
         implements Lifecycle, Testing2
   {
      public void create()
            throws LifecycleException
      {
         someString().set( "hi" );
         create2 = true;
      }

      public void remove() throws LifecycleException {}
   }
}
-- 
View this message in context: 
http://old.nabble.com/Lifecycle-not-working-on-properties-only.-Bug--tp30647177p30647177.html
Sent from the Qi4j-dev mailing list archive at Nabble.com.


_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev

Reply via email to