From 30327fe33eb398298e08a203b2d8b488aaca32f0 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 2 Sep 2024 08:25:19 +1200 Subject: [PATCH] Improve existing test asserts around order by clause (#3467) --- .../src/test/java/org/tests/basic/TestFetchId.java | 6 ++++++ .../tests/batchload/TestQueryJoinToAssocOne.java | 1 + .../java/org/tests/cascade/TestOrderedList.java | 2 +- .../java/org/tests/query/TestManyWhereJoin.java | 1 + .../java/org/tests/query/TestQueryFilterMany.java | 2 ++ .../org/tests/query/TestQueryFilterManyOnM2M.java | 10 ++++++++++ .../org/tests/query/TestQueryFilterManySimple.java | 13 +++++++++++++ .../src/test/java/org/tests/query/TestRowCount.java | 12 ++++++++---- 8 files changed, 42 insertions(+), 5 deletions(-) diff --git a/ebean-test/src/test/java/org/tests/basic/TestFetchId.java b/ebean-test/src/test/java/org/tests/basic/TestFetchId.java index 00fb022527..80eecd2a76 100644 --- a/ebean-test/src/test/java/org/tests/basic/TestFetchId.java +++ b/ebean-test/src/test/java/org/tests/basic/TestFetchId.java @@ -1,5 +1,6 @@ package org.tests.basic; +import io.ebean.test.LoggedSql; import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.FutureIds; @@ -28,8 +29,13 @@ public void testFetchId() throws InterruptedException, ExecutionException { .gt("details.id", 0) .query(); + LoggedSql.start(); List ids = query.findIds(); assertThat(ids).isNotEmpty(); + List sql = LoggedSql.stop(); + assertThat(sql).hasSize(1); + assertThat(sql.get(0)).doesNotContain("order by"); + assertThat(sql.get(0)).doesNotContain("join o_order_detail t1"); FutureIds futureIds = query.findFutureIds(); diff --git a/ebean-test/src/test/java/org/tests/batchload/TestQueryJoinToAssocOne.java b/ebean-test/src/test/java/org/tests/batchload/TestQueryJoinToAssocOne.java index 3a4eeb6752..56e547d6d1 100644 --- a/ebean-test/src/test/java/org/tests/batchload/TestQueryJoinToAssocOne.java +++ b/ebean-test/src/test/java/org/tests/batchload/TestQueryJoinToAssocOne.java @@ -230,5 +230,6 @@ public void testJoinOnPartiallyPopulatedParent_withLazyLoadingDisabled() { String originQuery = trimSql(loggedSql.get(0), 5); assertThat(originQuery).contains("select t0.id, t0.status, t0.ship_date, t1.id, t1.order_qty, t1.unit_price"); assertThat(originQuery).contains(" from o_order t0 left join o_order_detail t1 "); + assertThat(originQuery).contains(" order by t0.id, t1.id asc, t1.order_qty asc, t1.cretime desc;"); } } diff --git a/ebean-test/src/test/java/org/tests/cascade/TestOrderedList.java b/ebean-test/src/test/java/org/tests/cascade/TestOrderedList.java index 15ceacfc8b..695d72548f 100644 --- a/ebean-test/src/test/java/org/tests/cascade/TestOrderedList.java +++ b/ebean-test/src/test/java/org/tests/cascade/TestOrderedList.java @@ -185,7 +185,7 @@ public void testModifyListWithCache() { DB.save(masterDb); masterDb = DB.find(OmCacheOrderedMaster.class, master.getId()); - assertThat(masterDb.getDetails()).containsExactly(detail3, detail1); + assertThat(masterDb.getDetails()).containsExactlyInAnyOrder(detail3, detail1); } } diff --git a/ebean-test/src/test/java/org/tests/query/TestManyWhereJoin.java b/ebean-test/src/test/java/org/tests/query/TestManyWhereJoin.java index 3cacc5208d..2f4701ddd4 100644 --- a/ebean-test/src/test/java/org/tests/query/TestManyWhereJoin.java +++ b/ebean-test/src/test/java/org/tests/query/TestManyWhereJoin.java @@ -181,5 +181,6 @@ public void testUsingForeignKeyAndFetch() { // additional join for fetching the many details assertThat(sql).contains(" left join o_order_detail t1 on t1.order_id = t0.id"); + assertThat(sql).contains("order by t0.cretime, t0.id, t1.id asc, t1.order_qty asc, t1.cretime desc"); } } diff --git a/ebean-test/src/test/java/org/tests/query/TestQueryFilterMany.java b/ebean-test/src/test/java/org/tests/query/TestQueryFilterMany.java index 6c4a3915b2..70a99047eb 100644 --- a/ebean-test/src/test/java/org/tests/query/TestQueryFilterMany.java +++ b/ebean-test/src/test/java/org/tests/query/TestQueryFilterMany.java @@ -213,6 +213,7 @@ public void test_with_findOne_rawSameQuery() { assertThat(sql).hasSize(1); assertThat(sql.get(0)).contains("from o_customer t0 left join o_order t1"); assertThat(sql.get(0)).contains("where t1.order_date is not null"); + assertThat(sql.get(0)).contains("order by t0.id"); } @Test @@ -269,6 +270,7 @@ public void test_filterMany_in_findCount() { List sqlList = LoggedSql.stop(); assertEquals(1, sqlList.size()); assertThat(sqlList.get(0)).contains("select count(*) from o_customer"); + assertThat(sqlList.get(0)).doesNotContain("order by"); } @Test diff --git a/ebean-test/src/test/java/org/tests/query/TestQueryFilterManyOnM2M.java b/ebean-test/src/test/java/org/tests/query/TestQueryFilterManyOnM2M.java index 55690536e6..af4104ba95 100644 --- a/ebean-test/src/test/java/org/tests/query/TestQueryFilterManyOnM2M.java +++ b/ebean-test/src/test/java/org/tests/query/TestQueryFilterManyOnM2M.java @@ -1,17 +1,27 @@ package org.tests.query; +import io.ebean.test.LoggedSql; import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import org.junit.jupiter.api.Test; import org.tests.model.basic.MUser; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + public class TestQueryFilterManyOnM2M extends BaseTestCase { @Test public void test() { + LoggedSql.start(); DB.find(MUser.class).fetch("roles").filterMany("roles").ilike("roleName", "Jim%").findList(); + List sql = LoggedSql.stop(); + assertThat(sql).hasSize(1); + assertThat(sql.get(0)).contains("select t0.userid, t0.user_name, t0.user_type_id, t1.roleid, t1.role_name from muser t0 left join mrole_muser t1z_ on t1z_.muser_userid = t0.userid left join mrole t1 on t1.roleid = t1z_.mrole_roleid where lower(t1.role_name) like"); + assertThat(sql.get(0)).contains("order by t0.userid;"); } } diff --git a/ebean-test/src/test/java/org/tests/query/TestQueryFilterManySimple.java b/ebean-test/src/test/java/org/tests/query/TestQueryFilterManySimple.java index c9af3e2cea..482a70e45b 100644 --- a/ebean-test/src/test/java/org/tests/query/TestQueryFilterManySimple.java +++ b/ebean-test/src/test/java/org/tests/query/TestQueryFilterManySimple.java @@ -1,5 +1,6 @@ package org.tests.query; +import io.ebean.test.LoggedSql; import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import org.junit.jupiter.api.Test; @@ -10,6 +11,8 @@ import java.sql.Date; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; + public class TestQueryFilterManySimple extends BaseTestCase { @Test @@ -20,6 +23,7 @@ public void test() { // not really last week :) Date lastWeek = Date.valueOf("2010-01-01"); + LoggedSql.start(); List list = DB.find(Customer.class) // .join("orders", new JoinConfig().lazy()) // .join("orders", new JoinConfig().query()) @@ -29,5 +33,14 @@ public void test() { // invoke lazy loading list.get(0).getOrders().size(); + List sql = LoggedSql.stop(); + assertThat(sql).hasSize(2); + assertThat(sql.get(0)).contains("from o_customer t0 left join o_order t1 on t1.kcustomer_id = t0.id and t1.order_date is not null left join o_customer t2 on t2.id = t1.kcustomer_id where"); + assertThat(sql.get(0)).contains("order by t0.id"); + if (isPostgresCompatible()) { + assertThat(sql.get(1)).contains("from contact t0 where (t0.customer_id) = any(?) and t0.first_name is not null;"); + } else { + assertThat(sql.get(1)).contains("from contact t0 where (t0.customer_id) in (?) and t0.first_name is not null;"); + } } } diff --git a/ebean-test/src/test/java/org/tests/query/TestRowCount.java b/ebean-test/src/test/java/org/tests/query/TestRowCount.java index 627b9e883b..b65ce9591a 100644 --- a/ebean-test/src/test/java/org/tests/query/TestRowCount.java +++ b/ebean-test/src/test/java/org/tests/query/TestRowCount.java @@ -1,5 +1,6 @@ package org.tests.query; +import io.ebean.test.LoggedSql; import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.Query; @@ -17,9 +18,9 @@ public class TestRowCount extends BaseTestCase { @Test public void test() { - ResetBasicData.reset(); + LoggedSql.start(); Query query = DB.find(Order.class) .fetch("details") .where() @@ -28,11 +29,14 @@ public void test() { .order("id desc").query(); int rc = query.findCount(); - List ids = query.findIds(); - List list = query.findList(); - System.out.println(list); + + List sql = LoggedSql.stop(); + assertThat(sql).hasSize(3); + assertThat(sql.get(0)).doesNotContain("order by"); + assertThat(sql.get(1)).contains("order by"); + assertThat(sql.get(2)).contains("order by t0.id desc"); for (Order order : list) { order.getStatus(); }