From 80fc0723c8c8cd47cf2611c5196d9c2b980147fe Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 10 Oct 2023 21:24:35 +1300 Subject: [PATCH] Failing test for OneToOne with SoftDelete join missing deleted predicate --- .../model/softdelete/ESoftDelOneBOwner.java | 59 +++++++++++++++++++ .../softdelete/TestSoftDeleteOtoImported.java | 47 +++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 ebean-test/src/test/java/org/tests/model/softdelete/ESoftDelOneBOwner.java create mode 100644 ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteOtoImported.java diff --git a/ebean-test/src/test/java/org/tests/model/softdelete/ESoftDelOneBOwner.java b/ebean-test/src/test/java/org/tests/model/softdelete/ESoftDelOneBOwner.java new file mode 100644 index 000000000..e2303d559 --- /dev/null +++ b/ebean-test/src/test/java/org/tests/model/softdelete/ESoftDelOneBOwner.java @@ -0,0 +1,59 @@ +package org.tests.model.softdelete; + +import io.ebean.annotation.SoftDelete; +import jakarta.persistence.*; + +@SuppressWarnings("unused") +@Entity +public class ESoftDelOneBOwner { + + @Id + long id; + + String name; + + @ManyToOne + ESoftDelOneB oneb; + + @SoftDelete + boolean deleted; + + @Version + long version; + + public ESoftDelOneBOwner(String name) { + this.name = name; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public ESoftDelOneB oneb() { + return oneb; + } + + public void setOneb(ESoftDelOneB oneb) { + this.oneb = oneb; + } + + public long getVersion() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } +} diff --git a/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteOtoImported.java b/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteOtoImported.java new file mode 100644 index 000000000..f420f2bb2 --- /dev/null +++ b/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteOtoImported.java @@ -0,0 +1,47 @@ +package org.tests.softdelete; + +import io.ebean.DB; +import io.ebean.test.LoggedSql; +import io.ebean.xtest.BaseTestCase; +import org.junit.jupiter.api.Test; +import org.tests.model.softdelete.ESoftDelOneA; +import org.tests.model.softdelete.ESoftDelOneB; +import org.tests.model.softdelete.ESoftDelOneBOwner; + +import static org.assertj.core.api.Assertions.assertThat; + +class TestSoftDeleteOtoImported extends BaseTestCase { + + @Test + void extraJoinToOtoImported_expect_softDeletePredicate() { + ESoftDelOneB b = new ESoftDelOneB("xbImported"); + DB.save(b); + + ESoftDelOneA a = new ESoftDelOneA("xaImported"); + a.setOneb(b); + DB.save(a); + + ESoftDelOneBOwner co = new ESoftDelOneBOwner("xoImport"); + co.setOneb(b); + DB.save(co); + + LoggedSql.start(); + var listResult = DB.find(ESoftDelOneBOwner.class) + .where() + .eq("oneb.onea.name", "xaImported") + .findList(); + + var countResult = DB.find(ESoftDelOneBOwner.class) + .where() + .eq("oneb.onea.name", "xaImported") + .findCount(); + + var sql = LoggedSql.stop(); + assertThat(sql).hasSize(2); + + assertThat(listResult).hasSize(1); + assertThat(countResult).isEqualTo(1); + assertThat(sql.get(0)).contains("and t2.deleted = "); + assertThat(sql.get(1)).contains("and t2.deleted = "); + } +}