package jef.model; import jef.DbSet; import jef.model.annotations.Clazz; import jef.model.annotations.Id; import jef.serializable.SerializableObject; import lombok.Getter; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; class ForeignKeyInitializerNestedObject2LayerTest { @Test public void test() { var mb = ModelBuilder.from(Ctx.class); assertEquals(3, mb.getEntities().size()); assertEquals("objects1", mb.getEntity(TestClass3.class).getName()); assertEquals("nested2", mb.getEntity(TestClass2.class).getName()); assertEquals("nested", mb.getEntity(TestClass.class).getName()); assertTrue(mb.getEntity(TestClass3.class).getFields().stream().allMatch(e -> e.getEntity() == mb.getEntity(TestClass3.class))); assertTrue(mb.getEntity(TestClass2.class).getFields().stream().allMatch(e -> e.getEntity() == mb.getEntity(TestClass2.class))); assertTrue(mb.getEntity(TestClass.class).getFields().stream().allMatch(e -> e.getEntity() == mb.getEntity(TestClass.class))); assertTrue(mb.getEntity(TestClass3.class).getForeignKeys().stream().allMatch(e -> e.getEntity() == mb.getEntity(TestClass3.class))); assertTrue(mb.getEntity(TestClass2.class).getForeignKeys().stream().allMatch(e -> e.getEntity() == mb.getEntity(TestClass2.class))); assertTrue(mb.getEntity(TestClass.class).getForeignKeys().stream().allMatch(e -> e.getEntity() == mb.getEntity(TestClass.class))); //fields ------------------------ //TestClass3 assertEquals(3, mb.getEntity(TestClass3.class).getFields().size()); assertEquals(1, mb.getEntity(TestClass3.class).getFields().stream().filter(e -> e.getName().equals("id") && e.isModelField() && e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass3.class).getFields().stream().filter(e -> e.getName().equals("nested2") && e.isModelField() && !e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass3.class).getFields().stream().filter(e -> e.getName().equals("nested2I") && !e.isModelField() && e.isDatabaseField()).count()); //TestClass2 assertEquals(3, mb.getEntity(TestClass2.class).getFields().size()); assertEquals(1, mb.getEntity(TestClass2.class).getFields().stream().filter(e -> e.getName().equals("i") && e.isModelField() && e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass2.class).getFields().stream().filter(e -> e.getName().equals("nested") && e.isModelField() && !e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass2.class).getFields().stream().filter(e -> e.getName().equals("nestedI") && !e.isModelField() && e.isDatabaseField()).count()); //TestClass assertEquals(5, mb.getEntity(TestClass.class).getFields().size()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("i")).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("d")).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("f")).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("l")).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("o")).count()); // /fields ------------------------ //keys ------------------------ assertEquals(1, mb.getEntity(TestClass3.class).getForeignKeys().size()); assertEquals(1, mb.getEntity(TestClass2.class).getForeignKeys().size()); assertEquals(0, mb.getEntity(TestClass.class).getForeignKeys().size()); //refs TestClass3, TestClass2 assertEquals(mb.getEntity(TestClass3.class), mb.getEntity(TestClass3.class).getForeignKeys().get(0).getEntity()); assertEquals(mb.getEntity(TestClass2.class), mb.getEntity(TestClass3.class).getForeignKeys().get(0).getReferencedEntity()); assertEquals(mb.getEntity(TestClass3.class).getFields().stream().filter(e -> e.getName().equals("nested2I")).toList(), mb.getEntity(TestClass3.class).getForeignKeys().get(0).getFields()); assertEquals(mb.getEntity(TestClass2.class).getPrimaryKey().getFields(), mb.getEntity(TestClass3.class).getForeignKeys().get(0).getReferencedFields()); //refs TestClass2, TestClass assertEquals(mb.getEntity(TestClass2.class), mb.getEntity(TestClass2.class).getForeignKeys().get(0).getEntity()); assertEquals(mb.getEntity(TestClass.class), mb.getEntity(TestClass2.class).getForeignKeys().get(0).getReferencedEntity()); assertEquals(mb.getEntity(TestClass2.class).getFields().stream().filter(e -> e.getName().equals("nestedI")).toList(), mb.getEntity(TestClass2.class).getForeignKeys().get(0).getFields()); assertEquals(mb.getEntity(TestClass.class).getPrimaryKey().getFields(), mb.getEntity(TestClass2.class).getForeignKeys().get(0).getReferencedFields()); // /keys ------------------------ } public static class Ctx extends DbContext { @Clazz(TestClass3.class) private DbSet objects1; } @Getter public static class TestClass3 extends SerializableObject { public int id = 1; public TestClass2 nested2; } @Getter public static class TestClass2 extends SerializableObject { @Id public int i = 1; public TestClass nested; } @Getter public static class TestClass extends SerializableObject { @Id public int i = 1; public Object o = new Object(); public double d; public float f; public long l; } }