package de.flower.rmt.ui.model; import de.flower.common.model.db.entity.IEntity; import org.apache.wicket.model.Model; import org.testng.annotations.Test; import java.io.Serializable; import static org.testng.Assert.*; /** * @author flowerrrr */ public class AbstractEntityModelTest { @Test public void testEmptyConstructor() { TestModel model = new TestModel(); TestEntity object = model.getObject(); assertNull(object.getId()); assertTrue(model.newInstance); } @Test public void testEntityConstructor() { TestEntity entity = new TestEntity(1L); TestModel model = new TestModel(entity); TestEntity object = model.getObject(); assertEquals(object, entity); assertFalse(model.load); // now detach model -> entity instance will be newly loaded model.detach(); object = model.getObject(); assertTrue(model.load); assertNotEquals(object, entity); assertEquals(object.getId(), entity.getId()); } @Test public void testTransientEntityConstructor() { TestEntity entity = new TestEntity(null); TestModel model = new TestModel(entity); TestEntity object = model.getObject(); assertEquals(object, entity); assertFalse(model.newInstance); // now detach model -> entity instance will be newly loaded model.detach(); object = model.getObject(); assertNotEquals(object, entity); assertNull(object.getId()); assertTrue(model.newInstance); } @Test public void testWrappedModel() { TestEntity entity = new TestEntity(1L); TestModel model = new TestModel(Model.of(entity)); TestEntity object = model.getObject(); assertEquals(object, entity); assertFalse(model.load); // now detach model -> call to load model.detach(); object = model.getObject(); assertTrue(model.load); assertNotEquals(object, entity); assertEquals(object.getId(), entity.getId()); } @Test public void testWrappedTransientModel() { TestEntity entity = new TestEntity(null); TestModel model = new TestModel(Model.of(entity)); TestEntity object = model.getObject(); assertEquals(object, entity); assertFalse(model.newInstance); // now detach model -> call to load model.detach(); object = model.getObject(); assertNotEquals(object, entity); assertNull(object.getId()); assertTrue(model.newInstance); } private static class TestModel extends AbstractEntityModel<TestEntity> { public boolean load; public boolean newInstance; public TestModel(final TestEntity entity) { super(entity); } public TestModel() { super(); } public TestModel(final Model<TestEntity> model) { super(model); } @Override protected void init() { ; // empty implementation, no need for Injector to work in this test. } @Override protected TestEntity load(final Long id) { load = true; return new TestEntity(id); } @Override protected TestEntity newInstance() { newInstance = true; return new TestEntity(null); } } private static class TestEntity implements IEntity, Serializable { Long id; public TestEntity(final Long id) { setId(id); } @Override public boolean isNew() { return id == null; } public Long getId() { return id; } public void setId(final Long id) { this.id = id; } } }