diff --git a/ebean-test/src/test/java/org/tests/o2m/TestOneToManyEnhancement.java b/ebean-test/src/test/java/org/tests/o2m/TestOneToManyEnhancement.java new file mode 100644 index 000000000..be1936e6a --- /dev/null +++ b/ebean-test/src/test/java/org/tests/o2m/TestOneToManyEnhancement.java @@ -0,0 +1,29 @@ +package org.tests.o2m; + +import io.ebean.BaseTestCase; +import io.ebean.common.BeanList; +import org.junit.jupiter.api.Test; +import org.tests.model.json.EBasicJsonMap; +import org.tests.o2m.lazy.OmlBaz; +import org.tests.o2m.lazy.OmlFoo; + +import static org.assertj.core.api.Assertions.assertThat; + +class TestOneToManyEnhancement extends BaseTestCase { + + @Test + void test_when_constructorAddsEntry() { + OmlFoo foo = new OmlFoo(new OmlBaz()); + + assertThat(foo.getBazList()).isInstanceOf(BeanList.class); + assertThat(foo.getBazList()).isNotEmpty(); + } + + @Test + void test_commonCase() { + EBasicJsonMap bean = new EBasicJsonMap(); + + assertThat(bean.getDetails()).isInstanceOf(BeanList.class); + assertThat(bean.getDetails()).isEmpty(); + } +} diff --git a/ebean-test/src/test/java/org/tests/o2m/lazy/OmlFoo.java b/ebean-test/src/test/java/org/tests/o2m/lazy/OmlFoo.java index 8195d1757..c460d5d50 100644 --- a/ebean-test/src/test/java/org/tests/o2m/lazy/OmlFoo.java +++ b/ebean-test/src/test/java/org/tests/o2m/lazy/OmlFoo.java @@ -15,7 +15,12 @@ public class OmlFoo { private OmlBar bar; @OneToMany(mappedBy = "foo", cascade = CascadeType.ALL) - private List bazList = new ArrayList(); + private List bazList = new ArrayList<>(); + + public OmlFoo(OmlBaz baz) { + bazList.add(baz); + baz.setFoo(this); + } public Long getId() { return id; diff --git a/ebean-test/src/test/java/org/tests/o2m/lazy/TestLazyManyViaPath.java b/ebean-test/src/test/java/org/tests/o2m/lazy/TestLazyManyViaPath.java index f6c41bebe..e94d21fa9 100644 --- a/ebean-test/src/test/java/org/tests/o2m/lazy/TestLazyManyViaPath.java +++ b/ebean-test/src/test/java/org/tests/o2m/lazy/TestLazyManyViaPath.java @@ -13,11 +13,9 @@ public class TestLazyManyViaPath extends BaseTestCase { @Test public void test() { - OmlBar bar = new OmlBar(); List fooList = new ArrayList<>(); fooList.add(createNewFooWithBar(bar)); - bar.setFooList(fooList); DB.save(bar); @@ -30,26 +28,24 @@ public class TestLazyManyViaPath extends BaseTestCase { // This works List foosList = fooFromDb.getBar().getFooList(); - assertThat(fooList.size()).isEqualTo(1); + assertThat(foosList).hasSize(1); + assertThat(fooList).hasSize(1); OmlBaz bazFromDb = DB .find(OmlBaz.class) .where() .eq("id", bar.getFooList().get(0).getBazList().get(0).getId()) .findOne(); + assert bazFromDb != null; // This does not work and gives the exception List foosList1 = bazFromDb.getFoo().getBar().getFooList(); assertThat(foosList1.size()).isEqualTo(1); - } private static OmlFoo createNewFooWithBar(OmlBar bar) { - OmlFoo foo = new OmlFoo(); + OmlFoo foo = new OmlFoo(new OmlBaz()); foo.setBar(bar); - OmlBaz baz = new OmlBaz(); - baz.setFoo(foo); - foo.getBazList().add(baz); return foo; } diff --git a/tests/test-kotlin/src/test/kotlin/io/ebean/test/kotlin/OneToManyEnhancementTest.kt b/tests/test-kotlin/src/test/kotlin/io/ebean/test/kotlin/OneToManyEnhancementTest.kt new file mode 100644 index 000000000..e506115e2 --- /dev/null +++ b/tests/test-kotlin/src/test/kotlin/io/ebean/test/kotlin/OneToManyEnhancementTest.kt @@ -0,0 +1,18 @@ +package io.ebean.test.kotlin + +import io.ebean.common.BeanList +import org.assertj.core.api.Assertions.assertThat +import org.example.order.Customer +import org.example.order.Order +import org.junit.jupiter.api.Test + +class OneToManyEnhancementTest { + + @Test + fun `o2m is BeanCollection`() { + val customer = Customer("foo") + val order = Order(customer) + + assertThat(order.items).isInstanceOf(BeanList::class.java) + } +}