From b848587cd3203721fb472784e761a6181fc93982 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Wed, 5 Oct 2016 21:51:04 +0200 Subject: [PATCH] ADD: Testcases for PostConstruct --- .../lifecycle/TestLifecycleAnnotatedBean.java | 58 +++++++++++++++++++ .../model/basic/EBasicWithLifecycle.java | 11 ++++ 2 files changed, 69 insertions(+) diff --git a/src/test/java/com/avaje/tests/lifecycle/TestLifecycleAnnotatedBean.java b/src/test/java/com/avaje/tests/lifecycle/TestLifecycleAnnotatedBean.java index 6d4f954fc..aab8519e7 100644 --- a/src/test/java/com/avaje/tests/lifecycle/TestLifecycleAnnotatedBean.java +++ b/src/test/java/com/avaje/tests/lifecycle/TestLifecycleAnnotatedBean.java @@ -2,6 +2,8 @@ package com.avaje.tests.lifecycle; import com.avaje.ebean.BaseTestCase; import com.avaje.ebean.Ebean; +import com.avaje.ebeaninternal.api.SpiEbeanServer; +import com.avaje.ebeaninternal.server.deploy.BeanDescriptor; import com.avaje.tests.model.basic.EBasicWithLifecycle; import org.junit.Test; @@ -101,4 +103,60 @@ public class TestLifecycleAnnotatedBean extends BaseTestCase { assertThat(bean.getBuffer()).contains("postRemove1"); assertThat(bean.getBuffer()).contains("postRemove2"); } + @Test + public void shouldExecutePostConstructMethodsWhenFindingBean() { + + EBasicWithLifecycle bean = new EBasicWithLifecycle(); + bean.setName("PostConstruct"); + + Ebean.save(bean); + + EBasicWithLifecycle loaded = Ebean.find(EBasicWithLifecycle.class, bean.getId()); + assertThat(loaded.getBuffer()).contains("postConstruct1"); + assertThat(loaded.getBuffer()).contains("postConstruct2"); + // assert also that postLoad was executed + assertThat(loaded.getBuffer()).contains("postLoad1"); + assertThat(loaded.getBuffer()).contains("postLoad2"); + } + + @Test + public void shouldExecutePostConstructMethodsWhenInstantiated() { + EBasicWithLifecycle bean = Ebean.getDefaultServer().createEntityBean(EBasicWithLifecycle.class); + bean.setName("PostConstruct"); + + + assertThat(bean.getBuffer()).contains("postConstruct1"); + assertThat(bean.getBuffer()).contains("postConstruct2"); + // assert also that postLoad is not executed now + assertThat(bean.getBuffer()).doesNotContain("postLoad1"); + assertThat(bean.getBuffer()).doesNotContain("postLoad2"); + } + + + + @Test + public void testLazyLoadBehaviour() { + + EBasicWithLifecycle bean = new EBasicWithLifecycle(); + bean.setName("LazyLoad"); + + Ebean.save(bean); + + BeanDescriptor desc = ((SpiEbeanServer)server()).getBeanDescriptor(EBasicWithLifecycle.class); + EBasicWithLifecycle loaded = desc.createReference(false, false, bean.getId(), null); + + // Here you see the big difference. + // @PostLoad is executed always, also on lazy loaded beans + assertThat(loaded.getBuffer()).contains("postConstruct1"); + assertThat(loaded.getBuffer()).contains("postConstruct2"); + + // assert also that postLoad is not yet executed + assertThat(loaded.getBuffer()).doesNotContain("postLoad1"); + assertThat(loaded.getBuffer()).doesNotContain("postLoad2"); + + // now read name -> will load the bean + assertThat(loaded.getName()).isEqualTo("LazyLoad"); + assertThat(loaded.getBuffer()).contains("postLoad1"); + assertThat(loaded.getBuffer()).contains("postLoad2"); + } } diff --git a/src/test/java/com/avaje/tests/model/basic/EBasicWithLifecycle.java b/src/test/java/com/avaje/tests/model/basic/EBasicWithLifecycle.java index f3b79f704..f3fe13160 100644 --- a/src/test/java/com/avaje/tests/model/basic/EBasicWithLifecycle.java +++ b/src/test/java/com/avaje/tests/model/basic/EBasicWithLifecycle.java @@ -1,5 +1,6 @@ package com.avaje.tests.model.basic; +import javax.annotation.PostConstruct; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.PostLoad; @@ -96,6 +97,16 @@ public class EBasicWithLifecycle { buffer.append("postLoad2"); } + @PostConstruct + public void postConstruct1() { + buffer.append("postConstruct1"); + } + + @PostConstruct + public void postConstruct2() { + buffer.append("postConstruct2"); + } + public Long getId() { return id; }