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 ForeignKeyInitializerRecursive1To1RelationTest { @Test public void test() { var mb = ModelBuilder.from(Ctx.class); assertEquals(1, mb.getEntities().size()); assertEquals(TestClass.class.getSimpleName(), mb.getEntity(TestClass.class).getName()); assertTrue(mb.getEntity(TestClass.class).getFields().stream().allMatch(e -> e.getEntity() == mb.getEntity(TestClass.class))); assertTrue(mb.getEntity(TestClass.class).getForeignKeys().stream().allMatch(e -> e.getEntity() == mb.getEntity(TestClass.class))); //fields ------------------------ //TestClass assertEquals(9, mb.getEntity(TestClass.class).getFields().size()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("i") && e.isModelField() && e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("d") && e.isModelField() && e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("f") && e.isModelField() && e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("l") && e.isModelField() && e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("o") && e.isModelField() && e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("previous") && e.isModelField() && !e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("previousI") && !e.isModelField() && e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("next") && e.isModelField() && !e.isDatabaseField()).count()); assertEquals(1, mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("nextI") && !e.isModelField() && e.isDatabaseField()).count()); // /fields ------------------------ //keys ------------------------ assertEquals(2, mb.getEntity(TestClass.class).getForeignKeys().size()); assertEquals(mb.getEntity(TestClass.class), mb.getEntity(TestClass.class).getForeignKeys().get(0).getEntity()); assertEquals(mb.getEntity(TestClass.class), mb.getEntity(TestClass.class).getForeignKeys().get(1).getEntity()); assertEquals(mb.getEntity(TestClass.class), mb.getEntity(TestClass.class).getForeignKeys().get(0).getReferencedEntity()); assertEquals(mb.getEntity(TestClass.class), mb.getEntity(TestClass.class).getForeignKeys().get(1).getReferencedEntity()); assertEquals(mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("nextI")).toList(), mb.getEntity(TestClass.class).getForeignKeys().get(0).getFields()); assertEquals(mb.getEntity(TestClass.class).getFields().stream().filter(e -> e.getName().equals("previousI")).toList(), mb.getEntity(TestClass.class).getForeignKeys().get(1).getFields()); assertEquals(mb.getEntity(TestClass.class).getPrimaryKey().getFields(), mb.getEntity(TestClass.class).getForeignKeys().get(0).getReferencedFields()); assertEquals(mb.getEntity(TestClass.class).getPrimaryKey().getFields(), mb.getEntity(TestClass.class).getForeignKeys().get(1).getReferencedFields()); // /keys ------------------------ } public static class Ctx extends DbContext { @Clazz(clazz = TestClass.class) private DbSet objects2; } @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; private TestClass previous; private TestClass next; } }