Refactor tests, move some internal expression tests to ebean-core

This commit is contained in:
Rob Bygrave committed 2022-03-27 19:55:34 +13:00
1 parent 28088a5e54
commit e3e5414157
37 files changed
+221 -97

No files matched your search

@@ -1,18 +1,18 @@
package io.ebeaninternal.server.expression; package io.ebeaninternal.server.expression;
import io.ebean.xtest.BaseTestCase;
import io.ebean.EbeanServer; import io.ebean.EbeanServer;
import io.ebean.Query; import io.ebean.Query;
import io.ebean.Transaction; import io.ebean.Transaction;
import io.ebean.event.BeanQueryRequest; import io.ebean.event.BeanQueryRequest;
import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpression;
import io.ebeaninternal.server.deploy.BaseTest;
import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.deploy.BeanDescriptor;
import org.tests.model.basic.Customer; import org.tests.model.basic.Customer;
import org.tests.model.basic.Order; import org.tests.model.basic.Order;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
public abstract class BaseExpressionTest extends BaseTestCase { public abstract class BaseExpressionTest extends BaseTest {
protected DefaultExpressionRequest newExpressionRequest() { protected DefaultExpressionRequest newExpressionRequest() {
BeanDescriptor<Order> desc = getBeanDescriptor(Order.class); BeanDescriptor<Order> desc = getBeanDescriptor(Order.class);
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.expression; package io.ebeaninternal.server.expression;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@@ -14,7 +15,7 @@ public class BetweenPropertyExpressionTest extends BaseExpressionTest {
public void sqlExpression() { public void sqlExpression() {
TDSpiExpressionRequest request = new TDSpiExpressionRequest(null); TDSpiExpressionRequest request = new TDSpiExpressionRequest(null);
exp("a", "b", 10).addSql(request); exp("a", "b", 10).addSql(request);
assertThat(request.getSql()).isEqualTo(" ? between a and b"); Assertions.assertThat(request.getSql()).isEqualTo(" ? between a and b");
} }
@Test @Test
@@ -1,19 +1,16 @@
package io.ebeaninternal.server.expression; package io.ebeaninternal.server.expression;
import io.ebean.LikeType; import io.ebean.LikeType;
import io.ebean.Query;
import io.ebean.bean.EntityBean; import io.ebean.bean.EntityBean;
import io.ebean.event.BeanQueryRequest; import io.ebean.event.BeanQueryRequest;
import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.ManyWhereJoins;
import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.server.core.OrmQueryRequest; import io.ebeaninternal.server.core.OrmQueryRequest;
import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.deploy.BeanDescriptor;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.tests.model.basic.Address; import org.tests.model.basic.Address;
import org.tests.model.basic.Customer; import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import static org.assertj.core.api.Assertions.assertThat;
public class DefaultExampleExpressionTest extends BaseExpressionTest { public class DefaultExampleExpressionTest extends BaseExpressionTest {
@@ -72,43 +69,9 @@ public class DefaultExampleExpressionTest extends BaseExpressionTest {
TDSpiExpressionRequest req = new TDSpiExpressionRequest(customerBeanDescriptor()); TDSpiExpressionRequest req = new TDSpiExpressionRequest(customerBeanDescriptor());
expr.addBindValues(req); expr.addBindValues(req);
assertThat(req.bindValues).contains("name", "billingAddress.city"); Assertions.assertThat(req.bindValues).contains("name", "billingAddress.city");
Customer customer = customer();
customer.setName("Rob");
customer.getBillingAddress().setCity("Auckland");
ResetBasicData.reset();
Query<Customer> query1 = server().find(Customer.class)
.where().exampleLike(customer)
.query();
query1.findList();
assertThat(query1.getGeneratedSql()).contains("(t0.name like ");
assertThat(query1.getGeneratedSql()).contains(" and t1.city like ");
} }
@Test
public void emptyExampleBean() {
ResetBasicData.reset();
Customer customer = new Customer();
Query<Customer> query = server().find(Customer.class)
.where()
.eq("status", Customer.Status.NEW)
.exampleLike(customer)
.startsWith("name", "Rob")
.query();
query.findList();
assertThat(sqlOf(query)).contains("and 1=1 and t0.name like");
}
private <T> OrmQueryRequest<T> create(SpiQuery<T> query) { private <T> OrmQueryRequest<T> create(SpiQuery<T> query) {
return new OrmQueryRequest<>(null, null, query, null); return new OrmQueryRequest<>(null, null, query, null);
@@ -2,50 +2,29 @@ package io.ebeaninternal.server.expression;
import io.ebean.DB; import io.ebean.DB;
import io.ebean.Query; import io.ebean.Query;
import io.ebean.test.LoggedSql;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer; import org.tests.model.basic.Customer;
import org.tests.model.onetoone.album.Cover;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
public class NoopExpressionTest extends BaseExpressionTest { public class NoopExpressionTest extends BaseExpressionTest {
@Test @Test
public void test() { public void test() {
initTables();
Query<Customer> query = DB.find(Customer.class) Query<Customer> query = DB.find(Customer.class)
.select("id") .select("id")
.where().add(NoopExpression.INSTANCE) .where().add(NoopExpression.INSTANCE)
.query(); .query();
query.findList(); query.findList();
String generatedSql = sqlOf(query); String generatedSql = query.getGeneratedSql();
assertThat(generatedSql).contains("select t0.id from o_customer t0 where 1=1"); assertThat(generatedSql).contains("select t0.id from o_customer t0 where 1=1");
} }
@Test
public void test_withSoftDeleteBean() {
Query<Cover> query = DB.find(Cover.class)
.where().add(NoopExpression.INSTANCE)
.query();
LoggedSql.start();
query.findCount();
List<String> sql = LoggedSql.stop();
assertSql(sql.get(0)).contains("select count(*) from cover t0 where 1=1 and");
}
@Test @Test
public void test_withPreAndPost() { public void test_withPreAndPost() {
initTables();
Query<Customer> query = DB.find(Customer.class) Query<Customer> query = DB.find(Customer.class)
.select("id") .select("id")
.where().eq("name", null) .where().eq("name", null)
@@ -54,7 +33,7 @@ public class NoopExpressionTest extends BaseExpressionTest {
.query(); .query();
query.findList(); query.findList();
String generatedSql = sqlOf(query); String generatedSql = query.getGeneratedSql();
assertThat(generatedSql).contains("select t0.id from o_customer t0 where t0.name is null and 1=1 and t0.status is not null"); assertThat(generatedSql).contains("select t0.id from o_customer t0 where t0.name is null and 1=1 and t0.status is not null");
} }
@@ -1,9 +1,9 @@
package io.ebeaninternal.server.expression; package io.ebeaninternal.server.expression;
import io.ebean.xtest.BaseTestCase;
import io.ebean.DB; import io.ebean.DB;
import io.ebean.ExpressionList; import io.ebean.ExpressionList;
import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpression;
import io.ebeaninternal.server.deploy.BaseTest;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.tests.model.basic.Order; import org.tests.model.basic.Order;
@@ -12,7 +12,7 @@ import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertNull;
public class PrepareDocNestedTest extends BaseTestCase { public class PrepareDocNestedTest extends BaseTest {
@Test @Test
public void prepare() throws Exception { public void prepare() throws Exception {
@@ -1,19 +1,21 @@
package io.ebeaninternal.server.querydefn; package io.ebeaninternal.server.querydefn;
import io.ebean.xtest.BaseTestCase; import io.ebean.*;
import io.ebean.CacheMode;
import io.ebean.DB;
import io.ebeaninternal.api.BindValuesKey; import io.ebeaninternal.api.BindValuesKey;
import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.server.core.DefaultServer;
import io.ebeaninternal.server.core.OrmQueryRequest; import io.ebeaninternal.server.core.OrmQueryRequest;
import io.ebeaninternal.server.core.OrmQueryRequestTestHelper;
import io.ebeaninternal.server.deploy.BaseTest;
import io.ebeaninternal.server.expression.BaseExpressionTest;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer; import org.tests.model.basic.Customer;
import org.tests.model.basic.Order; import org.tests.model.basic.Order;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
public class DefaultOrmQueryTest extends BaseTestCase { public class DefaultOrmQueryTest extends BaseExpressionTest {
@Test @Test
public void when_forUpdate_then_excludeFromBeanCache() { public void when_forUpdate_then_excludeFromBeanCache() {
@@ -105,10 +107,10 @@ public class DefaultOrmQueryTest extends BaseTestCase {
private <T> void prepare(DefaultOrmQuery<T> q1, DefaultOrmQuery<T> q2) { private <T> void prepare(DefaultOrmQuery<T> q1, DefaultOrmQuery<T> q2) {
OrmQueryRequest<T> r1 = createQueryRequest(SpiQuery.Type.LIST, q1, null); OrmQueryRequest<T> r1 = OrmQueryRequestTestHelper.queryRequest(q1);
q1.prepare(r1); q1.prepare(r1);
OrmQueryRequest<T> r2 = createQueryRequest(SpiQuery.Type.LIST, q2, null); OrmQueryRequest<T> r2 = OrmQueryRequestTestHelper.queryRequest(q2);
q2.prepare(r2); q2.prepare(r2);
} }
@@ -1,6 +1,6 @@
package io.ebeaninternal.server.querydefn; package io.ebeaninternal.server.querydefn;
import io.ebean.xtest.BaseTestCase; import io.ebeaninternal.server.deploy.BaseTest;
import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.deploy.BeanDescriptor;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.tests.model.basic.Order; import org.tests.model.basic.Order;
@@ -8,7 +8,7 @@ import org.tests.model.basic.Order;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
public class OrmQueryDetailTest extends BaseTestCase { public class OrmQueryDetailTest extends BaseTest {
OrmQueryDetail parse(String query) { OrmQueryDetail parse(String query) {
return new OrmQueryDetailParser(query).parse(); return new OrmQueryDetailParser(query).parse();
@@ -5,10 +5,10 @@ import io.ebean.ExpressionList;
import io.ebean.Query; import io.ebean.Query;
import io.ebeaninternal.api.CQueryPlanKey; import io.ebeaninternal.api.CQueryPlanKey;
import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.server.deploy.BaseTest;
import io.ebeaninternal.server.deploy.TableJoin; import io.ebeaninternal.server.deploy.TableJoin;
import io.ebeaninternal.server.deploy.meta.DeployTableJoin; import io.ebeaninternal.server.deploy.meta.DeployTableJoin;
import io.ebeaninternal.server.deploy.meta.DeployTableJoinColumn; import io.ebeaninternal.server.deploy.meta.DeployTableJoinColumn;
import io.ebeaninternal.server.expression.BaseExpressionTest;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer; import org.tests.model.basic.Customer;
@@ -16,7 +16,7 @@ import java.sql.Timestamp;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
public class OrmQueryPlanKeyTest extends BaseExpressionTest { public class OrmQueryPlanKeyTest extends BaseTest {
@SuppressWarnings({"unchecked", "rawtypes"}) @SuppressWarnings({"unchecked", "rawtypes"})
private DefaultOrmQuery<Customer> query() { private DefaultOrmQuery<Customer> query() {
@@ -82,8 +82,8 @@ public class Order implements Serializable {
@DocEmbedded @DocEmbedded
List<OrderDetail> details; List<OrderDetail> details;
// @OneToMany(cascade = CascadeType.ALL, mappedBy = "order", orphanRemoval = true) @OneToMany(cascade = CascadeType.ALL, mappedBy = "order", orphanRemoval = true)
// List<OrderShipment> shipments; List<OrderShipment> shipments;
@Override @Override
public String toString() { public String toString() {
@@ -234,19 +234,19 @@ public class Order implements Serializable {
details.add(detail); details.add(detail);
} }
// public List<OrderShipment> getShipments() { public List<OrderShipment> getShipments() {
// return shipments; return shipments;
// } }
//
// public void setShipments(List<OrderShipment> shipments) { public void setShipments(List<OrderShipment> shipments) {
// this.shipments = shipments; this.shipments = shipments;
// } }
//
// public void addShipment(OrderShipment shipment) { public void addShipment(OrderShipment shipment) {
//
// if (shipments == null) { if (shipments == null) {
// shipments = new ArrayList<>(); shipments = new ArrayList<>();
// } }
// shipments.add(shipment); shipments.add(shipment);
// } }
} }
@@ -0,0 +1,64 @@
package org.tests.model.basic;
import io.ebean.annotation.Sql;
import javax.persistence.Entity;
import javax.persistence.OneToOne;
/**
* An example of an Aggregate object.
* <p>
* Note the &#064;Sql indicates to Ebean that this bean is not based on a table but
* instead uses RawSql.
* </p>
*/
@Entity
@Sql
public class OrderAggregate {
@OneToOne
Order order;
Double maxAmount;
Double totalAmount;
Long totalItems;
@Override
public String toString() {
return order.getId() + " totalAmount:" + totalAmount + " totalItems:" + totalItems;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
public Double getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(Double totalAmount) {
this.totalAmount = totalAmount;
}
public Long getTotalItems() {
return totalItems;
}
public void setTotalItems(Long totalItems) {
this.totalItems = totalItems;
}
public Double getMaxAmount() {
return maxAmount;
}
public void setMaxAmount(Double maxAmount) {
this.maxAmount = maxAmount;
}
}
@@ -0,0 +1,35 @@
package org.tests.model.basic;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import java.sql.Timestamp;
@Entity
@Table(name = "or_order_ship")
public class OrderShipment extends BasicDomain {
private static final long serialVersionUID = 1L;
@ManyToOne
private Order order;
private Timestamp shipTime = new Timestamp(System.currentTimeMillis());
public Timestamp getShipTime() {
return shipTime;
}
public void setShipTime(Timestamp shipTime) {
this.shipTime = shipTime;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
+15
View File
@@ -17,3 +17,18 @@ create table animal_shelter (
version bigint not null, version bigint not null,
constraint pk_animal_shelter primary key (id) constraint pk_animal_shelter primary key (id)
); );
create table o_customer (
id integer generated by default as identity not null,
status varchar(1),
name varchar(40) not null,
smallnote varchar(100),
anniversary date,
billing_address_id integer,
shipping_address_id integer,
cretime timestamp not null,
updtime timestamp not null,
version bigint not null,
constraint ck_o_customer_status check ( status in ('N','A','I')),
constraint pk_o_customer primary key (id)
);
@@ -0,0 +1,64 @@
package io.ebean.xtest.expression;
import io.ebean.Query;
import io.ebean.xtest.BaseTestCase;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Address;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import static org.assertj.core.api.Assertions.assertThat;
public class DefaultExampleExpressionTest extends BaseTestCase {
Customer customer() {
Address address = new Address();
address.setCity("billingAddress.city");
Customer customer = new Customer();
customer.setName("name");
customer.setBillingAddress(address);
return customer;
}
@Test
public void test() {
Customer customer = customer();
customer.setName("Rob");
customer.getBillingAddress().setCity("Auckland");
ResetBasicData.reset();
Query<Customer> query1 = server().find(Customer.class)
.where().exampleLike(customer)
.query();
query1.findList();
assertThat(query1.getGeneratedSql()).contains("(t0.name like ");
assertThat(query1.getGeneratedSql()).contains(" and t1.city like ");
}
@Test
public void emptyExampleBean() {
ResetBasicData.reset();
Customer customer = new Customer();
Query<Customer> query = server().find(Customer.class)
.where()
.eq("status", Customer.Status.NEW)
.exampleLike(customer)
.startsWith("name", "Rob")
.query();
query.findList();
Assertions.assertThat(sqlOf(query)).contains("and 1=1 and t0.name like");
}
}
@@ -1,9 +1,10 @@
package io.ebeaninternal.server.expression; package io.ebean.xtest.expression;
import io.ebean.xtest.BaseTestCase; import io.ebean.xtest.BaseTestCase;
import io.ebean.DB; import io.ebean.DB;
import io.ebean.Query; import io.ebean.Query;
import io.ebean.test.LoggedSql; import io.ebean.test.LoggedSql;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.tests.model.basic.Contact; import org.tests.model.basic.Contact;
import org.tests.model.basic.Customer; import org.tests.model.basic.Customer;