From 785a027dd6844c0b89a0f4a22a16f3038d910e48 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Sun, 27 Mar 2022 16:49:28 +1300 Subject: [PATCH 01/10] Refactor tests, move some cache tests to ebean-core --- .../server/cache/CacheBeanDataTest.java | 8 +- .../cache/CachedBeanDataFromBeanTest.java | 10 +-- .../cache/CachedBeanDataSerializeTest.java | 24 +++--- ...faultCacheHolder_getCacheOptions_Test.java | 0 .../cache/DefaultServerCacheManagerTest.java | 0 .../java/org/tests/model/basic/Article.java | 62 ++++++++++++++ .../test/java/org/tests/model/basic/Car.java | 84 +++++++++++++++++++ .../org/tests/model/basic/CarAccessory.java | 47 +++++++++++ .../java/org/tests/model/basic/CarFuse.java | 29 +++++++ .../java/org/tests/model/basic/Section.java | 77 +++++++++++++++++ .../org/tests/model/basic/SubSection.java | 34 ++++++++ .../org/tests/model/basic/TBytesOnly.java | 31 +++++++ .../java/org/tests/model/basic/Truck.java | 62 ++++++++++++++ .../java/org/tests/model/basic/TruckRef.java | 30 +++++++ .../java/org/tests/model/basic/Vehicle.java | 57 +++++++++++++ .../org/tests/model/basic/VehicleDriver.java | 54 ++++++++++++ .../org/tests/model/basic/VehicleLease.java | 64 ++++++++++++++ .../tests/model/basic/VehicleLeaseLong.java | 32 +++++++ .../tests/model/basic/VehicleLeaseShort.java | 33 ++++++++ .../org/tests/model/embedded/EAddress.java | 77 +++++++++++++++++ .../tests/model/embedded/EAddressStatus.java | 24 ++++++ .../org/tests/model/embedded/EPerson.java | 66 +++++++++++++++ .../resources/application-test.properties | 6 ++ 23 files changed, 888 insertions(+), 23 deletions(-) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/cache/CacheBeanDataTest.java (95%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataFromBeanTest.java (93%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataSerializeTest.java (88%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolder_getCacheOptions_Test.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java (100%) create mode 100644 ebean-core/src/test/java/org/tests/model/basic/Article.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/Car.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/CarAccessory.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/CarFuse.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/Section.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/SubSection.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/TBytesOnly.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/Truck.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/TruckRef.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/Vehicle.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/VehicleDriver.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/VehicleLease.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/VehicleLeaseLong.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/VehicleLeaseShort.java create mode 100644 ebean-core/src/test/java/org/tests/model/embedded/EAddress.java create mode 100644 ebean-core/src/test/java/org/tests/model/embedded/EAddressStatus.java create mode 100644 ebean-core/src/test/java/org/tests/model/embedded/EPerson.java create mode 100644 ebean-core/src/test/resources/application-test.properties diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/cache/CacheBeanDataTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/cache/CacheBeanDataTest.java similarity index 95% rename from ebean-test/src/test/java/io/ebeaninternal/server/cache/CacheBeanDataTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/cache/CacheBeanDataTest.java index 886a05618..07c845a60 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/cache/CacheBeanDataTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/cache/CacheBeanDataTest.java @@ -1,6 +1,6 @@ package io.ebeaninternal.server.cache; -import io.ebean.xtest.BaseTestCase; +import io.ebean.DB; import io.ebean.bean.EntityBean; import io.ebean.bean.PersistenceContext; import io.ebeaninternal.api.SpiEbeanServer; @@ -20,12 +20,12 @@ import java.sql.Timestamp; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -public class CacheBeanDataTest extends BaseTestCase { +public class CacheBeanDataTest { @Test public void extract_load_on_customer() { - SpiEbeanServer server = spiEbeanServer(); + SpiEbeanServer server = (SpiEbeanServer)DB.getDefault(); BeanDescriptor desc = server.descriptor(Customer.class); Customer c = new Customer(); @@ -77,7 +77,7 @@ public class CacheBeanDataTest extends BaseTestCase { @Test public void extract_load_withEmbeddedBean() { - SpiEbeanServer server = spiEbeanServer(); + SpiEbeanServer server = (SpiEbeanServer)DB.getDefault(); BeanDescriptor desc = server.descriptor(EPerson.class); BeanPropertyAssocOne addressBeanProperty = (BeanPropertyAssocOne) desc.beanProperty("address"); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataFromBeanTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataFromBeanTest.java similarity index 93% rename from ebean-test/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataFromBeanTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataFromBeanTest.java index 1469e4fb2..cd68302bd 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataFromBeanTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataFromBeanTest.java @@ -1,6 +1,6 @@ package io.ebeaninternal.server.cache; -import io.ebean.xtest.BaseTestCase; +import io.ebean.DB; import io.ebean.bean.EntityBean; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.server.deploy.BeanDescriptor; @@ -17,9 +17,9 @@ import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; -public class CachedBeanDataFromBeanTest extends BaseTestCase { +public class CachedBeanDataFromBeanTest { - private final SpiEbeanServer server = spiEbeanServer(); + private final SpiEbeanServer server = (SpiEbeanServer)DB.getDefault(); @Test public void extract() { @@ -84,7 +84,7 @@ public class CachedBeanDataFromBeanTest extends BaseTestCase { // mutate, dirty contact.setLastName("Banana"); - final BeanDescriptor desc = getBeanDescriptor(Contact.class); + final BeanDescriptor desc = server.descriptor(Contact.class); CachedBeanData cacheData = CachedBeanDataFromBean.extract(desc, entityBean); final Map data = cacheData.getData(); @@ -115,7 +115,7 @@ public class CachedBeanDataFromBeanTest extends BaseTestCase { contact.setCustomer(customer2); contact.setLastName("Banana"); - final BeanDescriptor desc = getBeanDescriptor(Contact.class); + final BeanDescriptor desc = server.descriptor(Contact.class); CachedBeanData cacheData = CachedBeanDataFromBean.extract(desc, entityBean); final Map data = cacheData.getData(); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataSerializeTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataSerializeTest.java similarity index 88% rename from ebean-test/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataSerializeTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataSerializeTest.java index b4804b97a..7e54d1d1e 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataSerializeTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/cache/CachedBeanDataSerializeTest.java @@ -1,27 +1,26 @@ package io.ebeaninternal.server.cache; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.bean.EntityBean; +import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.transaction.DefaultPersistenceContext; import org.junit.jupiter.api.Test; import org.tests.model.basic.Customer; -import org.tests.model.basic.ResetBasicData; import org.tests.model.basic.TBytesOnly; import java.io.*; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +public class CachedBeanDataSerializeTest { -public class CachedBeanDataSerializeTest extends BaseTestCase { + private final SpiEbeanServer db = (SpiEbeanServer)DB.getDefault(); @Test public void write() throws IOException, ClassNotFoundException { @@ -58,16 +57,13 @@ public class CachedBeanDataSerializeTest extends BaseTestCase { @Test public void fullBean() throws IOException, ClassNotFoundException { + Customer customer = new Customer(); + customer.setId(42); + customer.setName("FooBar"); + customer.setStatus(Customer.Status.INACTIVE); + customer.setVersion(3L); - ResetBasicData.reset(); - - List customers = DB.find(Customer.class) - .order().asc("id") - .setMaxRows(1).findList(); - - Customer customer = customers.get(0); - - BeanDescriptor desc = getBeanDescriptor(Customer.class); + BeanDescriptor desc = db.descriptor(Customer.class); CachedBeanData extract = CachedBeanDataFromBean.extract(desc, (EntityBean) customer); ByteArrayOutputStream os = new ByteArrayOutputStream(); @@ -97,7 +93,7 @@ public class CachedBeanDataSerializeTest extends BaseTestCase { bean.setId(42); bean.setContent(stringContent.getBytes(StandardCharsets.UTF_8)); - BeanDescriptor desc = getBeanDescriptor(TBytesOnly.class); + BeanDescriptor desc = db.descriptor(TBytesOnly.class); CachedBeanData extract = CachedBeanDataFromBean.extract(desc, (EntityBean) bean); ByteArrayOutputStream os = new ByteArrayOutputStream(); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolder_getCacheOptions_Test.java b/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolder_getCacheOptions_Test.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolder_getCacheOptions_Test.java rename to ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolder_getCacheOptions_Test.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java diff --git a/ebean-core/src/test/java/org/tests/model/basic/Article.java b/ebean-core/src/test/java/org/tests/model/basic/Article.java new file mode 100644 index 000000000..797366edd --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/Article.java @@ -0,0 +1,62 @@ +package org.tests.model.basic; + +import io.ebean.annotation.Cache; +import io.ebean.annotation.CacheBeanTuning; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.OneToMany; +import java.util.ArrayList; +import java.util.List; + + +@Cache +@CacheBeanTuning(maxSecsToLive = 45) +@Entity +public class Article extends BasicDomain { + private static final long serialVersionUID = -7181090513848918784L; + + String name; + + String author; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + List
sections; + + public Article(String name, String author) { + this.name = name; + this.author = author; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public List
getSections() { + return sections; + } + + public void setSections(List
sections) { + this.sections = sections; + } + + public void addSection(Section s) { + if (sections == null) { + sections = new ArrayList<>(); + } + sections.add(s); + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/Car.java b/ebean-core/src/test/java/org/tests/model/basic/Car.java new file mode 100644 index 000000000..268920a34 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/Car.java @@ -0,0 +1,84 @@ +package org.tests.model.basic; + +import io.ebean.annotation.DbEnumValue; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Inheritance +@DiscriminatorValue("C") +public class Car extends Vehicle { + private static final long serialVersionUID = -65427345082456523L; + + public enum Size { + SMALL("S"), + LARGE("L"); + + String value; + + Size(String value) { + this.value = value; + } + + @DbEnumValue + public String value() { + return value; + } + } + + @Column(name = "siz") + private Size size; + + private String driver; + + @ManyToOne + private TruckRef carRef; + + @OneToMany(mappedBy = "car") + @OrderBy("fuse.locationCode") + private Set accessories = new HashSet<>(); + + private String notes; + + public String getDriver() { + return driver; + } + + public void setDriver(String driver) { + this.driver = driver; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public TruckRef getCarRef() { + return carRef; + } + + public void setCarRef(TruckRef carRef) { + this.carRef = carRef; + } + + public Set getAccessories() { + return accessories; + } + + public void setAccessories(Set accessories) { + this.accessories = accessories; + } + + public Size getSize() { + return size; + } + + public void setSize(Size size) { + this.size = size; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/CarAccessory.java b/ebean-core/src/test/java/org/tests/model/basic/CarAccessory.java new file mode 100644 index 000000000..37ee5720e --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/CarAccessory.java @@ -0,0 +1,47 @@ +package org.tests.model.basic; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; + +@Entity +public class CarAccessory extends BasicDomain { + + private static final long serialVersionUID = 1L; + + private String name; + + @ManyToOne(optional = false) + private CarFuse fuse; + + @ManyToOne + private Car car; + + public CarAccessory(Car car, CarFuse fuse) { + this.car = car; + this.fuse = fuse; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Car getCar() { + return car; + } + + public void setCar(Car car) { + this.car = car; + } + + public CarFuse getFuse() { + return fuse; + } + + public void setFuse(CarFuse fuse) { + this.fuse = fuse; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/CarFuse.java b/ebean-core/src/test/java/org/tests/model/basic/CarFuse.java new file mode 100644 index 000000000..df2aef5bf --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/CarFuse.java @@ -0,0 +1,29 @@ +package org.tests.model.basic; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class CarFuse { + + @Id + Long id; + + String locationCode; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getLocationCode() { + return locationCode; + } + + public void setLocationCode(String locationCode) { + this.locationCode = locationCode; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/Section.java b/ebean-core/src/test/java/org/tests/model/basic/Section.java new file mode 100644 index 000000000..039541188 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/Section.java @@ -0,0 +1,77 @@ +package org.tests.model.basic; + +import io.ebean.annotation.Cache; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Cache +@Entity +public class Section extends BasicDomain { + + private static final long serialVersionUID = 1L; + + public enum Type { + GENERAL, + NOTE + } + + @ManyToOne + Article article; + + Type type = Type.GENERAL; + + @Lob + String content; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + List subSections; + + public Section() { + } + + public Section(String content) { + this.content = content; + } + + public Type getType() { + return type; + } + + public void setType(Type type) { + this.type = type; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Article getArticle() { + return article; + } + + public void setArticle(Article article) { + this.article = article; + } + + public List getSubSections() { + return subSections; + } + + public void setSubSections(List subSections) { + this.subSections = subSections; + } + + public void addSubSection(SubSection s) { + if (subSections == null) { + subSections = new ArrayList<>(); + } + subSections.add(s); + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/SubSection.java b/ebean-core/src/test/java/org/tests/model/basic/SubSection.java new file mode 100644 index 000000000..b5e8888f2 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/SubSection.java @@ -0,0 +1,34 @@ +package org.tests.model.basic; + +import io.ebean.annotation.Cache; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; + +@Cache +@Entity +public class SubSection extends BasicDomain { + + private static final long serialVersionUID = 1L; + + @ManyToOne + private Section section; + + private String title; + + public SubSection() { + } + + public SubSection(String title) { + this.title = title; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/TBytesOnly.java b/ebean-core/src/test/java/org/tests/model/basic/TBytesOnly.java new file mode 100644 index 000000000..80c0f8d36 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/TBytesOnly.java @@ -0,0 +1,31 @@ +package org.tests.model.basic; + +import javax.persistence.*; + +@Entity +public class TBytesOnly { + + @Id + Integer id; + + @Lob + @Basic(fetch = FetchType.EAGER) + byte[] content; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public byte[] getContent() { + return content; + } + + public void setContent(byte[] content) { + this.content = content; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/Truck.java b/ebean-core/src/test/java/org/tests/model/basic/Truck.java new file mode 100644 index 000000000..c32d70777 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/Truck.java @@ -0,0 +1,62 @@ +package org.tests.model.basic; + +import io.ebean.annotation.DbEnumValue; + +import javax.persistence.*; + +@Entity +@Inheritance +@DiscriminatorValue("T") +public class Truck extends Vehicle { + private static final long serialVersionUID = 9195535931523211134L; + + public enum Size { + SMALL("S"), + MEDIUM("M"), + LARGE("L"), + HUGE("H"); + + String value; + + Size(String value) { + this.value = value; + } + + @DbEnumValue(length = 3) + public String value() { + return value; + } + } + + @Column(name = "siz") + private Size size; + + @ManyToOne + TruckRef truckRef; + + private Double capacity; + + public Double getCapacity() { + return capacity; + } + + public void setCapacity(Double capacity) { + this.capacity = capacity; + } + + public TruckRef getTruckRef() { + return truckRef; + } + + public void setTruckRef(TruckRef truckRef) { + this.truckRef = truckRef; + } + + public Size getSize() { + return size; + } + + public void setSize(Size size) { + this.size = size; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/TruckRef.java b/ebean-core/src/test/java/org/tests/model/basic/TruckRef.java new file mode 100644 index 000000000..56cbc171b --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/TruckRef.java @@ -0,0 +1,30 @@ +package org.tests.model.basic; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class TruckRef { + + @Id + Integer id; + + String something; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getSomething() { + return something; + } + + public void setSomething(String something) { + this.something = something; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/Vehicle.java b/ebean-core/src/test/java/org/tests/model/basic/Vehicle.java new file mode 100644 index 000000000..cab8c4dde --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/Vehicle.java @@ -0,0 +1,57 @@ +package org.tests.model.basic; + +import javax.persistence.DiscriminatorColumn; +import javax.persistence.Entity; +import javax.persistence.Inheritance; +import javax.persistence.ManyToOne; +import java.util.Date; + +@Entity +@Inheritance +@DiscriminatorColumn(length = 3) +public abstract class Vehicle extends BasicDomain { + + private static final long serialVersionUID = -3060920549470002030L; + + private String licenseNumber; + + private Date registrationDate; + + // @Transient + private transient String testTransient; + + @ManyToOne + private VehicleLease lease; + + public String getLicenseNumber() { + return licenseNumber; + } + + public void setLicenseNumber(String licenseNumber) { + this.licenseNumber = licenseNumber; + } + + public Date getRegistrationDate() { + return registrationDate; + } + + public void setRegistrationDate(Date registrationDate) { + this.registrationDate = registrationDate; + } + + public String getTestTransient() { + return testTransient; + } + + public void setTestTransient(String testTransient) { + this.testTransient = testTransient; + } + + public VehicleLease getLease() { + return lease; + } + + public void setLease(VehicleLease lease) { + this.lease = lease; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/VehicleDriver.java b/ebean-core/src/test/java/org/tests/model/basic/VehicleDriver.java new file mode 100644 index 000000000..00119e5ec --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/VehicleDriver.java @@ -0,0 +1,54 @@ +package org.tests.model.basic; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import java.util.Date; + +@Entity +public class VehicleDriver extends BasicDomain { + + private static final long serialVersionUID = 1L; + + private String name; + + @ManyToOne(optional = true) + private Vehicle vehicle; + + @ManyToOne(optional = true) + private Address address; + + private Date licenseIssuedOn; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Vehicle getVehicle() { + return vehicle; + } + + public void setVehicle(Vehicle vehicle) { + this.vehicle = vehicle; + } + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } + + public Date getLicenseIssuedOn() { + return licenseIssuedOn; + } + + public void setLicenseIssuedOn(Date licenseIssuedOn) { + this.licenseIssuedOn = licenseIssuedOn; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/VehicleLease.java b/ebean-core/src/test/java/org/tests/model/basic/VehicleLease.java new file mode 100644 index 000000000..1aa7b703d --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/VehicleLease.java @@ -0,0 +1,64 @@ +package org.tests.model.basic; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.Version; +import java.time.LocalDate; + +@Entity +@Inheritance +public abstract class VehicleLease { + + @Id + long id; + + String name; + + LocalDate activeStart; + + LocalDate activeEnd; + + @Version + long version; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public long getVersion() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public LocalDate getActiveStart() { + return activeStart; + } + + public void setActiveStart(LocalDate activeStart) { + this.activeStart = activeStart; + } + + public LocalDate getActiveEnd() { + return activeEnd; + } + + public void setActiveEnd(LocalDate activeEnd) { + this.activeEnd = activeEnd; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/VehicleLeaseLong.java b/ebean-core/src/test/java/org/tests/model/basic/VehicleLeaseLong.java new file mode 100644 index 000000000..4af74793f --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/VehicleLeaseLong.java @@ -0,0 +1,32 @@ +package org.tests.model.basic; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import javax.persistence.Inheritance; +import java.math.BigDecimal; + +@Entity +@Inheritance +@DiscriminatorValue("LONG") +public class VehicleLeaseLong extends VehicleLease { + + BigDecimal bond; + + int minDuration; + + public BigDecimal getBond() { + return bond; + } + + public void setBond(BigDecimal bond) { + this.bond = bond; + } + + public int getMinDuration() { + return minDuration; + } + + public void setMinDuration(int minDuration) { + this.minDuration = minDuration; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/VehicleLeaseShort.java b/ebean-core/src/test/java/org/tests/model/basic/VehicleLeaseShort.java new file mode 100644 index 000000000..6e5ccbee5 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/VehicleLeaseShort.java @@ -0,0 +1,33 @@ +package org.tests.model.basic; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import javax.persistence.Inheritance; +import java.math.BigDecimal; + +@Entity +@Inheritance +@DiscriminatorValue("SHORT") +public class VehicleLeaseShort extends VehicleLease { + + + BigDecimal dayRate; + + Integer maxDays; + + public BigDecimal getDayRate() { + return dayRate; + } + + public void setDayRate(BigDecimal dayRate) { + this.dayRate = dayRate; + } + + public Integer getMaxDays() { + return maxDays; + } + + public void setMaxDays(Integer maxDays) { + this.maxDays = maxDays; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/embedded/EAddress.java b/ebean-core/src/test/java/org/tests/model/embedded/EAddress.java new file mode 100644 index 000000000..6ba9d4c41 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/embedded/EAddress.java @@ -0,0 +1,77 @@ +package org.tests.model.embedded; + +import io.ebean.annotation.DbJson; + +import javax.persistence.Column; +import javax.persistence.Embeddable; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import java.util.Map; + +@Embeddable +public class EAddress { + + @Column(nullable = false) + String street; + + String suburb; + + String city; + + @Enumerated(EnumType.STRING) + EAddressStatus status; + +// @DbJson +// PlainBean jbean; + + @DbJson + Map jraw; + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getSuburb() { + return suburb; + } + + public void setSuburb(String suburb) { + this.suburb = suburb; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + +// public PlainBean getJbean() { +// return jbean; +// } +// +// public void setJbean(PlainBean jbean) { +// this.jbean = jbean; +// } + + public Map getJraw() { + return jraw; + } + + public void setJraw(Map jraw) { + this.jraw = jraw; + } + + public EAddressStatus getStatus() { + return status; + } + + public void setStatus(EAddressStatus status) { + this.status = status; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/embedded/EAddressStatus.java b/ebean-core/src/test/java/org/tests/model/embedded/EAddressStatus.java new file mode 100644 index 000000000..fb4eb0119 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/embedded/EAddressStatus.java @@ -0,0 +1,24 @@ +package org.tests.model.embedded; + +public enum EAddressStatus { + + ONE("One") { + @Override + public String doIt() { + return 10 + name; + } + }, + TWO("Two") { + @Override + public String doIt() { + return 20 + name; + } + }; + + String name; + + EAddressStatus(String name) { + this.name = name; + } + public abstract String doIt(); +} diff --git a/ebean-core/src/test/java/org/tests/model/embedded/EPerson.java b/ebean-core/src/test/java/org/tests/model/embedded/EPerson.java new file mode 100644 index 000000000..ef5e82a80 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/embedded/EPerson.java @@ -0,0 +1,66 @@ +package org.tests.model.embedded; + +import javax.persistence.*; + +@Entity +public class EPerson { + + @Id + Long id; + + @Version + Long version; + + String name; + + String notes; + + @Embedded + @AttributeOverrides({ + @AttributeOverride(name = "city", column = @Column(name = "addr_city")), + @AttributeOverride(name = "status", column = @Column(name = "addr_status")), + @AttributeOverride(name = "jbean", column = @Column(name = "addr_jbean")) + }) + EAddress address; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getVersion() { + return version; + } + + public void setVersion(Long version) { + this.version = version; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public EAddress getAddress() { + return address; + } + + public void setAddress(EAddress address) { + this.address = address; + } + +} diff --git a/ebean-core/src/test/resources/application-test.properties b/ebean-core/src/test/resources/application-test.properties new file mode 100644 index 000000000..d42469e88 --- /dev/null +++ b/ebean-core/src/test/resources/application-test.properties @@ -0,0 +1,6 @@ +datasource.default=h2 + +datasource.h2.username=sa +datasource.h2.password= +datasource.h2.url=jdbc:h2:mem:testCoreMem;DB_CLOSE_ON_EXIT=FALSE;NON_KEYWORDS=KEY,VALUE + From 2acdf2f4bfd77382a38e4d6d0d5739473412d389 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Sun, 27 Mar 2022 17:06:52 +1300 Subject: [PATCH 02/10] Refactor tests, move some internal core tests to ebean-core --- ...faultServer_createOrmQueryRequestTest.java | 8 +- .../core/OrmQueryRequestTestHelper.java | 18 ++++ .../server/core/TestDiffHelpSimple.java | 3 +- .../server/core/TestDiffHelpWithEmbedded.java | 3 +- .../ebeaninternal/server/deploy/BaseTest.java | 14 +++ .../BeanDescriptor_documentMappingTest.java | 3 +- .../java/org/tests/model/basic/EBasic.java | 88 +++++++++++++++++++ .../java/org/tests/model/embedded/EMain.java | 52 +++++++++++ .../org/tests/model/embedded/Eembeddable.java | 18 ++++ .../core/DefaultServer_getReferenceTest.java | 2 +- 10 files changed, 200 insertions(+), 9 deletions(-) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java (98%) create mode 100644 ebean-core/src/test/java/io/ebeaninternal/server/core/OrmQueryRequestTestHelper.java rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java (98%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/core/TestDiffHelpWithEmbedded.java (97%) create mode 100644 ebean-core/src/test/java/io/ebeaninternal/server/deploy/BaseTest.java rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_documentMappingTest.java (98%) create mode 100644 ebean-core/src/test/java/org/tests/model/basic/EBasic.java create mode 100644 ebean-core/src/test/java/org/tests/model/embedded/EMain.java create mode 100644 ebean-core/src/test/java/org/tests/model/embedded/Eembeddable.java rename ebean-test/src/test/java/io/{ebeaninternal/server => ebean/xtest}/core/DefaultServer_getReferenceTest.java (97%) diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java similarity index 98% rename from ebean-test/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java index d4dd8f389..aedbb29a9 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java @@ -1,8 +1,8 @@ package io.ebeaninternal.server.core; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; +import io.ebean.Database; import io.ebean.FetchConfig; import io.ebean.Query; import io.ebeaninternal.server.querydefn.DefaultOrmQuery; @@ -12,12 +12,16 @@ import org.tests.model.basic.Order; import static org.assertj.core.api.Assertions.assertThat; -public class DefaultServer_createOrmQueryRequestTest extends BaseTestCase { +public class DefaultServer_createOrmQueryRequestTest { Query query() { return server().find(Order.class); } + private Database server() { + return DB.getDefault(); + } + OrmQueryRequest queryRequest(Query query) { return OrmQueryRequestTestHelper.queryRequest(query); } diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/core/OrmQueryRequestTestHelper.java b/ebean-core/src/test/java/io/ebeaninternal/server/core/OrmQueryRequestTestHelper.java new file mode 100644 index 000000000..e0ab5e746 --- /dev/null +++ b/ebean-core/src/test/java/io/ebeaninternal/server/core/OrmQueryRequestTestHelper.java @@ -0,0 +1,18 @@ +package io.ebeaninternal.server.core; + +import io.ebean.DB; +import io.ebean.Query; +import io.ebeaninternal.api.SpiQuery; + +public class OrmQueryRequestTestHelper { + + static DefaultServer defaultServer = (DefaultServer) DB.getDefault(); + + /** + * Create and return a OrmQueryRequest for the given query. + */ + public static OrmQueryRequest queryRequest(Query query) { + return (OrmQueryRequest) defaultServer.createQueryRequest(SpiQuery.Type.LIST, query, null); + } + +} diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java b/ebean-core/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java similarity index 98% rename from ebean-test/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java rename to ebean-core/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java index 03c82cde0..52ee01500 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.core; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.Database; import io.ebean.ValuePair; @@ -19,7 +18,7 @@ import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; -class TestDiffHelpSimple extends BaseTestCase { +class TestDiffHelpSimple { long firstTime = System.currentTimeMillis() - 10000; long secondTime = System.currentTimeMillis(); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/core/TestDiffHelpWithEmbedded.java b/ebean-core/src/test/java/io/ebeaninternal/server/core/TestDiffHelpWithEmbedded.java similarity index 97% rename from ebean-test/src/test/java/io/ebeaninternal/server/core/TestDiffHelpWithEmbedded.java rename to ebean-core/src/test/java/io/ebeaninternal/server/core/TestDiffHelpWithEmbedded.java index 2a7018e52..22fce4538 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/core/TestDiffHelpWithEmbedded.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/core/TestDiffHelpWithEmbedded.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.core; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.Database; import io.ebean.ValuePair; @@ -14,7 +13,7 @@ import java.util.Map; import static org.junit.jupiter.api.Assertions.*; -public class TestDiffHelpWithEmbedded extends BaseTestCase { +public class TestDiffHelpWithEmbedded { Database server; diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BaseTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BaseTest.java new file mode 100644 index 000000000..df637087d --- /dev/null +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BaseTest.java @@ -0,0 +1,14 @@ +package io.ebeaninternal.server.deploy; + +import io.ebean.DB; +import io.ebeaninternal.api.SpiEbeanServer; + +public class BaseTest { + + protected SpiEbeanServer server = (SpiEbeanServer)DB.getDefault(); + + protected BeanDescriptor getBeanDescriptor(Class cls) { + return server.descriptor(cls); + } + +} diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_documentMappingTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_documentMappingTest.java similarity index 98% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_documentMappingTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_documentMappingTest.java index e4c4620c3..6968e3fc7 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_documentMappingTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_documentMappingTest.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.deploy; -import io.ebean.xtest.BaseTestCase; import io.ebeanservice.docstore.api.mapping.DocPropertyAdapter; import io.ebeanservice.docstore.api.mapping.DocPropertyMapping; import io.ebeanservice.docstore.api.mapping.DocumentMapping; @@ -9,7 +8,7 @@ import org.tests.model.basic.Order; import static org.assertj.core.api.Assertions.assertThat; -public class BeanDescriptor_documentMappingTest extends BaseTestCase { +public class BeanDescriptor_documentMappingTest extends BaseTest { @Test diff --git a/ebean-core/src/test/java/org/tests/model/basic/EBasic.java b/ebean-core/src/test/java/org/tests/model/basic/EBasic.java new file mode 100644 index 000000000..603102032 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/EBasic.java @@ -0,0 +1,88 @@ +package org.tests.model.basic; + +import io.ebean.annotation.EnumValue; +import io.ebean.annotation.Index; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.Size; +import java.sql.Timestamp; + +@Entity +@Table(name = "e_basic") +public class EBasic { + + public enum Status { + @EnumValue("N") + NEW, + + @EnumValue("A") + ACTIVE, + + @EnumValue("I") + INACTIVE, + } + + @Id + Integer id; + + Status status; + + @Index + @Size(max=127) + String name; + + String description; + + Timestamp someDate; + + public EBasic() { + + } + + public EBasic(String name) { + this.name = name; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Timestamp getSomeDate() { + return someDate; + } + + public void setSomeDate(Timestamp someDate) { + this.someDate = someDate; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/embedded/EMain.java b/ebean-core/src/test/java/org/tests/model/embedded/EMain.java new file mode 100644 index 000000000..edb13ac1b --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/embedded/EMain.java @@ -0,0 +1,52 @@ +package org.tests.model.embedded; + +import javax.persistence.*; + +@Entity +@Table(name = "e_main") +public class EMain { + + @Id + private Integer id; + + private String name; + + @Embedded + private Eembeddable embeddable = new Eembeddable(); + + @Version + private Long version; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Eembeddable getEmbeddable() { + return embeddable; + } + + public void setEmbeddable(Eembeddable embeddable) { + this.embeddable = embeddable; + } + + public Long getVersion() { + return version; + } + + public void setVersion(Long version) { + this.version = version; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/embedded/Eembeddable.java b/ebean-core/src/test/java/org/tests/model/embedded/Eembeddable.java new file mode 100644 index 000000000..574a557a6 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/embedded/Eembeddable.java @@ -0,0 +1,18 @@ +package org.tests.model.embedded; + +import javax.persistence.Embeddable; + +@Embeddable +public class Eembeddable { + + String description; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + +} diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/core/DefaultServer_getReferenceTest.java b/ebean-test/src/test/java/io/ebean/xtest/core/DefaultServer_getReferenceTest.java similarity index 97% rename from ebean-test/src/test/java/io/ebeaninternal/server/core/DefaultServer_getReferenceTest.java rename to ebean-test/src/test/java/io/ebean/xtest/core/DefaultServer_getReferenceTest.java index 28f058595..7f8502000 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/core/DefaultServer_getReferenceTest.java +++ b/ebean-test/src/test/java/io/ebean/xtest/core/DefaultServer_getReferenceTest.java @@ -1,4 +1,4 @@ -package io.ebeaninternal.server.core; +package io.ebean.xtest.core; import io.ebean.xtest.BaseTestCase; From 28088a5e54f0c548d9ae4c3a99751a014e815c5e Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Sun, 27 Mar 2022 17:44:43 +1300 Subject: [PATCH 03/10] Refactor tests, move some internal deploy tests to ebean-core --- .../ebeaninternal/server/deploy/BaseTest.java | 40 ++++++++++- .../server/deploy/BeanDescriptorTest.java | 16 +++-- .../deploy/BeanDescriptor_registerTest.java | 0 ...eanDescriptor_whenCreatedPropertyTest.java | 5 +- .../deploy/BeanPropertyAssocManyTest.java | 40 ++++++----- .../deploy/DeployPropertyParserTest.java | 27 +++----- .../deploy/FormulaPropertyPathTest.java | 3 +- .../TestBeanDescriptorHasIdProperty.java | 3 +- .../deploy/TestCollectionLoadedStatus.java | 3 +- .../deploy/TestDiffHelpInsertSimple.java | 13 +--- .../TestDiffHelpInsertWithEmbedded.java | 10 +-- .../java/org/tests/model/basic/Animal.java | 54 +++++++++++++++ .../org/tests/model/basic/AnimalShelter.java | 57 ++++++++++++++++ .../org/tests/model/basic/BWithQIdent.java | 57 ++++++++++++++++ .../test/java/org/tests/model/basic/Cat.java | 32 +++++++++ .../test/java/org/tests/model/basic/Dog.java | 31 +++++++++ .../java/org/tests/model/bridge/BSite.java | 20 ++++++ .../java/org/tests/model/bridge/BUser.java | 19 ++++++ .../org/tests/model/composite/RCustomer.java | 43 ++++++++++++ .../tests/model/composite/RCustomerKey.java | 68 +++++++++++++++++++ .../model/embedded/UserInterestLive.java | 34 ++++++++++ .../model/embedded/UserInterestLiveKey.java | 30 ++++++++ .../resources/application-test.properties | 7 ++ ebean-core/src/test/resources/h2-init.sql | 19 ++++++ .../core}/TestNotEnhancedMappedSuper.java | 2 +- ...estReferenceWithConstructorProperties.java | 2 +- 26 files changed, 556 insertions(+), 79 deletions(-) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptorTest.java (91%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_registerTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_whenCreatedPropertyTest.java (89%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java (69%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java (77%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/FormulaPropertyPathTest.java (95%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/TestBeanDescriptorHasIdProperty.java (97%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/TestCollectionLoadedStatus.java (92%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertSimple.java (80%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertWithEmbedded.java (86%) create mode 100644 ebean-core/src/test/java/org/tests/model/basic/Animal.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/AnimalShelter.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/BWithQIdent.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/Cat.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/Dog.java create mode 100644 ebean-core/src/test/java/org/tests/model/bridge/BSite.java create mode 100644 ebean-core/src/test/java/org/tests/model/bridge/BUser.java create mode 100644 ebean-core/src/test/java/org/tests/model/composite/RCustomer.java create mode 100644 ebean-core/src/test/java/org/tests/model/composite/RCustomerKey.java create mode 100644 ebean-core/src/test/java/org/tests/model/embedded/UserInterestLive.java create mode 100644 ebean-core/src/test/java/org/tests/model/embedded/UserInterestLiveKey.java create mode 100644 ebean-core/src/test/resources/h2-init.sql rename ebean-test/src/test/java/io/{ebeaninternal/server/deploy => ebean/xtest/core}/TestNotEnhancedMappedSuper.java (96%) rename ebean-test/src/test/java/io/{ebeaninternal/server/deploy => ebean/xtest/core}/TestReferenceWithConstructorProperties.java (95%) diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BaseTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BaseTest.java index df637087d..3dc9d7018 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BaseTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BaseTest.java @@ -1,14 +1,50 @@ package io.ebeaninternal.server.deploy; import io.ebean.DB; +import io.ebean.Database; +import io.ebean.annotation.Platform; import io.ebeaninternal.api.SpiEbeanServer; +import org.tests.model.basic.Animal; + +import javax.persistence.PersistenceException; public class BaseTest { - protected SpiEbeanServer server = (SpiEbeanServer)DB.getDefault(); + protected SpiEbeanServer db = (SpiEbeanServer)DB.getDefault(); protected BeanDescriptor getBeanDescriptor(Class cls) { - return server.descriptor(cls); + return db.descriptor(cls); } + protected SpiEbeanServer spiEbeanServer() { + return db; + } + + protected Database server() { + return db; + } + + protected void initTables() { + try { + db.find(Animal.class).findCount(); + } catch (PersistenceException e) { + db.script().run("/h2-init.sql"); + } + } + + protected boolean isH2() { + return isPlatform(Platform.H2); + } + protected boolean isPostgres() { + return isPlatform(Platform.POSTGRES); + } + protected boolean isSqlServer() { + return isPlatform(Platform.SQLSERVER); + } + protected boolean isMySql() { + return isPlatform(Platform.MYSQL); + } + protected boolean isPlatform(Platform platform) { + return db.platform().base().equals(platform); + } } diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptorTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptorTest.java similarity index 91% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptorTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptorTest.java index 14cc5208c..89f77d70b 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptorTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptorTest.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.deploy; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.bean.EntityBean; import io.ebean.plugin.Property; @@ -8,6 +7,7 @@ import io.ebeaninternal.server.core.CacheOptions; import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor; import io.ebeaninternal.server.deploy.meta.DeployIdentityMode; import io.ebeanservice.docstore.api.DocStoreBeanAdapter; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.tests.model.basic.*; import org.tests.model.bridge.BSite; @@ -21,7 +21,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class BeanDescriptorTest extends BaseTestCase { +public class BeanDescriptorTest extends BaseTest { private BeanDescriptor customerDesc = spiEbeanServer().descriptor(Customer.class); @@ -30,35 +30,37 @@ public class BeanDescriptorTest extends BaseTestCase { Customer bean = customerDesc.createReference(null, false, 42, null); assertThat(bean.getId()).isEqualTo(42); - assertThat(server().beanState(bean).isReadOnly()).isFalse(); + Assertions.assertThat(server().beanState(bean).isReadOnly()).isFalse(); } @Test public void createReference_whenReadOnly() { Customer bean = customerDesc.createReference(Boolean.TRUE, false, 42, null); - assertThat(server().beanState(bean).isReadOnly()).isTrue(); + Assertions.assertThat(server().beanState(bean).isReadOnly()).isTrue(); } @Test public void createReference_whenNotReadOnly() { Customer bean = customerDesc.createReference(Boolean.FALSE, false, 42, null); - assertThat(server().beanState(bean).isReadOnly()).isFalse(); + Assertions.assertThat(server().beanState(bean).isReadOnly()).isFalse(); bean = customerDesc.createReference(42, null); - assertThat(server().beanState(bean).isReadOnly()).isFalse(); + Assertions.assertThat(server().beanState(bean).isReadOnly()).isFalse(); } @Test public void createReference_when_disabledLazyLoad() { Customer bean = customerDesc.createReference(Boolean.FALSE, true, 42, null); - assertThat(server().beanState(bean).isDisableLazyLoad()).isTrue(); + Assertions.assertThat(server().beanState(bean).isDisableLazyLoad()).isTrue(); } @Test public void createReference_with_inheritance() { + initTables(); + Cat cat = new Cat(); cat.setName("Puss"); DB.save(cat); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_registerTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_registerTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_registerTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_registerTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_whenCreatedPropertyTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_whenCreatedPropertyTest.java similarity index 89% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_whenCreatedPropertyTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_whenCreatedPropertyTest.java index 21296cabf..d3afba106 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_whenCreatedPropertyTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanDescriptor_whenCreatedPropertyTest.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.deploy; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebeaninternal.api.SpiEbeanServer; import org.junit.jupiter.api.Test; @@ -10,9 +9,7 @@ import org.tests.model.basic.EBasic; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; - -public class BeanDescriptor_whenCreatedPropertyTest extends BaseTestCase { - +public class BeanDescriptor_whenCreatedPropertyTest { @Test public void test() { diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java similarity index 69% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java index cc966accc..a83521d76 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.deploy; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.bean.BeanCollection; import io.ebean.bean.EntityBean; @@ -8,7 +7,6 @@ import io.ebean.common.BeanList; import org.junit.jupiter.api.Test; import org.tests.model.basic.Contact; import org.tests.model.basic.Customer; -import org.tests.model.basic.ResetBasicData; import java.util.ArrayList; import java.util.List; @@ -17,7 +15,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; -public class BeanPropertyAssocManyTest extends BaseTestCase { +public class BeanPropertyAssocManyTest extends BaseTest { private BeanDescriptor customerDesc = spiEbeanServer().descriptor(Customer.class); @@ -62,22 +60,22 @@ public class BeanPropertyAssocManyTest extends BaseTestCase { assertThat(customer.getContacts().get(0)).isSameAs(contact); } - @Test - public void findIdsByParentId() { - - ResetBasicData.reset(); - - List ids = DB.find(Customer.class).orderBy("id").setMaxRows(2).findIds(); - - List customerIds = new ArrayList<>(); - customerIds.add(ids.get(0)); - customerIds.add(ids.get(1)); - - List contactIdsForOne = contacts().findIdsByParentId(ids.get(0), null, null, null, true); - - List contactIdsForMultiple = contacts().findIdsByParentId(null, customerIds, null, null, true); - - assertThat(contactIdsForOne).isNotEmpty(); - assertThat(contactIdsForMultiple).isNotEmpty(); - } +// @Test +// public void findIdsByParentId() { +// +// ResetBasicData.reset(); +// +// List ids = DB.find(Customer.class).orderBy("id").setMaxRows(2).findIds(); +// +// List customerIds = new ArrayList<>(); +// customerIds.add(ids.get(0)); +// customerIds.add(ids.get(1)); +// +// List contactIdsForOne = contacts().findIdsByParentId(ids.get(0), null, null, null, true); +// +// List contactIdsForMultiple = contacts().findIdsByParentId(null, customerIds, null, null, true); +// +// assertThat(contactIdsForOne).isNotEmpty(); +// assertThat(contactIdsForMultiple).isNotEmpty(); +// } } diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java similarity index 77% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java index f81eb37b0..c26379261 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java @@ -1,16 +1,12 @@ package io.ebeaninternal.server.deploy; -import io.ebean.xtest.BaseTestCase; -import io.ebean.xtest.ForPlatform; -import io.ebean.annotation.Platform; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.tests.model.basic.Address; import org.tests.model.basic.BWithQIdent; import org.tests.model.basic.Customer; - -public class DeployPropertyParserTest extends BaseTestCase { +public class DeployPropertyParserTest extends BaseTest { private final BeanDescriptor descriptor = getBeanDescriptor(Customer.class); @@ -61,21 +57,14 @@ public class DeployPropertyParserTest extends BaseTestCase { } @Test - @ForPlatform({Platform.H2, Platform.POSTGRES}) public void withQuote_when_match_h2() { - Assertions.assertThat(withQuoteParser().parse("name like ?")).isEqualTo("${}\"Name\" like ?"); - } - - @Test - @ForPlatform(Platform.SQLSERVER) - public void withQuote_when_match_sqlserver() { - Assertions.assertThat(withQuoteParser().parse("name like ?")).isEqualTo("${}[Name] like ?"); - } - - @Test - @ForPlatform(Platform.MYSQL) - public void withQuote_when_match_mysql() { - Assertions.assertThat(withQuoteParser().parse("name like ?")).isEqualTo("${}`Name` like ?"); + if (isH2() || isPostgres()) { + Assertions.assertThat(withQuoteParser().parse("name like ?")).isEqualTo("${}\"Name\" like ?"); + } else if (isSqlServer()) { + Assertions.assertThat(withQuoteParser().parse("name like ?")).isEqualTo("${}[Name] like ?"); + } else if (isMySql()) { + Assertions.assertThat(withQuoteParser().parse("name like ?")).isEqualTo("${}`Name` like ?"); + } } @Test diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/FormulaPropertyPathTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/FormulaPropertyPathTest.java similarity index 95% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/FormulaPropertyPathTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/FormulaPropertyPathTest.java index 11b61ad06..423bc5f31 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/FormulaPropertyPathTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/FormulaPropertyPathTest.java @@ -1,12 +1,11 @@ package io.ebeaninternal.server.deploy; -import io.ebean.xtest.BaseTestCase; import org.junit.jupiter.api.Test; import org.tests.model.basic.Customer; import static org.assertj.core.api.Assertions.assertThat; -public class FormulaPropertyPathTest extends BaseTestCase { +public class FormulaPropertyPathTest extends BaseTest { private BeanDescriptor customerDesc = getBeanDescriptor(Customer.class); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestBeanDescriptorHasIdProperty.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestBeanDescriptorHasIdProperty.java similarity index 97% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestBeanDescriptorHasIdProperty.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestBeanDescriptorHasIdProperty.java index 72bfccdde..0268000ff 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestBeanDescriptorHasIdProperty.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestBeanDescriptorHasIdProperty.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.deploy; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.Database; import io.ebean.bean.EntityBean; @@ -19,7 +18,7 @@ import java.util.Map; import static org.junit.jupiter.api.Assertions.*; -public class TestBeanDescriptorHasIdProperty extends BaseTestCase { +public class TestBeanDescriptorHasIdProperty extends BaseTest { SpiEbeanServer spiServer; diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestCollectionLoadedStatus.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestCollectionLoadedStatus.java similarity index 92% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestCollectionLoadedStatus.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestCollectionLoadedStatus.java index de8dbdadc..445238a97 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestCollectionLoadedStatus.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestCollectionLoadedStatus.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.deploy; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.bean.BeanCollection; import io.ebean.bean.EntityBean; @@ -14,7 +13,7 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.*; -public class TestCollectionLoadedStatus extends BaseTestCase { +public class TestCollectionLoadedStatus { @Test public void test() { diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertSimple.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertSimple.java similarity index 80% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertSimple.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertSimple.java index 22a4eb8f0..7e006904c 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertSimple.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertSimple.java @@ -1,10 +1,7 @@ package io.ebeaninternal.server.deploy; -import io.ebean.xtest.BaseTestCase; -import io.ebean.DB; import io.ebean.Database; import io.ebean.bean.EntityBean; -import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.api.json.SpiJsonWriter; import org.junit.jupiter.api.Test; import org.tests.model.basic.Customer; @@ -19,18 +16,14 @@ import java.sql.Timestamp; import static org.assertj.core.api.Assertions.assertThat; -public class TestDiffHelpInsertSimple extends BaseTestCase { +public class TestDiffHelpInsertSimple extends BaseTest { private final long firstTime = System.currentTimeMillis() - 10000; - private final Database server; - private final BeanDescriptor orderDesc; public TestDiffHelpInsertSimple() { - server = DB.getDefault(); - SpiEbeanServer spiServer = (SpiEbeanServer) server; - orderDesc = spiServer.descriptor(Order.class); + orderDesc = db.descriptor(Order.class); } private Order createBaseOrder(Database server) { @@ -49,7 +42,7 @@ public class TestDiffHelpInsertSimple extends BaseTestCase { Date date = Date.valueOf("2000-01-01"); - Order order1 = createBaseOrder(server); + Order order1 = createBaseOrder(db); order1.setOrderDate(date); StringWriter buffer = new StringWriter(); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertWithEmbedded.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertWithEmbedded.java similarity index 86% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertWithEmbedded.java rename to ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertWithEmbedded.java index b1e661220..d2a05ebaf 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertWithEmbedded.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestDiffHelpInsertWithEmbedded.java @@ -1,10 +1,6 @@ package io.ebeaninternal.server.deploy; -import io.ebean.xtest.BaseTestCase; -import io.ebean.DB; -import io.ebean.Database; import io.ebean.bean.EntityBean; -import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.api.json.SpiJsonWriter; import org.junit.jupiter.api.Test; import org.tests.model.embedded.EMain; @@ -15,14 +11,12 @@ import java.io.StringWriter; import static org.assertj.core.api.Assertions.assertThat; -public class TestDiffHelpInsertWithEmbedded extends BaseTestCase { +public class TestDiffHelpInsertWithEmbedded extends BaseTest { private final BeanDescriptor emainDesc; public TestDiffHelpInsertWithEmbedded() { - Database server = DB.getDefault(); - SpiEbeanServer spiServer = (SpiEbeanServer) server; - emainDesc = spiServer.descriptor(EMain.class); + emainDesc = getBeanDescriptor(EMain.class); } @Test diff --git a/ebean-core/src/test/java/org/tests/model/basic/Animal.java b/ebean-core/src/test/java/org/tests/model/basic/Animal.java new file mode 100644 index 000000000..069b1e4cf --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/Animal.java @@ -0,0 +1,54 @@ +package org.tests.model.basic; + +import javax.persistence.*; + +@Entity +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +@DiscriminatorColumn(name = "species") +public abstract class Animal { + + @Id + Long id; + + @Version + Long version; + + @Column(name = "species", insertable = false, updatable = false, nullable = false) + String species; + + @ManyToOne + AnimalShelter shelter; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getVersion() { + return version; + } + + public void setVersion(Long version) { + this.version = version; + } + + public String getSpecies() { + return species; + } + + public void setSpecies(String species) { + this.species = species; + } + + public AnimalShelter getShelter() { + return shelter; + } + + public void setShelter(AnimalShelter shelter) { + this.shelter = shelter; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/AnimalShelter.java b/ebean-core/src/test/java/org/tests/model/basic/AnimalShelter.java new file mode 100644 index 000000000..761a8d4c7 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/AnimalShelter.java @@ -0,0 +1,57 @@ +package org.tests.model.basic; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import javax.persistence.Version; +import java.util.List; + +import static javax.persistence.CascadeType.PERSIST; + +@Entity +public class AnimalShelter { + + @Id + Long id; + + @Version + Long version; + + String name; + + @OneToMany(cascade = PERSIST, mappedBy = "shelter", orphanRemoval = true) + List animals; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getVersion() { + return version; + } + + public void setVersion(Long version) { + this.version = version; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getAnimals() { + return animals; + } + + public void setAnimals(List animals) { + this.animals = animals; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/BWithQIdent.java b/ebean-core/src/test/java/org/tests/model/basic/BWithQIdent.java new file mode 100644 index 000000000..4ba4c5def --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/BWithQIdent.java @@ -0,0 +1,57 @@ +package org.tests.model.basic; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Version; +import javax.validation.constraints.Size; +import java.sql.Timestamp; + +@Entity +public class BWithQIdent { + + @Id + Integer id; + @Column(name = "`Name`", unique = true) + @Size(max = 191) // key must not exceed 767 Bytes, so max key len for mysql with utf8mb4 = 191*4 = 764 bytes + String name; + + @Column(name = "`CODE`") + String CODE; + + @Version + Timestamp lastUpdated; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCODE() { + return CODE; + } + + public void setCODE(String CODE) { + this.CODE = CODE; + } + + public Timestamp getLastUpdated() { + return lastUpdated; + } + + public void setLastUpdated(Timestamp lastUpdated) { + this.lastUpdated = lastUpdated; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/Cat.java b/ebean-core/src/test/java/org/tests/model/basic/Cat.java new file mode 100644 index 000000000..d3df201b6 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/Cat.java @@ -0,0 +1,32 @@ +package org.tests.model.basic; + +import io.ebean.annotation.Formula; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; + +@Entity +@DiscriminatorValue("CAT") +public class Cat extends Animal { + + String name; + + @Formula(select = "${ta}.species") + String catFormula; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCatFormula() { + return catFormula; + } + + public void setCatFormula(String catFormula) { + this.catFormula = catFormula; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/Dog.java b/ebean-core/src/test/java/org/tests/model/basic/Dog.java new file mode 100644 index 000000000..7b2fad546 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/Dog.java @@ -0,0 +1,31 @@ +package org.tests.model.basic; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; +import java.sql.Date; + +@Entity +@DiscriminatorValue("DOG") +public class Dog extends Animal { + + String registrationNumber; + + Date dateOfBirth; + + public String getRegistrationNumber() { + return registrationNumber; + } + + public void setRegistrationNumber(String registrationNumber) { + this.registrationNumber = registrationNumber; + } + + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/bridge/BSite.java b/ebean-core/src/test/java/org/tests/model/bridge/BSite.java new file mode 100644 index 000000000..2023a8c4b --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/bridge/BSite.java @@ -0,0 +1,20 @@ +package org.tests.model.bridge; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.util.UUID; + +@Entity +public class BSite { + + @Id @GeneratedValue + UUID id; + + String name; + + public BSite(String name) { + this.name = name; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/bridge/BUser.java b/ebean-core/src/test/java/org/tests/model/bridge/BUser.java new file mode 100644 index 000000000..7a87fe864 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/bridge/BUser.java @@ -0,0 +1,19 @@ +package org.tests.model.bridge; + +import javax.persistence.Entity; +import javax.persistence.Id; +import java.util.UUID; + +@Entity +public class BUser { + + @Id + UUID id; + + String name; + + public BUser(String name) { + this.name = name; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/composite/RCustomer.java b/ebean-core/src/test/java/org/tests/model/composite/RCustomer.java new file mode 100644 index 000000000..d44cf8052 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/composite/RCustomer.java @@ -0,0 +1,43 @@ +package org.tests.model.composite; + + +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; + +/** + * @author rnentjes + */ +@Entity +public class RCustomer { + + @EmbeddedId + private RCustomerKey key; + + private String description; + + public RCustomer() { + } + + public RCustomer(RCustomerKey key, String description) { + this.key = key; + this.description = description; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public RCustomerKey getKey() { + return key; + } + + public void setKey(RCustomerKey key) { + this.key = key; + } + +} + diff --git a/ebean-core/src/test/java/org/tests/model/composite/RCustomerKey.java b/ebean-core/src/test/java/org/tests/model/composite/RCustomerKey.java new file mode 100644 index 000000000..a871d49aa --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/composite/RCustomerKey.java @@ -0,0 +1,68 @@ +package org.tests.model.composite; + + +import javax.persistence.Embeddable; +import javax.validation.constraints.Size; + +@Embeddable +public class RCustomerKey { + + @Size(max=127) + private String company; + + @Size(max=127) + private String name; + + public RCustomerKey() { + } + + public RCustomerKey(String company, String name) { + this.company = company; + this.name = name; + } + + public String getCompany() { + return company; + } + + public void setCompany(String company) { + this.company = company; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final RCustomerKey other = (RCustomerKey) obj; + if ((this.company == null) ? (other.company != null) : !this.company.equals(other.company)) { + return false; + } + if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) { + return false; + } + return true; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 89 * hash + (this.company != null ? this.company.hashCode() : 0); + hash = 89 * hash + (this.name != null ? this.name.hashCode() : 0); + return hash; + } + + +} + diff --git a/ebean-core/src/test/java/org/tests/model/embedded/UserInterestLive.java b/ebean-core/src/test/java/org/tests/model/embedded/UserInterestLive.java new file mode 100644 index 000000000..341f0670e --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/embedded/UserInterestLive.java @@ -0,0 +1,34 @@ +package org.tests.model.embedded; + +import io.ebean.Model; +import io.ebean.annotation.WhenCreated; + +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import java.util.Date; + +@Entity +public class UserInterestLive extends Model { + + @EmbeddedId + private final UserInterestLiveKey key; + + @WhenCreated + private Date createdAt; + + public UserInterestLive(UserInterestLiveKey key) { + this.key = key; + } + + public UserInterestLiveKey getKey() { + return key; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/embedded/UserInterestLiveKey.java b/ebean-core/src/test/java/org/tests/model/embedded/UserInterestLiveKey.java new file mode 100644 index 000000000..52b6583cd --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/embedded/UserInterestLiveKey.java @@ -0,0 +1,30 @@ +package org.tests.model.embedded; + +import javax.persistence.Embeddable; +import java.util.Objects; + +@Embeddable +public class UserInterestLiveKey { + + private long userId; + private long liveId; + + public UserInterestLiveKey(long userId, long liveId) { + this.userId = userId; + this.liveId = liveId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + UserInterestLiveKey that = (UserInterestLiveKey) o; + return userId == that.userId && + liveId == that.liveId; + } + + @Override + public int hashCode() { + return Objects.hash(userId, liveId); + } +} diff --git a/ebean-core/src/test/resources/application-test.properties b/ebean-core/src/test/resources/application-test.properties index d42469e88..3b0bce78a 100644 --- a/ebean-core/src/test/resources/application-test.properties +++ b/ebean-core/src/test/resources/application-test.properties @@ -4,3 +4,10 @@ datasource.h2.username=sa datasource.h2.password= datasource.h2.url=jdbc:h2:mem:testCoreMem;DB_CLOSE_ON_EXIT=FALSE;NON_KEYWORDS=KEY,VALUE +datasource.h2other.username=sa +datasource.h2other.password= +datasource.h2other.url=jdbc:h2:mem:testCoreOther;DB_CLOSE_ON_EXIT=FALSE;NON_KEYWORDS=KEY,VALUE + +ebean.h2.ddl.generate=true +ebean.h2.ddl.run=true +ebean.h2.ddl.initSql=h2-init.sql diff --git a/ebean-core/src/test/resources/h2-init.sql b/ebean-core/src/test/resources/h2-init.sql new file mode 100644 index 000000000..ff38387da --- /dev/null +++ b/ebean-core/src/test/resources/h2-init.sql @@ -0,0 +1,19 @@ + +create table animal ( + species varchar(255) not null, + id bigint generated by default as identity not null, + shelter_id bigint, + version bigint not null, + name varchar(255), + registration_number varchar(255), + date_of_birth date, + dog_size varchar(255), + constraint pk_animal primary key (id) +); + +create table animal_shelter ( + id bigint generated by default as identity not null, + name varchar(255), + version bigint not null, + constraint pk_animal_shelter primary key (id) +); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestNotEnhancedMappedSuper.java b/ebean-test/src/test/java/io/ebean/xtest/core/TestNotEnhancedMappedSuper.java similarity index 96% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestNotEnhancedMappedSuper.java rename to ebean-test/src/test/java/io/ebean/xtest/core/TestNotEnhancedMappedSuper.java index d271374ac..6a81461f4 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestNotEnhancedMappedSuper.java +++ b/ebean-test/src/test/java/io/ebean/xtest/core/TestNotEnhancedMappedSuper.java @@ -1,4 +1,4 @@ -package io.ebeaninternal.server.deploy; +package io.ebean.xtest.core; import io.ebean.xtest.BaseTestCase; diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestReferenceWithConstructorProperties.java b/ebean-test/src/test/java/io/ebean/xtest/core/TestReferenceWithConstructorProperties.java similarity index 95% rename from ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestReferenceWithConstructorProperties.java rename to ebean-test/src/test/java/io/ebean/xtest/core/TestReferenceWithConstructorProperties.java index c8b4ac78a..ce4d4109a 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/deploy/TestReferenceWithConstructorProperties.java +++ b/ebean-test/src/test/java/io/ebean/xtest/core/TestReferenceWithConstructorProperties.java @@ -1,4 +1,4 @@ -package io.ebeaninternal.server.deploy; +package io.ebean.xtest.core; import io.ebean.xtest.BaseTestCase; import io.ebean.BeanState; From e3e54141574c2d65933ae723d5ed656a433c9787 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Sun, 27 Mar 2022 19:55:34 +1300 Subject: [PATCH 04/10] Refactor tests, move some internal expression tests to ebean-core --- .../expression/AllEqualsExpressionTest.java | 0 .../server/expression/BaseExpressionTest.java | 4 +- .../expression/BetweenExpressionTest.java | 0 .../BetweenPropertyExpressionTest.java | 3 +- .../CaseInsensitiveEqualExpressionTest.java | 0 .../DefaultExampleExpressionTest.java | 41 +----------- .../DefaultExpressionFactoryTest.java | 0 .../expression/DefaultExpressionListTest.java | 0 .../expression/ExistsQueryExpressionTest.java | 0 .../server/expression/IdExpressionTest.java | 0 .../server/expression/IdInExpressionTest.java | 0 .../server/expression/InExpressionTest.java | 0 .../expression/InPairsExpressionTest.java | 0 .../expression/InQueryExpressionTest.java | 0 .../expression/InRangeExpressionTest.java | 0 .../expression/JsonPathExpressionTest.java | 0 .../expression/JunctionExpressionTest.java | 0 .../server/expression/LikeExpressionTest.java | 0 .../expression/LogicExpressionTest.java | 0 .../server/expression/NoopExpressionTest.java | 29 ++------- .../server/expression/NotExpressionTest.java | 0 .../server/expression/NullExpressionTest.java | 0 .../expression/PrepareDocNestedTest.java | 4 +- .../expression/RawExpressionBuilderTest.java | 0 .../server/expression/RawExpressionTest.java | 0 .../server/expression/SameTest.java | 0 .../expression/SimpleExpressionTest.java | 0 .../expression/TDSpiExpressionRequest.java | 0 .../server/querydefn/DefaultOrmQueryTest.java | 14 ++-- .../server/querydefn/OrmQueryDetailTest.java | 4 +- .../server/querydefn/OrmQueryPlanKeyTest.java | 4 +- .../java/org/tests/model/basic/Order.java | 34 +++++----- .../org/tests/model/basic/OrderAggregate.java | 64 +++++++++++++++++++ .../org/tests/model/basic/OrderShipment.java | 35 ++++++++++ ebean-core/src/test/resources/h2-init.sql | 15 +++++ .../DefaultExampleExpressionTest.java | 64 +++++++++++++++++++ .../IsEmptyExpressionQueryTest.java | 3 +- 37 files changed, 221 insertions(+), 97 deletions(-) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/AllEqualsExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java (95%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/BetweenExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java (91%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java (72%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionFactoryTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionListTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/ExistsQueryExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/IdExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/IdInExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/InExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/InPairsExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/InQueryExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/InRangeExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/JsonPathExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/JunctionExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/LikeExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/LogicExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java (73%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/NotExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/NullExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/PrepareDocNestedTest.java (97%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/RawExpressionBuilderTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/SameTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/SimpleExpressionTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/expression/TDSpiExpressionRequest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java (89%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryDetailTest.java (98%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java (98%) create mode 100644 ebean-core/src/test/java/org/tests/model/basic/OrderAggregate.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/OrderShipment.java create mode 100644 ebean-test/src/test/java/io/ebean/xtest/expression/DefaultExampleExpressionTest.java rename ebean-test/src/test/java/io/{ebeaninternal/server => ebean/xtest}/expression/IsEmptyExpressionQueryTest.java (98%) diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/AllEqualsExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/AllEqualsExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/AllEqualsExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/AllEqualsExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java similarity index 95% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java index 4f8bed0c7..b66c1da62 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java @@ -1,18 +1,18 @@ package io.ebeaninternal.server.expression; -import io.ebean.xtest.BaseTestCase; import io.ebean.EbeanServer; import io.ebean.Query; import io.ebean.Transaction; import io.ebean.event.BeanQueryRequest; import io.ebeaninternal.api.SpiExpression; +import io.ebeaninternal.server.deploy.BaseTest; import io.ebeaninternal.server.deploy.BeanDescriptor; import org.tests.model.basic.Customer; import org.tests.model.basic.Order; import static org.assertj.core.api.Assertions.assertThat; -public abstract class BaseExpressionTest extends BaseTestCase { +public abstract class BaseExpressionTest extends BaseTest { protected DefaultExpressionRequest newExpressionRequest() { BeanDescriptor desc = getBeanDescriptor(Order.class); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/BetweenExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/BetweenExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/BetweenExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/BetweenExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java similarity index 91% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java index be487ca00..c1f4d3751 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java @@ -1,5 +1,6 @@ package io.ebeaninternal.server.expression; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -14,7 +15,7 @@ public class BetweenPropertyExpressionTest extends BaseExpressionTest { public void sqlExpression() { TDSpiExpressionRequest request = new TDSpiExpressionRequest(null); exp("a", "b", 10).addSql(request); - assertThat(request.getSql()).isEqualTo(" ? between a and b"); + Assertions.assertThat(request.getSql()).isEqualTo(" ? between a and b"); } @Test diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java similarity index 72% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java index 452db7dbf..9c25ac2f9 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java @@ -1,19 +1,16 @@ package io.ebeaninternal.server.expression; import io.ebean.LikeType; -import io.ebean.Query; import io.ebean.bean.EntityBean; import io.ebean.event.BeanQueryRequest; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.server.core.OrmQueryRequest; import io.ebeaninternal.server.deploy.BeanDescriptor; +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 BaseExpressionTest { @@ -72,43 +69,9 @@ public class DefaultExampleExpressionTest extends BaseExpressionTest { TDSpiExpressionRequest req = new TDSpiExpressionRequest(customerBeanDescriptor()); expr.addBindValues(req); - assertThat(req.bindValues).contains("name", "billingAddress.city"); - - Customer customer = customer(); - customer.setName("Rob"); - customer.getBillingAddress().setCity("Auckland"); - - ResetBasicData.reset(); - - Query 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 "); - + Assertions.assertThat(req.bindValues).contains("name", "billingAddress.city"); } - @Test - public void emptyExampleBean() { - - ResetBasicData.reset(); - - Customer customer = new Customer(); - - Query 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 OrmQueryRequest create(SpiQuery query) { return new OrmQueryRequest<>(null, null, query, null); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionFactoryTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionFactoryTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionFactoryTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionFactoryTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionListTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionListTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionListTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionListTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/ExistsQueryExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/ExistsQueryExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/ExistsQueryExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/ExistsQueryExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/IdExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/IdExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/IdExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/IdExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/IdInExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/IdInExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/IdInExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/IdInExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/InExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/InExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/InExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/InExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/InPairsExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/InPairsExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/InPairsExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/InPairsExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/InQueryExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/InQueryExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/InQueryExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/InQueryExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/InRangeExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/InRangeExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/InRangeExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/InRangeExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/JsonPathExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/JsonPathExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/JsonPathExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/JsonPathExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/JunctionExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/JunctionExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/JunctionExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/JunctionExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/LikeExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/LikeExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/LikeExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/LikeExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/LogicExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/LogicExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/LogicExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/LogicExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java similarity index 73% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java index 69bbbf6db..fd5548b1c 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java @@ -2,50 +2,29 @@ package io.ebeaninternal.server.expression; import io.ebean.DB; import io.ebean.Query; -import io.ebean.test.LoggedSql; import org.junit.jupiter.api.Test; 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; - public class NoopExpressionTest extends BaseExpressionTest { @Test public void test() { - + initTables(); Query query = DB.find(Customer.class) .select("id") .where().add(NoopExpression.INSTANCE) .query(); query.findList(); - String generatedSql = sqlOf(query); - + String generatedSql = query.getGeneratedSql(); assertThat(generatedSql).contains("select t0.id from o_customer t0 where 1=1"); } - @Test - public void test_withSoftDeleteBean() { - - Query query = DB.find(Cover.class) - .where().add(NoopExpression.INSTANCE) - .query(); - - LoggedSql.start(); - - query.findCount(); - - List sql = LoggedSql.stop(); - assertSql(sql.get(0)).contains("select count(*) from cover t0 where 1=1 and"); - } - @Test public void test_withPreAndPost() { - + initTables(); Query query = DB.find(Customer.class) .select("id") .where().eq("name", null) @@ -54,7 +33,7 @@ public class NoopExpressionTest extends BaseExpressionTest { .query(); 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"); } diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/NotExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/NotExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/NotExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/NotExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/NullExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/NullExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/NullExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/NullExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/PrepareDocNestedTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/PrepareDocNestedTest.java similarity index 97% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/PrepareDocNestedTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/PrepareDocNestedTest.java index 125c2ac21..c9be84436 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/expression/PrepareDocNestedTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/expression/PrepareDocNestedTest.java @@ -1,9 +1,9 @@ package io.ebeaninternal.server.expression; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.ExpressionList; import io.ebeaninternal.api.SpiExpression; +import io.ebeaninternal.server.deploy.BaseTest; import org.junit.jupiter.api.Test; 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.assertNull; -public class PrepareDocNestedTest extends BaseTestCase { +public class PrepareDocNestedTest extends BaseTest { @Test public void prepare() throws Exception { diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/RawExpressionBuilderTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/RawExpressionBuilderTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/RawExpressionBuilderTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/RawExpressionBuilderTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/SameTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/SameTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/SameTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/SameTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/SimpleExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/SimpleExpressionTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/SimpleExpressionTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/SimpleExpressionTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/TDSpiExpressionRequest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/TDSpiExpressionRequest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/TDSpiExpressionRequest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/expression/TDSpiExpressionRequest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java similarity index 89% rename from ebean-test/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java index f4a6d421a..e7cacbbe5 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java @@ -1,19 +1,21 @@ package io.ebeaninternal.server.querydefn; -import io.ebean.xtest.BaseTestCase; -import io.ebean.CacheMode; -import io.ebean.DB; +import io.ebean.*; import io.ebeaninternal.api.BindValuesKey; import io.ebeaninternal.api.SpiQuery; +import io.ebeaninternal.server.core.DefaultServer; 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.tests.model.basic.Customer; import org.tests.model.basic.Order; import static org.assertj.core.api.Assertions.assertThat; -public class DefaultOrmQueryTest extends BaseTestCase { +public class DefaultOrmQueryTest extends BaseExpressionTest { @Test public void when_forUpdate_then_excludeFromBeanCache() { @@ -105,10 +107,10 @@ public class DefaultOrmQueryTest extends BaseTestCase { private void prepare(DefaultOrmQuery q1, DefaultOrmQuery q2) { - OrmQueryRequest r1 = createQueryRequest(SpiQuery.Type.LIST, q1, null); + OrmQueryRequest r1 = OrmQueryRequestTestHelper.queryRequest(q1); q1.prepare(r1); - OrmQueryRequest r2 = createQueryRequest(SpiQuery.Type.LIST, q2, null); + OrmQueryRequest r2 = OrmQueryRequestTestHelper.queryRequest(q2); q2.prepare(r2); } diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryDetailTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryDetailTest.java similarity index 98% rename from ebean-test/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryDetailTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryDetailTest.java index 31849f1e4..fcda26121 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryDetailTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryDetailTest.java @@ -1,6 +1,6 @@ package io.ebeaninternal.server.querydefn; -import io.ebean.xtest.BaseTestCase; +import io.ebeaninternal.server.deploy.BaseTest; import io.ebeaninternal.server.deploy.BeanDescriptor; import org.junit.jupiter.api.Test; 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.junit.jupiter.api.Assertions.*; -public class OrmQueryDetailTest extends BaseTestCase { +public class OrmQueryDetailTest extends BaseTest { OrmQueryDetail parse(String query) { return new OrmQueryDetailParser(query).parse(); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java similarity index 98% rename from ebean-test/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java index e132f8320..6e181573b 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java @@ -5,10 +5,10 @@ import io.ebean.ExpressionList; import io.ebean.Query; import io.ebeaninternal.api.CQueryPlanKey; import io.ebeaninternal.api.SpiQuery; +import io.ebeaninternal.server.deploy.BaseTest; import io.ebeaninternal.server.deploy.TableJoin; import io.ebeaninternal.server.deploy.meta.DeployTableJoin; import io.ebeaninternal.server.deploy.meta.DeployTableJoinColumn; -import io.ebeaninternal.server.expression.BaseExpressionTest; import org.junit.jupiter.api.Test; import org.tests.model.basic.Customer; @@ -16,7 +16,7 @@ import java.sql.Timestamp; import static org.assertj.core.api.Assertions.assertThat; -public class OrmQueryPlanKeyTest extends BaseExpressionTest { +public class OrmQueryPlanKeyTest extends BaseTest { @SuppressWarnings({"unchecked", "rawtypes"}) private DefaultOrmQuery query() { diff --git a/ebean-core/src/test/java/org/tests/model/basic/Order.java b/ebean-core/src/test/java/org/tests/model/basic/Order.java index 537207935..dfb9f2aef 100644 --- a/ebean-core/src/test/java/org/tests/model/basic/Order.java +++ b/ebean-core/src/test/java/org/tests/model/basic/Order.java @@ -82,8 +82,8 @@ public class Order implements Serializable { @DocEmbedded List details; -// @OneToMany(cascade = CascadeType.ALL, mappedBy = "order", orphanRemoval = true) -// List shipments; + @OneToMany(cascade = CascadeType.ALL, mappedBy = "order", orphanRemoval = true) + List shipments; @Override public String toString() { @@ -234,19 +234,19 @@ public class Order implements Serializable { details.add(detail); } -// public List getShipments() { -// return shipments; -// } -// -// public void setShipments(List shipments) { -// this.shipments = shipments; -// } -// -// public void addShipment(OrderShipment shipment) { -// -// if (shipments == null) { -// shipments = new ArrayList<>(); -// } -// shipments.add(shipment); -// } + public List getShipments() { + return shipments; + } + + public void setShipments(List shipments) { + this.shipments = shipments; + } + + public void addShipment(OrderShipment shipment) { + + if (shipments == null) { + shipments = new ArrayList<>(); + } + shipments.add(shipment); + } } diff --git a/ebean-core/src/test/java/org/tests/model/basic/OrderAggregate.java b/ebean-core/src/test/java/org/tests/model/basic/OrderAggregate.java new file mode 100644 index 000000000..364d94f2f --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/OrderAggregate.java @@ -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. + *

+ * Note the @Sql indicates to Ebean that this bean is not based on a table but + * instead uses RawSql. + *

+ */ +@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; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/OrderShipment.java b/ebean-core/src/test/java/org/tests/model/basic/OrderShipment.java new file mode 100644 index 000000000..a587538a1 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/OrderShipment.java @@ -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; + } + +} diff --git a/ebean-core/src/test/resources/h2-init.sql b/ebean-core/src/test/resources/h2-init.sql index ff38387da..10f672d4b 100644 --- a/ebean-core/src/test/resources/h2-init.sql +++ b/ebean-core/src/test/resources/h2-init.sql @@ -17,3 +17,18 @@ create table animal_shelter ( version bigint not null, 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) +); diff --git a/ebean-test/src/test/java/io/ebean/xtest/expression/DefaultExampleExpressionTest.java b/ebean-test/src/test/java/io/ebean/xtest/expression/DefaultExampleExpressionTest.java new file mode 100644 index 000000000..84bcffc55 --- /dev/null +++ b/ebean-test/src/test/java/io/ebean/xtest/expression/DefaultExampleExpressionTest.java @@ -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 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 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"); + } + +} diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/expression/IsEmptyExpressionQueryTest.java b/ebean-test/src/test/java/io/ebean/xtest/expression/IsEmptyExpressionQueryTest.java similarity index 98% rename from ebean-test/src/test/java/io/ebeaninternal/server/expression/IsEmptyExpressionQueryTest.java rename to ebean-test/src/test/java/io/ebean/xtest/expression/IsEmptyExpressionQueryTest.java index 9f6d3ebf6..3227ca02e 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/expression/IsEmptyExpressionQueryTest.java +++ b/ebean-test/src/test/java/io/ebean/xtest/expression/IsEmptyExpressionQueryTest.java @@ -1,9 +1,10 @@ -package io.ebeaninternal.server.expression; +package io.ebean.xtest.expression; import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.Query; import io.ebean.test.LoggedSql; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.tests.model.basic.Contact; import org.tests.model.basic.Customer; From 426d314e632e24fc8a81e8284f549197b3748853 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Sun, 27 Mar 2022 20:20:35 +1300 Subject: [PATCH 05/10] Refactor tests, move internal type tests to ebean-core --- .../BasePlatformArrayTypeFactoryTest.java | 0 .../server/type/ConvertInetAddressTest.java | 0 .../server/type/ConvertInetAddressesTest.java | 0 .../server/type/DecimalUtilsTest.java | 0 .../server/type/DefaultTypeFactoryTest.java | 0 .../server/type/DefaultTypeManagerTest.java | 4 +- .../type/IsoJsonDateTimeParserTest.java | 0 .../ebeaninternal/server/type/JsonTester.java | 0 .../server/type/JsonTrimTest.java | 0 .../server/type/ModifyAwareFlagTest.java | 0 .../server/type/ModifyAwareListTest.java | 0 .../server/type/ModifyAwareMapTest.java | 0 .../server/type/ModifyAwareSetTest.java | 0 .../type/ScalarTypeArrayListH2Test.java | 0 .../server/type/ScalarTypeArrayListTest.java | 0 .../server/type/ScalarTypeArraySetH2Test.java | 0 .../server/type/ScalarTypeArraySetTest.java | 0 .../server/type/ScalarTypeBooleanTest.java | 5 +- .../server/type/ScalarTypeCalendarTest.java | 0 .../server/type/ScalarTypeDateTest.java | 0 .../server/type/ScalarTypeDurationTest.java | 0 .../type/ScalarTypeDurationWithNanosTest.java | 0 .../server/type/ScalarTypeInstantTest.java | 0 .../server/type/ScalarTypeIntegerTest.java | 0 .../type/ScalarTypeJodaLocalDateTest.java | 0 .../type/ScalarTypeJodaLocalDateTimeTest.java | 0 .../type/ScalarTypeJodaLocalTimeTest.java | 3 +- .../server/type/ScalarTypeJodaPeriodTest.java | 0 .../server/type/ScalarTypeJsonListTest.java | 0 .../server/type/ScalarTypeLocalDateTest.java | 0 .../type/ScalarTypeLocalDateTimeTest.java | 0 .../server/type/ScalarTypeLocalTimeTest.java | 0 .../ScalarTypeLocalTimeWithNanosTest.java | 0 .../server/type/ScalarTypeLongTest.java | 0 .../server/type/ScalarTypeMonthDayTest.java | 0 .../type/ScalarTypeOffsetDateTimeTest.java | 0 .../server/type/ScalarTypeOffsetTimeTest.java | 0 .../server/type/ScalarTypePathTest.java | 0 .../server/type/ScalarTypePeriodTest.java | 0 .../type/ScalarTypePostgresHstoreTest.java | 0 .../server/type/ScalarTypeTimestampTest.java | 0 .../server/type/ScalarTypeUUIDBaseTest.java | 0 .../server/type/ScalarTypeUtilDateTest.java | 0 .../type/ScalarTypeWrapperAdapterTest.java | 0 .../server/type/ScalarTypeWrapperOidTest.java | 0 .../type/ScalarTypeYearMonthDateTest.java | 0 .../server/type/ScalarTypeYearTest.java | 0 .../server/type/ScalarTypeZoneIdTest.java | 0 .../server/type/ScalarTypeZoneOffsetTest.java | 0 .../type/ScalarTypeZonedDateTimeTest.java | 0 .../server/type/TestEnumToBeanType.java | 0 .../server/type/TestLocaleParse.java | 0 .../TestScalarTypeUUIDBinaryConversion.java | 0 .../server/type/TestSimpleEncryptor.java | 20 ++- .../server/type/TestTypeManager.java | 10 +- .../server/type/TypeReflectHelperTest.java | 0 .../server/type/UtilDateParserTest.java | 0 .../java/org/tests/model/basic/IntEnum.java | 13 ++ .../org/tests/model/basic/TJodaEntity.java | 32 ++++ .../test/java/org/tests/model/basic/TOne.java | 55 +++++++ .../org/tests/model/basic/VarcharEnum.java | 13 ++ .../tests/model/basic/enums/MyDayOfWeek.java | 17 +++ .../org/tests/model/basic/enums/MyEnum.java | 28 ++++ .../org/tests/model/basic/enums/MySex.java | 5 + .../test/java/org/tests/model/ivo/Money.java | 143 ++++++++++++++++++ .../test/java/org/tests/model/ivo/Oid.java | 46 ++++++ .../java/org/tests/model/ivo/SysTime.java | 15 ++ .../ivo/converter/MoneyTypeConverter.java | 23 +++ .../model/ivo/converter/OidTypeConverter.java | 28 ++++ .../model/ivo/converter/SysTimeConverter.java | 27 ++++ .../resources/application-test.properties | 2 + .../xtest/core}/TestBinaryUUID.java | 19 ++- .../server/core/HelpCreateQueryRequest.java | 14 -- .../core/OrmQueryRequestTestHelper.java | 18 --- .../server/loadcontext/DLoadContextTest.java | 104 ------------- 75 files changed, 485 insertions(+), 159 deletions(-) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/BasePlatformArrayTypeFactoryTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ConvertInetAddressTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ConvertInetAddressesTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/DecimalUtilsTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/DefaultTypeFactoryTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java (98%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/IsoJsonDateTimeParserTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/JsonTester.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/JsonTrimTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ModifyAwareFlagTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ModifyAwareListTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ModifyAwareMapTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ModifyAwareSetTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeArrayListH2Test.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeArrayListTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeArraySetH2Test.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeArraySetTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeBooleanTest.java (90%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeCalendarTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeDateTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanosTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeInstantTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeIntegerTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTimeTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeTest.java (94%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaPeriodTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeJsonListTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTimeTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanosTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeLongTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeMonthDayTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeOffsetDateTimeTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeOffsetTimeTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypePathTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypePeriodTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypePostgresHstoreTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeTimestampTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeUUIDBaseTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeUtilDateTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperAdapterTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperOidTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearMonthDateTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeZoneIdTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeZoneOffsetTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/ScalarTypeZonedDateTimeTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/TestEnumToBeanType.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/TestLocaleParse.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/TestScalarTypeUUIDBinaryConversion.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/TestSimpleEncryptor.java (72%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java (96%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/TypeReflectHelperTest.java (100%) rename {ebean-test => ebean-core}/src/test/java/io/ebeaninternal/server/type/UtilDateParserTest.java (100%) create mode 100644 ebean-core/src/test/java/org/tests/model/basic/IntEnum.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/TJodaEntity.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/TOne.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/VarcharEnum.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/enums/MyDayOfWeek.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/enums/MyEnum.java create mode 100644 ebean-core/src/test/java/org/tests/model/basic/enums/MySex.java create mode 100644 ebean-core/src/test/java/org/tests/model/ivo/Money.java create mode 100644 ebean-core/src/test/java/org/tests/model/ivo/Oid.java create mode 100644 ebean-core/src/test/java/org/tests/model/ivo/SysTime.java create mode 100644 ebean-core/src/test/java/org/tests/model/ivo/converter/MoneyTypeConverter.java create mode 100644 ebean-core/src/test/java/org/tests/model/ivo/converter/OidTypeConverter.java create mode 100644 ebean-core/src/test/java/org/tests/model/ivo/converter/SysTimeConverter.java rename ebean-test/src/test/java/io/{ebeaninternal/server/type => ebean/xtest/core}/TestBinaryUUID.java (66%) delete mode 100644 ebean-test/src/test/java/io/ebeaninternal/server/core/HelpCreateQueryRequest.java delete mode 100644 ebean-test/src/test/java/io/ebeaninternal/server/core/OrmQueryRequestTestHelper.java delete mode 100644 ebean-test/src/test/java/io/ebeaninternal/server/loadcontext/DLoadContextTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/BasePlatformArrayTypeFactoryTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/BasePlatformArrayTypeFactoryTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/BasePlatformArrayTypeFactoryTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/BasePlatformArrayTypeFactoryTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ConvertInetAddressTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ConvertInetAddressTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ConvertInetAddressTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ConvertInetAddressTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ConvertInetAddressesTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ConvertInetAddressesTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ConvertInetAddressesTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ConvertInetAddressesTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/DecimalUtilsTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/DecimalUtilsTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/DecimalUtilsTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/DecimalUtilsTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/DefaultTypeFactoryTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/DefaultTypeFactoryTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/DefaultTypeFactoryTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/DefaultTypeFactoryTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java similarity index 98% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java index 797c66e7d..f1eecb84e 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java @@ -5,9 +5,9 @@ import io.ebean.config.dbplatform.postgres.PostgresPlatform; import io.ebean.core.type.ScalarType; import io.ebeaninternal.server.core.bootup.BootupClasses; import org.junit.jupiter.api.Test; -import org.tests.model.array.IntEnum; -import org.tests.model.array.VarcharEnum; import org.tests.model.basic.Car; +import org.tests.model.basic.IntEnum; +import org.tests.model.basic.VarcharEnum; import javax.persistence.EnumType; import java.time.DayOfWeek; diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/IsoJsonDateTimeParserTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/IsoJsonDateTimeParserTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/IsoJsonDateTimeParserTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/IsoJsonDateTimeParserTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/JsonTester.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/JsonTester.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/JsonTester.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/JsonTester.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/JsonTrimTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/JsonTrimTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/JsonTrimTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/JsonTrimTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ModifyAwareFlagTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ModifyAwareFlagTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ModifyAwareFlagTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ModifyAwareFlagTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ModifyAwareListTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ModifyAwareListTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ModifyAwareListTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ModifyAwareListTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ModifyAwareMapTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ModifyAwareMapTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ModifyAwareMapTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ModifyAwareMapTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ModifyAwareSetTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ModifyAwareSetTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ModifyAwareSetTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ModifyAwareSetTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeArrayListH2Test.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeArrayListH2Test.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeArrayListH2Test.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeArrayListH2Test.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeArrayListTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeArrayListTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeArrayListTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeArrayListTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeArraySetH2Test.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeArraySetH2Test.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeArraySetH2Test.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeArraySetH2Test.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeArraySetTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeArraySetTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeArraySetTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeArraySetTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeBooleanTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeBooleanTest.java similarity index 90% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeBooleanTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeBooleanTest.java index fcbe7b535..f7a659df3 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeBooleanTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeBooleanTest.java @@ -3,6 +3,7 @@ package io.ebeaninternal.server.type; import io.ebean.DB; import io.ebean.text.json.JsonContext; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.tests.model.basic.TOne; @@ -25,7 +26,7 @@ public class ScalarTypeBooleanTest { String json = jsonContext.toJson(bean); TOne tOne = jsonContext.toBean(TOne.class, json); - assertTrue(tOne.isActive()); + Assertions.assertTrue(tOne.isActive()); assertEquals(json, "{\"id\":42,\"active\":true}"); } @@ -39,7 +40,7 @@ public class ScalarTypeBooleanTest { String json = jsonContext.toJson(bean); TOne tOne = jsonContext.toBean(TOne.class, json); - assertFalse(tOne.isActive()); + Assertions.assertFalse(tOne.isActive()); assertEquals(json, "{\"id\":42,\"active\":false}"); } diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeCalendarTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeCalendarTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeCalendarTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeCalendarTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeDateTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDateTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeDateTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDateTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanosTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanosTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanosTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanosTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeInstantTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeInstantTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeInstantTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeInstantTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeIntegerTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeIntegerTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeIntegerTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeIntegerTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTimeTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTimeTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTimeTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTimeTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeTest.java similarity index 94% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeTest.java index 80918a5a2..9eaf9b452 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeTest.java @@ -4,6 +4,7 @@ import io.ebean.DB; import org.joda.time.DateTimeZone; import org.joda.time.LocalDateTime; import org.joda.time.LocalTime; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.tests.model.basic.TJodaEntity; @@ -58,6 +59,6 @@ public class ScalarTypeJodaLocalTimeTest { String json = DB.json().toJson(bean); TJodaEntity bean1 = DB.json().toBean(TJodaEntity.class, json); - assertEquals(bean1.getLocalTime(), now); + Assertions.assertEquals(bean1.getLocalTime(), now); } } diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaPeriodTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaPeriodTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaPeriodTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJodaPeriodTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJsonListTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJsonListTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeJsonListTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJsonListTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTimeTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTimeTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTimeTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTimeTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanosTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanosTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanosTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanosTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeLongTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeLongTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeLongTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeLongTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeMonthDayTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeMonthDayTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeMonthDayTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeMonthDayTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeOffsetDateTimeTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeOffsetDateTimeTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeOffsetDateTimeTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeOffsetDateTimeTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeOffsetTimeTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeOffsetTimeTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeOffsetTimeTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeOffsetTimeTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypePathTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypePathTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypePathTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypePathTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypePeriodTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypePeriodTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypePeriodTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypePeriodTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypePostgresHstoreTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypePostgresHstoreTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypePostgresHstoreTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypePostgresHstoreTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeTimestampTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeTimestampTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeTimestampTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeTimestampTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeUUIDBaseTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeUUIDBaseTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeUUIDBaseTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeUUIDBaseTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeUtilDateTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeUtilDateTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeUtilDateTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeUtilDateTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperAdapterTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperAdapterTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperAdapterTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperAdapterTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperOidTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperOidTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperOidTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperOidTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearMonthDateTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearMonthDateTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearMonthDateTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearMonthDateTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeZoneIdTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeZoneIdTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeZoneIdTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeZoneIdTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeZoneOffsetTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeZoneOffsetTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeZoneOffsetTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeZoneOffsetTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeZonedDateTimeTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeZonedDateTimeTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/ScalarTypeZonedDateTimeTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeZonedDateTimeTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/TestEnumToBeanType.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/TestEnumToBeanType.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/TestEnumToBeanType.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/TestEnumToBeanType.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/TestLocaleParse.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/TestLocaleParse.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/TestLocaleParse.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/TestLocaleParse.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/TestScalarTypeUUIDBinaryConversion.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/TestScalarTypeUUIDBinaryConversion.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/TestScalarTypeUUIDBinaryConversion.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/TestScalarTypeUUIDBinaryConversion.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/TestSimpleEncryptor.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/TestSimpleEncryptor.java similarity index 72% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/TestSimpleEncryptor.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/TestSimpleEncryptor.java index 00c9be698..ae6fe6b64 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/type/TestSimpleEncryptor.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/TestSimpleEncryptor.java @@ -1,9 +1,8 @@ package io.ebeaninternal.server.type; -import io.ebean.xtest.BaseTestCase; import io.ebean.config.EncryptKey; +import io.ebeaninternal.server.deploy.BaseTest; import org.junit.jupiter.api.Test; -import org.tests.basic.encrypt.BasicEncryptKey; import java.nio.charset.StandardCharsets; import java.sql.Timestamp; @@ -11,7 +10,7 @@ import java.sql.Timestamp; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; -public class TestSimpleEncryptor extends BaseTestCase { +public class TestSimpleEncryptor extends BaseTest { @Test public void test() { @@ -35,4 +34,19 @@ public class TestSimpleEncryptor extends BaseTestCase { Timestamp t1 = Timestamp.valueOf(tsFormat); assertEquals(t, t1); } + + static class BasicEncryptKey implements EncryptKey { + + private final String key; + + public BasicEncryptKey(String key) { + this.key = key; + } + + @Override + public String getStringValue() { + return key; + } + + } } diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java similarity index 96% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java index 309a00604..b79851ef6 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java @@ -1,15 +1,15 @@ package io.ebeaninternal.server.type; -import io.ebean.xtest.BaseTestCase; import io.ebean.config.DatabaseConfig; import io.ebean.config.dbplatform.h2.H2Platform; import io.ebean.core.type.DataReader; import io.ebean.core.type.ScalarType; -import io.ebean.xtest.MyDayOfWeek; -import io.ebean.xtest.MyEnum; -import io.ebean.xtest.MySex; import io.ebeaninternal.server.core.bootup.BootupClasses; +import io.ebeaninternal.server.deploy.BaseTest; import org.junit.jupiter.api.Test; +import org.tests.model.basic.enums.MyDayOfWeek; +import org.tests.model.basic.enums.MyEnum; +import org.tests.model.basic.enums.MySex; import org.tests.model.ivo.Money; import org.tests.model.ivo.converter.MoneyTypeConverter; @@ -25,7 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -class TestTypeManager extends BaseTestCase { +class TestTypeManager extends BaseTest { @Test void testEnumWithSubclasses() throws SQLException { diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/TypeReflectHelperTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/TypeReflectHelperTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/TypeReflectHelperTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/TypeReflectHelperTest.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/UtilDateParserTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/UtilDateParserTest.java similarity index 100% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/UtilDateParserTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/type/UtilDateParserTest.java diff --git a/ebean-core/src/test/java/org/tests/model/basic/IntEnum.java b/ebean-core/src/test/java/org/tests/model/basic/IntEnum.java new file mode 100644 index 000000000..dcd112592 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/IntEnum.java @@ -0,0 +1,13 @@ +package org.tests.model.basic; + +import io.ebean.annotation.DbEnumType; +import io.ebean.annotation.DbEnumValue; + +public enum IntEnum { + ZERO, ONE, TWO; + + @DbEnumValue(storage = DbEnumType.INTEGER) + public int dbValue() { + return 100 + ordinal(); + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/TJodaEntity.java b/ebean-core/src/test/java/org/tests/model/basic/TJodaEntity.java new file mode 100644 index 000000000..311a20424 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/TJodaEntity.java @@ -0,0 +1,32 @@ +package org.tests.model.basic; + +import org.joda.time.LocalTime; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class TJodaEntity { + + @Id + Integer id; + + LocalTime localTime; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public LocalTime getLocalTime() { + return localTime; + } + + public void setLocalTime(LocalTime localTime) { + this.localTime = localTime; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/TOne.java b/ebean-core/src/test/java/org/tests/model/basic/TOne.java new file mode 100644 index 000000000..13ae7e7e2 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/TOne.java @@ -0,0 +1,55 @@ +package org.tests.model.basic; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * A basic entity to test simple things. + */ +@Entity +@Table(name = "t_oneb") +public class TOne { + + @Id + Integer id; + + String name; + + String description; + + boolean active; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/VarcharEnum.java b/ebean-core/src/test/java/org/tests/model/basic/VarcharEnum.java new file mode 100644 index 000000000..a1daa23ef --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/VarcharEnum.java @@ -0,0 +1,13 @@ +package org.tests.model.basic; + +import io.ebean.annotation.DbEnumType; +import io.ebean.annotation.DbEnumValue; + +public enum VarcharEnum { + ZERO, ONE, TWO; + + @DbEnumValue(storage = DbEnumType.VARCHAR, withConstraint = false) + public String dbValue() { + return "xXx" + name(); + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/enums/MyDayOfWeek.java b/ebean-core/src/test/java/org/tests/model/basic/enums/MyDayOfWeek.java new file mode 100644 index 000000000..64d157fd3 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/enums/MyDayOfWeek.java @@ -0,0 +1,17 @@ +package org.tests.model.basic.enums; + +import io.ebean.annotation.EnumValue; + +/** + * Enum test when DB CHAR column used with spaces. + */ +public enum MyDayOfWeek { + + @EnumValue("MONDAY ")MONDAY, + @EnumValue("TUESDAY ")TUESDAY, + @EnumValue("WEDNESDAY")WEDNESDAY, + @EnumValue("THURSDAY ")THURSDAY, + @EnumValue("FRIDAY ")FRIDAY, + @EnumValue("SATURDAY ")SATURDAY, + @EnumValue("SUNDAY ")SUNDAY +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/enums/MyEnum.java b/ebean-core/src/test/java/org/tests/model/basic/enums/MyEnum.java new file mode 100644 index 000000000..ba9a7ab6a --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/enums/MyEnum.java @@ -0,0 +1,28 @@ +package org.tests.model.basic.enums; + +import io.ebean.annotation.EnumValue; + +/** + * Enum with method overrides (and hence multiple actual classes). + */ +public enum MyEnum { + + @EnumValue("A")Aval { + @Override + public String doSomething() { + return "bar"; + } + }, + @EnumValue("B")Bval, + + @EnumValue("C")Cval { + @Override + public String doSomething() { + return "baz"; + } + }; + + public String doSomething() { + return "foo"; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/basic/enums/MySex.java b/ebean-core/src/test/java/org/tests/model/basic/enums/MySex.java new file mode 100644 index 000000000..6152e5bfb --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/basic/enums/MySex.java @@ -0,0 +1,5 @@ +package org.tests.model.basic.enums; + +public enum MySex { + MALE, FEMALE +} diff --git a/ebean-core/src/test/java/org/tests/model/ivo/Money.java b/ebean-core/src/test/java/org/tests/model/ivo/Money.java new file mode 100644 index 000000000..652d7ed6a --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/ivo/Money.java @@ -0,0 +1,143 @@ +package org.tests.model.ivo; + + +import java.io.Serializable; +import java.math.BigDecimal; +import java.math.MathContext; +import java.util.Iterator; + +/** + * A representation of Money effectively wrapping BigDecimal. + *

+ *

+ *

+ * + * @author rbygrave + */ +public final class Money implements Comparable, Serializable { + + private static final long serialVersionUID = 1L; + + public static final Money ZERO = new Money(BigDecimal.ZERO); + + private final BigDecimal amount; + + public Money(BigDecimal amount) { + if (amount == null) { + throw new NullPointerException("amount can not be null"); + } + this.amount = amount; + } + + public Money(double val) { + this(BigDecimal.valueOf(val)); + } + + public Money(String val) { + this(new BigDecimal(val)); + } + + @Override + public String toString() { + return amount.toString(); + } + + + @Override + public int hashCode() { + return amount.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof Money) { + // use BigDecimal.compareTo to handle scale differences + return amount.compareTo(((Money) obj).getAmount()) == 0; + } + return false; + } + + @Override + public int compareTo(Money o) { + return amount.compareTo(o.amount); + } + + public BigDecimal getAmount() { + return amount; + } + + public Money subtract(Money amt) { + BigDecimal b = amount.subtract(amt.amount); + return new Money(b); + } + + public Money subtract(Money amt, MathContext ctx) { + BigDecimal b = amount.subtract(amt.amount, ctx); + return new Money(b); + } + + public Money add(Money amt) { + BigDecimal b = amount.add(amt.amount); + return new Money(b); + } + + public Money add(Money amt, MathContext ctx) { + BigDecimal b = amount.add(amt.amount, ctx); + return new Money(b); + } + + public Money multiply(Money m) { + return multiply(m.amount); + } + + public Money multiply(int val) { + return multiply(BigDecimal.valueOf(val)); + } + + public Money multiply(float val) { + return multiply(BigDecimal.valueOf(val)); + } + + public Money multiply(double val) { + return multiply(BigDecimal.valueOf(val)); + } + + public Money multiply(BigDecimal m) { + BigDecimal b = amount.multiply(m); + return new Money(b); + } + + public Money divide(BigDecimal divisor) { + BigDecimal b = amount.divide(divisor); + return new Money(b); + } + + public Money divide(BigDecimal divisor, MathContext ctx) { + BigDecimal b = amount.divide(divisor, ctx); + return new Money(b); + } + + public static Money sum(Money... m) { + BigDecimal t = BigDecimal.ZERO; + for (Money money : m) { + t = t.add(money.amount); + } + return new Money(t); + } + + public static Money sum(Iterator it) { + BigDecimal t = BigDecimal.ZERO; + while (it.hasNext()) { + t = t.add(it.next().amount); + } + return new Money(t); + } + + public static Money sum(Iterator it, MathContext ctx) { + BigDecimal t = BigDecimal.ZERO; + while (it.hasNext()) { + t = t.add(it.next().amount, ctx); + } + return new Money(t); + } +} diff --git a/ebean-core/src/test/java/org/tests/model/ivo/Oid.java b/ebean-core/src/test/java/org/tests/model/ivo/Oid.java new file mode 100644 index 000000000..11c2c2691 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/ivo/Oid.java @@ -0,0 +1,46 @@ +package org.tests.model.ivo; + + +public class Oid { + + private final long value; + + public Oid(long value) { + this.value = value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public long getValue() { + return value; + } + + @Override + public int hashCode() { + return (int) (value ^ (value >>> 32)); + } + + @Override + public boolean equals(Object o) { + if (o instanceof Oid) { + return ((Oid) o).value == value; + } + return false; + } + + public static Oid valueOf(String s) { + return new Oid<>(Integer.valueOf(s)); + } + + public static Oid valueOf(long i) { + return new Oid<>(i); + } + + public static Oid valueOf(Class cls, String s) { + Integer v = Integer.valueOf(s); + return new Oid<>(v); + } +} diff --git a/ebean-core/src/test/java/org/tests/model/ivo/SysTime.java b/ebean-core/src/test/java/org/tests/model/ivo/SysTime.java new file mode 100644 index 000000000..c1cb3001c --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/ivo/SysTime.java @@ -0,0 +1,15 @@ +package org.tests.model.ivo; + +public class SysTime { + + private final long millis; + + public SysTime(long millis) { + this.millis = millis; + } + + public long getMillis() { + return millis; + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/ivo/converter/MoneyTypeConverter.java b/ebean-core/src/test/java/org/tests/model/ivo/converter/MoneyTypeConverter.java new file mode 100644 index 000000000..bd3979651 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/ivo/converter/MoneyTypeConverter.java @@ -0,0 +1,23 @@ +package org.tests.model.ivo.converter; + +import org.tests.model.ivo.Money; + +import javax.persistence.AttributeConverter; +import java.math.BigDecimal; + +/** + * Converts between Money and BigDecimal. + */ +public class MoneyTypeConverter implements AttributeConverter { + + @Override + public BigDecimal convertToDatabaseColumn(Money beanType) { + return beanType.getAmount(); + } + + @Override + public Money convertToEntityAttribute(BigDecimal scalarType) { + return new Money(scalarType); + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/ivo/converter/OidTypeConverter.java b/ebean-core/src/test/java/org/tests/model/ivo/converter/OidTypeConverter.java new file mode 100644 index 000000000..73e67e206 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/ivo/converter/OidTypeConverter.java @@ -0,0 +1,28 @@ +package org.tests.model.ivo.converter; + +import io.ebean.config.ScalarTypeConverter; +import org.tests.model.ivo.Oid; + +public class OidTypeConverter implements ScalarTypeConverter,Long> { + + public static final Oid NULL_VALUE = new Oid<>(0); + + @Override + public Oid getNullValue() { + return NULL_VALUE; + } + + @Override + public Oid wrapValue(Long scalarType) { + return new Oid<>(scalarType); + } + + @Override + public Long unwrapValue(Oid beanType) { + if (NULL_VALUE.equals(beanType)) { + return null; + } + return beanType.getValue(); + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/ivo/converter/SysTimeConverter.java b/ebean-core/src/test/java/org/tests/model/ivo/converter/SysTimeConverter.java new file mode 100644 index 000000000..259b4b958 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/ivo/converter/SysTimeConverter.java @@ -0,0 +1,27 @@ +package org.tests.model.ivo.converter; + +import io.ebean.config.ScalarTypeConverter; +import org.tests.model.ivo.SysTime; + +import java.sql.Timestamp; + +public class SysTimeConverter implements ScalarTypeConverter { + + + @Override + public SysTime getNullValue() { + return null; + } + + @Override + public Timestamp unwrapValue(SysTime beanType) { + return new Timestamp(beanType.getMillis()); + } + + @Override + public SysTime wrapValue(Timestamp scalarType) { + return new SysTime(scalarType.getTime()); + } + + +} diff --git a/ebean-core/src/test/resources/application-test.properties b/ebean-core/src/test/resources/application-test.properties index 3b0bce78a..6928f7f42 100644 --- a/ebean-core/src/test/resources/application-test.properties +++ b/ebean-core/src/test/resources/application-test.properties @@ -11,3 +11,5 @@ datasource.h2other.url=jdbc:h2:mem:testCoreOther;DB_CLOSE_ON_EXIT=FALSE;NON_KEYW ebean.h2.ddl.generate=true ebean.h2.ddl.run=true ebean.h2.ddl.initSql=h2-init.sql + +ebean.jodaLocalTimeMode=normal diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/type/TestBinaryUUID.java b/ebean-test/src/test/java/io/ebean/xtest/core/TestBinaryUUID.java similarity index 66% rename from ebean-test/src/test/java/io/ebeaninternal/server/type/TestBinaryUUID.java rename to ebean-test/src/test/java/io/ebean/xtest/core/TestBinaryUUID.java index abf0d9d49..a995bd925 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/type/TestBinaryUUID.java +++ b/ebean-test/src/test/java/io/ebean/xtest/core/TestBinaryUUID.java @@ -1,18 +1,17 @@ -package io.ebeaninternal.server.type; +package io.ebean.xtest.core; -import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.SqlRow; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.tests.model.basic.UUOne; import java.util.List; import java.util.UUID; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -public class TestBinaryUUID extends BaseTestCase { +public class TestBinaryUUID { @Test public void test() { @@ -31,11 +30,11 @@ public class TestBinaryUUID extends BaseTestCase { UUOne fetch0 = DB.find(UUOne.class, one0.getId()); UUOne fetch1 = DB.find(UUOne.class, one1.getId()); - assertEquals(one0.getId(), fetch0.getId()); - assertEquals(one0.getName(), fetch0.getName()); + Assertions.assertEquals(one0.getId(), fetch0.getId()); + Assertions.assertEquals(one0.getName(), fetch0.getName()); - assertEquals(one1.getId(), fetch1.getId()); - assertEquals(one1.getName(), fetch1.getName()); + Assertions.assertEquals(one1.getId(), fetch1.getId()); + Assertions.assertEquals(one1.getName(), fetch1.getName()); String sql = "select id, name from uuone"; List list = DB.sqlQuery(sql).findList(); @@ -50,8 +49,8 @@ public class TestBinaryUUID extends BaseTestCase { String asJson = DB.json().toJson(fetch0); UUOne bean = DB.json().toBean(UUOne.class, asJson); - assertEquals(fetch0.getId(), bean.getId()); - assertEquals(fetch0.getName(), bean.getName()); + Assertions.assertEquals(fetch0.getId(), bean.getId()); + Assertions.assertEquals(fetch0.getName(), bean.getName()); } } diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/core/HelpCreateQueryRequest.java b/ebean-test/src/test/java/io/ebeaninternal/server/core/HelpCreateQueryRequest.java deleted file mode 100644 index 50863f117..000000000 --- a/ebean-test/src/test/java/io/ebeaninternal/server/core/HelpCreateQueryRequest.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.ebeaninternal.server.core; - -import io.ebean.Database; -import io.ebean.Query; -import io.ebean.Transaction; -import io.ebeaninternal.api.SpiQuery; - -public class HelpCreateQueryRequest { - - public static OrmQueryRequest create(Database server, SpiQuery.Type type, Query query, Transaction t) { - DefaultServer defaultServer = (DefaultServer) server; - return (OrmQueryRequest)defaultServer.createQueryRequest(type, query, t); - } -} diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/core/OrmQueryRequestTestHelper.java b/ebean-test/src/test/java/io/ebeaninternal/server/core/OrmQueryRequestTestHelper.java deleted file mode 100644 index e0ab5e746..000000000 --- a/ebean-test/src/test/java/io/ebeaninternal/server/core/OrmQueryRequestTestHelper.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.ebeaninternal.server.core; - -import io.ebean.DB; -import io.ebean.Query; -import io.ebeaninternal.api.SpiQuery; - -public class OrmQueryRequestTestHelper { - - static DefaultServer defaultServer = (DefaultServer) DB.getDefault(); - - /** - * Create and return a OrmQueryRequest for the given query. - */ - public static OrmQueryRequest queryRequest(Query query) { - return (OrmQueryRequest) defaultServer.createQueryRequest(SpiQuery.Type.LIST, query, null); - } - -} diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/loadcontext/DLoadContextTest.java b/ebean-test/src/test/java/io/ebeaninternal/server/loadcontext/DLoadContextTest.java deleted file mode 100644 index 260b5bb76..000000000 --- a/ebean-test/src/test/java/io/ebeaninternal/server/loadcontext/DLoadContextTest.java +++ /dev/null @@ -1,104 +0,0 @@ -package io.ebeaninternal.server.loadcontext; - -import io.ebean.xtest.BaseTestCase; -import io.ebean.FetchConfig; -import io.ebean.Query; -import io.ebeaninternal.server.core.OrmQueryRequest; -import io.ebeaninternal.server.core.OrmQueryRequestTestHelper; -import io.ebeaninternal.server.deploy.BeanPropertyAssocMany; -import org.junit.jupiter.api.Test; -import org.tests.model.basic.Order; - -import static org.assertj.core.api.Assertions.assertThat; - -public class DLoadContextTest extends BaseTestCase { - - private OrmQueryRequest queryRequest(Query query) { - return OrmQueryRequestTestHelper.queryRequest(query); - } - - private Query query() { - return server().find(Order.class); - } - - @Test - public void construct_when_defaults_expect_defaultLazyBatchSizeServerDefaults() { - - OrmQueryRequest queryRequest = queryRequest(query()); - queryRequest.initTransIfRequired(); - queryRequest.endTransIfRequired(); - - DLoadContext graphContext = (DLoadContext) queryRequest.loadContext(); - DLoadBeanContext customer = graphContext.getBeanContext("customer"); - - assertThat(customer.batchSize).isEqualTo(10); - } - - @Test - public void construct_when_fetchQuery_expect_100_batchSize() { - - OrmQueryRequest queryRequest = queryRequest(query().fetch("customer", FetchConfig.ofQuery())); - queryRequest.initTransIfRequired(); - queryRequest.endTransIfRequired(); - - DLoadContext graphContext = (DLoadContext) queryRequest.loadContext(); - DLoadBeanContext customer = graphContext.getBeanContext("customer"); - - assertThat(customer.batchSize).isEqualTo(100); - } - - @Test - public void construct_when_fetchQuery_expect_100_batchSize_viaFetchQuery() { - - OrmQueryRequest queryRequest = queryRequest(query().fetchQuery("customer")); - queryRequest.initTransIfRequired(); - queryRequest.endTransIfRequired(); - - DLoadContext graphContext = (DLoadContext) queryRequest.loadContext(); - DLoadBeanContext customer = graphContext.getBeanContext("customer"); - - assertThat(customer.batchSize).isEqualTo(100); - } - - @Test - public void construct_when_fetchQuery50_expect_50_batchSize() { - - OrmQueryRequest queryRequest = queryRequest(query().fetch("customer", FetchConfig.ofQuery(50))); - queryRequest.initTransIfRequired(); - queryRequest.endTransIfRequired(); - - DLoadContext graphContext = (DLoadContext) queryRequest.loadContext(); - DLoadBeanContext customer = graphContext.getBeanContext("customer"); - - assertThat(customer.batchSize).isEqualTo(50); - } - - @Test - public void construct_when_fetchQueryFirst20Lazy5_expect_20_5_batchSize() { - - OrmQueryRequest queryRequest = queryRequest(query().fetchQuery("customer")); - queryRequest.initTransIfRequired(); - queryRequest.endTransIfRequired(); - - DLoadContext graphContext = (DLoadContext) queryRequest.loadContext(); - DLoadBeanContext customer = graphContext.getBeanContext("customer"); - - assertThat(customer.batchSize).isEqualTo(100); - } - - @Test - public void construct_when_fetch_expect_100_100_batchSize() { - - BeanPropertyAssocMany many = (BeanPropertyAssocMany)getBeanDescriptor(Order.class).beanProperty("details"); - // the fetch is converted to a query join due to the maxRows - OrmQueryRequest queryRequest = queryRequest(query().fetch("details").setMaxRows(50)); - queryRequest.initTransIfRequired(); - queryRequest.endTransIfRequired(); - - DLoadContext graphContext = (DLoadContext) queryRequest.loadContext(); - DLoadManyContext details = graphContext.getManyContext("details", many); - - assertThat(details.batchSize).isEqualTo(100); - } - -} From b85bb5f459e9ce8dcf650119716cf387b92e5c3f Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Sun, 27 Mar 2022 20:31:17 +1300 Subject: [PATCH 06/10] Refactor tests, move some unit tests to ebean-api --- .../ebean/config/UnderscoreNamingConventionTest.java | 0 .../config/dbplatform/DatabasePlatformTest.java | 0 .../config/dbplatform/DbPlatformTypeLookupTest.java | 0 .../config/dbplatform/DbPlatformTypeParserTest.java | 0 .../ebean/config/dbplatform/MySqlPlatformTest.java | 0 .../ebean/config/dbplatform/OraclePlatformTest.java | 0 .../config/dbplatform/PostgresPlatformTest.java | 0 .../test/java/io/ebean/util/CamelCaseHelperTest.java | 0 .../src/test/java/io/ebean/util/TestEncodeB64.java | 0 .../src/test/java/io/ebean/xtest/BaseTestCase.java | 12 ++++-------- 10 files changed, 4 insertions(+), 8 deletions(-) rename {ebean-core => ebean-api}/src/test/java/io/ebean/config/UnderscoreNamingConventionTest.java (100%) rename {ebean-core => ebean-api}/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java (100%) rename {ebean-core => ebean-api}/src/test/java/io/ebean/config/dbplatform/DbPlatformTypeLookupTest.java (100%) rename {ebean-core => ebean-api}/src/test/java/io/ebean/config/dbplatform/DbPlatformTypeParserTest.java (100%) rename {ebean-core => ebean-api}/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java (100%) rename {ebean-core => ebean-api}/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java (100%) rename {ebean-core => ebean-api}/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java (100%) rename {ebean-core => ebean-api}/src/test/java/io/ebean/util/CamelCaseHelperTest.java (100%) rename {ebean-core => ebean-api}/src/test/java/io/ebean/util/TestEncodeB64.java (100%) diff --git a/ebean-core/src/test/java/io/ebean/config/UnderscoreNamingConventionTest.java b/ebean-api/src/test/java/io/ebean/config/UnderscoreNamingConventionTest.java similarity index 100% rename from ebean-core/src/test/java/io/ebean/config/UnderscoreNamingConventionTest.java rename to ebean-api/src/test/java/io/ebean/config/UnderscoreNamingConventionTest.java diff --git a/ebean-core/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java b/ebean-api/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java similarity index 100% rename from ebean-core/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java rename to ebean-api/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java diff --git a/ebean-core/src/test/java/io/ebean/config/dbplatform/DbPlatformTypeLookupTest.java b/ebean-api/src/test/java/io/ebean/config/dbplatform/DbPlatformTypeLookupTest.java similarity index 100% rename from ebean-core/src/test/java/io/ebean/config/dbplatform/DbPlatformTypeLookupTest.java rename to ebean-api/src/test/java/io/ebean/config/dbplatform/DbPlatformTypeLookupTest.java diff --git a/ebean-core/src/test/java/io/ebean/config/dbplatform/DbPlatformTypeParserTest.java b/ebean-api/src/test/java/io/ebean/config/dbplatform/DbPlatformTypeParserTest.java similarity index 100% rename from ebean-core/src/test/java/io/ebean/config/dbplatform/DbPlatformTypeParserTest.java rename to ebean-api/src/test/java/io/ebean/config/dbplatform/DbPlatformTypeParserTest.java diff --git a/ebean-core/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java b/ebean-api/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java similarity index 100% rename from ebean-core/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java rename to ebean-api/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java diff --git a/ebean-core/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java b/ebean-api/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java similarity index 100% rename from ebean-core/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java rename to ebean-api/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java diff --git a/ebean-core/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java b/ebean-api/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java similarity index 100% rename from ebean-core/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java rename to ebean-api/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java diff --git a/ebean-core/src/test/java/io/ebean/util/CamelCaseHelperTest.java b/ebean-api/src/test/java/io/ebean/util/CamelCaseHelperTest.java similarity index 100% rename from ebean-core/src/test/java/io/ebean/util/CamelCaseHelperTest.java rename to ebean-api/src/test/java/io/ebean/util/CamelCaseHelperTest.java diff --git a/ebean-core/src/test/java/io/ebean/util/TestEncodeB64.java b/ebean-api/src/test/java/io/ebean/util/TestEncodeB64.java similarity index 100% rename from ebean-core/src/test/java/io/ebean/util/TestEncodeB64.java rename to ebean-api/src/test/java/io/ebean/util/TestEncodeB64.java diff --git a/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java b/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java index 059cdae68..880946f7f 100644 --- a/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java +++ b/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java @@ -1,6 +1,9 @@ package io.ebean.xtest; -import io.ebean.*; +import io.ebean.CacheMode; +import io.ebean.DB; +import io.ebean.Database; +import io.ebean.Query; import io.ebean.annotation.PersistBatch; import io.ebean.annotation.Platform; import io.ebean.cache.ServerCacheStatistics; @@ -10,10 +13,7 @@ import io.ebean.meta.ServerMetrics; import io.ebean.util.StringHelper; import io.ebean.xtest.base.PlatformCondition; import io.ebeaninternal.api.SpiEbeanServer; -import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.api.SpiTransaction; -import io.ebeaninternal.server.core.HelpCreateQueryRequest; -import io.ebeaninternal.server.core.OrmQueryRequest; import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.expression.platform.DbExpressionHandler; import io.ebeaninternal.server.expression.platform.DbExpressionHandlerFactory; @@ -325,8 +325,4 @@ public abstract class BaseTestCase { DbExpressionHandler dbExpressionHandler = DbExpressionHandlerFactory.from(spiEbeanServer().databasePlatform()); return dbExpressionHandler.concat(property0, separator, property1, suffix); } - - protected OrmQueryRequest createQueryRequest(SpiQuery.Type type, Query query, Transaction t) { - return HelpCreateQueryRequest.create(server(), type, query, t); - } } From dcd3bfee4c29fe10e3040660966431f6d978ebe0 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 28 Mar 2022 09:12:13 +1300 Subject: [PATCH 07/10] Fix test ConfigTest such that it doesn't set the RunOnceMarker When tests are run using for example -Dprops.file=testconfig/ebean-postgres.properties ... then we want ebean-test AutoConfigureForTesting to run and setup the default datasource appropriately. If ConfigTest runs before that then it sets the RunOnceMarker and the default datasource isn't adjusted --- .../io/ebean/test/config/platform/ConfigTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java b/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java index b9cbae900..2670b4097 100644 --- a/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java +++ b/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java @@ -1,7 +1,11 @@ package io.ebean.test.config.platform; +import io.ebean.annotation.Platform; import io.ebean.config.DatabaseConfig; import io.ebean.datasource.DataSourceConfig; +import io.ebeaninternal.api.DbOffline; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -12,6 +16,17 @@ import static org.assertj.core.api.Assertions.assertThat; public class ConfigTest { + @BeforeAll + public static void before() { + // so that RunOnceMarker is not set when running these tests + DbOffline.setPlatform(Platform.H2); + } + + @AfterAll + public static void after() { + DbOffline.reset(); + } + @Test public void trimExtensions() { From c8bb3c7b579aeb30537404b62f9a30cb0b32cc03 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 28 Mar 2022 09:23:55 +1300 Subject: [PATCH 08/10] Fix test ebean-redis ClusterTest such that it allows for background thread sync to redis --- ebean-redis/src/test/java/org/integration/ClusterTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ebean-redis/src/test/java/org/integration/ClusterTest.java b/ebean-redis/src/test/java/org/integration/ClusterTest.java index 64cca33b9..16b193dee 100644 --- a/ebean-redis/src/test/java/org/integration/ClusterTest.java +++ b/ebean-redis/src/test/java/org/integration/ClusterTest.java @@ -27,7 +27,7 @@ public class ClusterTest { } @Test - public void testBothNear() { + public void testBothNear() throws InterruptedException { // ensure the default server exists first final Database db = DB.getDefault(); Database other = createOther(db.pluginApi().dataSource()); @@ -44,6 +44,7 @@ public class ClusterTest { other.metaInfo().resetAllMetrics(); Person fooA = DB.find(Person.class, foo.getId()); + allowAsyncMessaging(); // allow time for background cache load Person fooB = other.find(Person.class, foo.getId()); DuelCache dualCacheA = (DuelCache) DB.cacheManager().beanCache(Person.class); From 5c3b680c8a5bcfeb79d39f5574e262865eae1f09 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 28 Mar 2022 13:05:59 +1300 Subject: [PATCH 09/10] #2612 - Incorrect DDL generation for MySql on history tables that use quoted identifiers --- .../platform/DbTriggerBasedHistoryDdl.java | 23 +++---------------- .../platform/MySqlHistoryDdl.java | 5 ---- .../dbmigration/mysql/1.0__initial.sql | 10 ++++---- .../migrationtest/dbmigration/mysql/1.1.sql | 10 ++++---- .../dbmigration/mysql/idx_mysql.migrations | 4 ++-- .../dbmigration/mysql55/1.0__initial.sql | 10 ++++---- .../migrationtest/dbmigration/mysql55/1.1.sql | 10 ++++---- .../dbmigration/mysql55/idx_mysql.migrations | 4 ++-- 8 files changed, 27 insertions(+), 49 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java index 4efda29bd..03c2c5d3c 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java @@ -19,10 +19,7 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im protected String sysPeriod; protected String sysPeriodStart; protected String sysPeriodEnd; - protected String viewSuffix; - - protected String sysPeriodType = "datetime(6)"; protected String now = "now(6)"; protected String sysPeriodEndValue = "now(6)"; @@ -35,14 +32,12 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im super.configure(config, platformDdl); this.sysPeriod = config.getAsOfSysPeriod(); this.viewSuffix = config.getAsOfViewSuffix(); - this.sysPeriodStart = sysPeriod + "_start"; this.sysPeriodEnd = sysPeriod + "_end"; } @Override public void dropHistoryTable(DdlWrite writer, DropHistoryTable dropHistoryTable) { - String baseTable = dropHistoryTable.getBaseTable(); // drop in appropriate order @@ -55,20 +50,17 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im @Override public void addHistoryTable(DdlWrite writer, AddHistoryTable addHistoryTable) { - String baseTable = addHistoryTable.getBaseTable(); MTable table = writer.getTable(baseTable); if (table == null) { throw new IllegalStateException("MTable " + baseTable + " not found in writer? (required for history DDL)"); } - createWithHistory(writer, table); } @Override public void createWithHistory(DdlWrite writer, MTable table) { - - String baseTable = table.getName(); + String baseTable = quote(table.getName()); addSysPeriodColumns(writer, baseTable, table.getWhenCreatedColumn()); createHistoryTable(writer.applyPostAlter(), table); @@ -82,7 +74,6 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im dropWithHistoryView(writer.dropAll(), baseTable); dropHistoryTable(writer.dropAll(), baseTable); // no need to dropSysPeriodColumns as whole table will be deleted soon - } @Override @@ -97,8 +88,7 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im dropWithHistoryView(writer.apply(), tableName); // here are the alter commands createWithHistoryView(writer.applyPostAlter(), tableName); - createTriggers(writer.applyPostAlter(), tableName, columnNamesForApply(table)); - + createTriggers(writer.applyPostAlter(), quote(tableName), columnNamesForApply(table)); alter.setHistoryHandled(); } } @@ -106,9 +96,6 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im /** * Will add a history trigger to the buffer. The config - * - * @param buffer - * @param table */ protected abstract void createTriggers(DdlBuffer buffer, String baseTable, List columnNames); @@ -135,7 +122,6 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im } protected void addSysPeriodColumns(DdlWrite writer, String baseTableName, String whenCreatedColumn) { - platformDdl.alterTableAddColumn(writer, baseTableName, sysPeriodStart, sysPeriodType, now); platformDdl.alterTableAddColumn(writer, baseTableName, sysPeriodEnd, sysPeriodType, null); if (whenCreatedColumn != null) { @@ -176,7 +162,6 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im * Write the column definition to the create table statement. */ protected void writeColumnDefinition(DdlBuffer buffer, String columnName, String type) { - String platformType = platformDdl.convert(type); buffer.append(" "); buffer.append(quote(columnName), 29); @@ -184,7 +169,6 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im } protected void createWithHistoryView(DdlBuffer apply, String baseTableName) { - apply .append("create view ").append(historyViewName(baseTableName)) .append(" as select * from ").append(quote(baseTableName)) @@ -211,7 +195,6 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im } protected void appendInsertIntoHistory(DdlBuffer buffer, String baseTable, List columns) { - buffer.append(" insert into ").append(historyTableName(baseTable)).append(" (").append(sysPeriodStart).append(",").append(sysPeriodEnd).append(","); appendColumnNames(buffer, columns, ""); buffer.append(") values (OLD.").append(sysPeriodStart).append(", ").append(sysPeriodEndValue).append(","); @@ -225,7 +208,7 @@ public abstract class DbTriggerBasedHistoryDdl extends DbTableBasedHistoryDdl im buffer.append(", "); } buffer.append(columnPrefix); - buffer.append(columns.get(i)); + buffer.append(quote(columns.get(i))); } } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlHistoryDdl.java index 7a9e06730..ced3ad877 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlHistoryDdl.java @@ -18,19 +18,15 @@ public class MySqlHistoryDdl extends DbTriggerBasedHistoryDdl { buffer.append("drop trigger ").append(deleteTriggerName(baseTable)).endOfStatement(); } - @Override protected void createTriggers(DdlBuffer buffer, String baseTable, List columnNames) { - buffer.append("lock tables ").append(baseTable).append(" write").endOfStatement(); addBeforeUpdate(buffer, updateTriggerName(baseTable), baseTable, columnNames); addBeforeDelete(buffer, deleteTriggerName(baseTable), baseTable, columnNames); buffer.appendStatement("unlock tables"); - } private void addBeforeUpdate(DdlBuffer apply, String triggerName, String tableName, List columnNames) { - apply .append("delimiter $$").newLine() .append("create trigger ").append(triggerName).append(" before update on ").append(tableName) @@ -42,7 +38,6 @@ public class MySqlHistoryDdl extends DbTriggerBasedHistoryDdl { } private void addBeforeDelete(DdlBuffer apply, String triggerName, String tableName, List columnNames) { - apply .append("delimiter $$").newLine() .append("create trigger ").append(triggerName).append(" before delete on ").append(tableName) diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql index bcd621077..dd9c89e5c 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql @@ -302,15 +302,15 @@ create table table_history( sys_period_end datetime(6) ); create view table_with_history as select * from `table` union all select * from table_history; -lock tables "table" write; +lock tables `table` write; delimiter $$ -create trigger table_history_upd before update on "table" for each row begin - insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); +create trigger table_history_upd before update on `table` for each row begin + insert into table_history (sys_period_start,sys_period_end,`index`, `from`, `to`, `varchar`, `foreign`) values (OLD.sys_period_start, now(6),OLD.`index`, OLD.`from`, OLD.`to`, OLD.`varchar`, OLD.`foreign`); set NEW.sys_period_start = now(6); end$$ delimiter $$ -create trigger table_history_del before delete on "table" for each row begin - insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); +create trigger table_history_del before delete on `table` for each row begin + insert into table_history (sys_period_start,sys_period_end,`index`, `from`, `to`, `varchar`, `foreign`) values (OLD.sys_period_start, now(6),OLD.`index`, OLD.`from`, OLD.`to`, OLD.`varchar`, OLD.`foreign`); end$$ unlock tables; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql index 0f24ccc5f..a8ed5be69 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql @@ -184,15 +184,15 @@ create trigger migtest_e_history6_history_del before delete on migtest_e_history end$$ unlock tables; create view table_with_history as select * from `table` union all select * from table_history; -lock tables "table" write; +lock tables `table` write; delimiter $$ -create trigger table_history_upd before update on "table" for each row begin - insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "select", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); +create trigger table_history_upd before update on `table` for each row begin + insert into table_history (sys_period_start,sys_period_end,`index`, `from`, `to`, `varchar`, `select`, `foreign`) values (OLD.sys_period_start, now(6),OLD.`index`, OLD.`from`, OLD.`to`, OLD.`varchar`, OLD.`select`, OLD.`foreign`); set NEW.sys_period_start = now(6); end$$ delimiter $$ -create trigger table_history_del before delete on "table" for each row begin - insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "select", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); +create trigger table_history_del before delete on `table` for each row begin + insert into table_history (sys_period_start,sys_period_end,`index`, `from`, `to`, `varchar`, `select`, `foreign`) values (OLD.sys_period_start, now(6),OLD.`index`, OLD.`from`, OLD.`to`, OLD.`varchar`, OLD.`select`, OLD.`foreign`); end$$ unlock tables; alter table `table` add constraint uq_table_select unique (`select`); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations index ada5d352c..56bcf8268 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations @@ -1,6 +1,6 @@ 1835064798, I__create_procs.sql --1894322966, 1.0__initial.sql -718635669, 1.1.sql +776107385, 1.0__initial.sql +-1360065766, 1.1.sql -1097227916, 1.2__dropsFor_1.1.sql -1972055805, 1.3.sql 379252952, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql index 57e31e712..47f10a181 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql @@ -302,15 +302,15 @@ create table table_history( sys_period_end datetime(6) ); create view table_with_history as select * from `table` union all select * from table_history; -lock tables "table" write; +lock tables `table` write; delimiter $$ -create trigger table_history_upd before update on "table" for each row begin - insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); +create trigger table_history_upd before update on `table` for each row begin + insert into table_history (sys_period_start,sys_period_end,`index`, `from`, `to`, `varchar`, `foreign`) values (OLD.sys_period_start, now(6),OLD.`index`, OLD.`from`, OLD.`to`, OLD.`varchar`, OLD.`foreign`); set NEW.sys_period_start = now(6); end$$ delimiter $$ -create trigger table_history_del before delete on "table" for each row begin - insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); +create trigger table_history_del before delete on `table` for each row begin + insert into table_history (sys_period_start,sys_period_end,`index`, `from`, `to`, `varchar`, `foreign`) values (OLD.sys_period_start, now(6),OLD.`index`, OLD.`from`, OLD.`to`, OLD.`varchar`, OLD.`foreign`); end$$ unlock tables; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql index 0f24ccc5f..a8ed5be69 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql @@ -184,15 +184,15 @@ create trigger migtest_e_history6_history_del before delete on migtest_e_history end$$ unlock tables; create view table_with_history as select * from `table` union all select * from table_history; -lock tables "table" write; +lock tables `table` write; delimiter $$ -create trigger table_history_upd before update on "table" for each row begin - insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "select", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); +create trigger table_history_upd before update on `table` for each row begin + insert into table_history (sys_period_start,sys_period_end,`index`, `from`, `to`, `varchar`, `select`, `foreign`) values (OLD.sys_period_start, now(6),OLD.`index`, OLD.`from`, OLD.`to`, OLD.`varchar`, OLD.`select`, OLD.`foreign`); set NEW.sys_period_start = now(6); end$$ delimiter $$ -create trigger table_history_del before delete on "table" for each row begin - insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "select", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); +create trigger table_history_del before delete on `table` for each row begin + insert into table_history (sys_period_start,sys_period_end,`index`, `from`, `to`, `varchar`, `select`, `foreign`) values (OLD.sys_period_start, now(6),OLD.`index`, OLD.`from`, OLD.`to`, OLD.`varchar`, OLD.`select`, OLD.`foreign`); end$$ unlock tables; alter table `table` add constraint uq_table_select unique (`select`); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations index 29b7558c7..6c6904b9a 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations @@ -1,6 +1,6 @@ 1835064798, I__create_procs.sql -955526296, 1.0__initial.sql -718635669, 1.1.sql +-1717521141, 1.0__initial.sql +-1360065766, 1.1.sql -1097227916, 1.2__dropsFor_1.1.sql -1972055805, 1.3.sql 379252952, 1.4__dropsFor_1.3.sql From f95212eeb343c77a6d06cdd275651a3ee3df58ec Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 28 Mar 2022 14:36:10 +1300 Subject: [PATCH 10/10] #2613 - Bump ebean-migration to 12.16.1 --- ebean-ddl-generator/pom.xml | 4 ++-- pom.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml index b73e29858..f0688082f 100644 --- a/ebean-ddl-generator/pom.xml +++ b/ebean-ddl-generator/pom.xml @@ -22,7 +22,7 @@ io.ebean ebean-migration - 12.13.0 + 12.16.1 @@ -43,7 +43,7 @@ org.glassfish.jaxb jaxb-runtime - 2.3.2 + 2.3.6 provided diff --git a/pom.xml b/pom.xml index 99355d55f..f2607779b 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ 2.1.210 1.3 1.2 - 12.16.0 + 12.16.1 4.5 7.5 12.16.0