package org.tests.inheritance; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.Query; import org.tests.model.basic.Car; import org.tests.model.basic.CarAccessory; import org.tests.model.basic.CarFuse; import org.tests.model.basic.Truck; import org.tests.model.basic.Vehicle; import org.tests.model.basic.VehicleDriver; import org.junit.Test; import java.util.List; import static org.assertj.core.api.StrictAssertions.assertThat; import static org.junit.Assert.*; public class TestInheritInsert extends BaseTestCase { @Test public void testCasting() { Truck t = new Truck(); t.setCapacity(10d); Ebean.save(t); Vehicle v = Ebean.find(Vehicle.class, t.getId()); if (v instanceof Truck) { Truck t0 = (Truck) v; assertEquals(Double.valueOf(10d), t0.getCapacity()); assertEquals(Double.valueOf(10d), ((Truck) v).getCapacity()); assertNotNull(t0.getId()); } else { assertTrue("v not a Truck?", false); } VehicleDriver driver = new VehicleDriver(); driver.setName("Jim"); driver.setVehicle(v); Ebean.save(driver); VehicleDriver d1 = Ebean.find(VehicleDriver.class, driver.getId()); v = d1.getVehicle(); if (v instanceof Truck) { Double capacity = ((Truck) v).getCapacity(); assertEquals(Double.valueOf(10d), capacity); assertNotNull(v.getId()); } else { assertTrue("v not a Truck?", false); } List<VehicleDriver> list = Ebean.find(VehicleDriver.class).findList(); for (VehicleDriver vehicleDriver : list) { if (vehicleDriver.getVehicle() instanceof Truck) { Double capacity = ((Truck) vehicleDriver.getVehicle()).getCapacity(); assertEquals(Double.valueOf(10d), capacity); } } } @Test public void testQuery() { Car car = new Car(); car.setLicenseNumber("MARIOS_CAR_LICENSE"); Ebean.save(car); VehicleDriver driver = new VehicleDriver(); driver.setName("Mario"); driver.setVehicle(car); Ebean.save(driver); Query<VehicleDriver> query = Ebean.find(VehicleDriver.class); query.where().eq("vehicle.licenseNumber", "MARIOS_CAR_LICENSE"); List<VehicleDriver> drivers = query.findList(); assertNotNull(drivers); assertEquals(1, drivers.size()); assertNotNull(drivers.get(0)); assertEquals("Mario", drivers.get(0).getName()); assertEquals("MARIOS_CAR_LICENSE", drivers.get(0).getVehicle().getLicenseNumber()); Vehicle car2 = Ebean.find(Vehicle.class, car.getId()); car2.setLicenseNumber("test"); Ebean.save(car); } @Test public void test_AtOrderBy_on_ChildOfChild() { Car car = new Car(); car.setLicenseNumber("ABC"); Ebean.save(car); CarFuse fuse = new CarFuse(); fuse.setLocationCode("xdfg"); Ebean.save(fuse); CarAccessory accessory = new CarAccessory(car, fuse); Ebean.save(accessory); Query<Car> query = Ebean.find(Car.class) .fetch("accessories") .where() .eq("id", car.getId()) .query(); Car result = query.findUnique(); assertThat(query.getGeneratedSql()).contains("order by t0.id, t2.location_code"); assertThat(query.getGeneratedSql()).contains("left join car_fuse t2 on t2.id = t1.fuse_id"); assertNotNull(result); } }