// Path: src/test/java/org/fuin/ddd4j/test/AId.java
// public class AId implements ImplRootId {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public static final EntityType TYPE = new StringBasedEntityType("A");
// 
//     private final long id;
// 
//     public AId(final long id) {
//         this.id = id;
//     }
// 
//     @Override
//     public EntityType getType() {
//         return TYPE;
//     }
// 
//     @Override
//     public String asString() {
//         return "" + id;
//     }
// 
//     @Override
//     public String asTypedString() {
//         return getType() + " " + asString();
//     }
// 
//     @Override
//     public String toString() {
//         return "AId [id=" + id + "]";
//     }
// 
// }
// 
// Path: src/test/java/org/fuin/ddd4j/test/BId.java
// public class BId implements EntityId {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public static final EntityType TYPE = new StringBasedEntityType("B");
// 
//     private final long id;
// 
//     public BId(final long id) {
//         this.id = id;
//     }
// 
//     @Override
//     public EntityType getType() {
//         return TYPE;
//     }
// 
//     @Override
//     public String asString() {
//         return "" + id;
//     }
// 
//     @Override
//     public String asTypedString() {
//         return getType() + " " + asString();
//     }
// 
//     @Override
//     public String toString() {
//         return "BId [id=" + id + "]";
//     }
// 
// }
// 
// Path: src/test/java/org/fuin/ddd4j/test/CId.java
// public class CId implements EntityId {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public static final EntityType TYPE = new StringBasedEntityType("C");
// 
//     private final long id;
// 
//     public CId(final long id) {
//         this.id = id;
//     }
// 
//     @Override
//     public EntityType getType() {
//         return TYPE;
//     }
// 
//     @Override
//     public String asString() {
//         return "" + id;
//     }
// 
//     @Override
//     public String asTypedString() {
//         return getType() + " " + asString();
//     }
// 
//     @Override
//     public String toString() {
//         return "CId [id=" + id + "]";
//     }
// 
// }


import static org.assertj.core.api.Assertions.assertThat;
import java.lang.annotation.Annotation;
import jakarta.validation.Payload;
import org.fuin.ddd4j.test.AId;
import org.fuin.ddd4j.test.BId;
import org.fuin.ddd4j.test.CId;
import org.junit.Test;
        assertThat(testee.isValid(new EntityIdPath(bid), null)).isFalse();
        assertThat(testee.isValid(new EntityIdPath(aid, bid), null)).isFalse();

    }

    @Test
    public void testIsValidTwoLevel() {

        // PREPARE
        final AId aid = new AId(1L);
        final BId bid = new BId(2L);
        final CId cid = new CId(3L);
        final ExpectedEntityIdPath anno = createAnnotation(AId.class, BId.class);
        final ExpectedEntityIdPathValidator testee = new ExpectedEntityIdPathValidator();
        testee.initialize(anno);

        // TEST & VERIFY
        assertThat(testee.isValid(new EntityIdPath(aid, bid), null)).isTrue();
        assertThat(testee.isValid(new EntityIdPath(aid), null)).isFalse();
        assertThat(testee.isValid(new EntityIdPath(aid, cid), null)).isFalse();
        assertThat(testee.isValid(new EntityIdPath(aid, bid, cid), null)).isFalse();

    }

    @Test
    public void testIsValidThreeLevel() {

        // PREPARE
        final AId aid = new AId(1L);
        final BId bid = new BId(2L);
// Path: src/test/java/org/fuin/ddd4j/test/AId.java
// public class AId implements ImplRootId {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public static final EntityType TYPE = new StringBasedEntityType("A");
// 
//     private final long id;
// 
//     public AId(final long id) {
//         this.id = id;
//     }
// 
//     @Override
//     public EntityType getType() {
//         return TYPE;
//     }
// 
//     @Override
//     public String asString() {
//         return "" + id;
//     }
// 
//     @Override
//     public String asTypedString() {
//         return getType() + " " + asString();
//     }
// 
//     @Override
//     public String toString() {
//         return "AId [id=" + id + "]";
//     }
// 
// }
// 
// Path: src/test/java/org/fuin/ddd4j/test/BId.java
// public class BId implements EntityId {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public static final EntityType TYPE = new StringBasedEntityType("B");
// 
//     private final long id;
// 
//     public BId(final long id) {
//         this.id = id;
//     }
// 
//     @Override
//     public EntityType getType() {
//         return TYPE;
//     }
// 
//     @Override
//     public String asString() {
//         return "" + id;
//     }
// 
//     @Override
//     public String asTypedString() {
//         return getType() + " " + asString();
//     }
// 
//     @Override
//     public String toString() {
//         return "BId [id=" + id + "]";
//     }
// 
// }
// 
// Path: src/test/java/org/fuin/ddd4j/test/CId.java
// public class CId implements EntityId {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public static final EntityType TYPE = new StringBasedEntityType("C");
// 
//     private final long id;
// 
//     public CId(final long id) {
//         this.id = id;
//     }
// 
//     @Override
//     public EntityType getType() {
//         return TYPE;
//     }
// 
//     @Override
//     public String asString() {
//         return "" + id;
//     }
// 
//     @Override
//     public String asTypedString() {
//         return getType() + " " + asString();
//     }
// 
//     @Override
//     public String toString() {
//         return "CId [id=" + id + "]";
//     }
// 
// }


// Path: src/test/java/org/fuin/ddd4j/ddd/ExpectedEntityIdPathValidatorTest.java
import static org.assertj.core.api.Assertions.assertThat;
import java.lang.annotation.Annotation;
import jakarta.validation.Payload;
import org.fuin.ddd4j.test.AId;
import org.fuin.ddd4j.test.BId;
import org.fuin.ddd4j.test.CId;
import org.junit.Test;

        assertThat(testee.isValid(new EntityIdPath(bid), null)).isFalse();
        assertThat(testee.isValid(new EntityIdPath(aid, bid), null)).isFalse();

    }

    @Test
    public void testIsValidTwoLevel() {

        // PREPARE
        final AId aid = new AId(1L);
        final BId bid = new BId(2L);
        final CId cid = new CId(3L);
        final ExpectedEntityIdPath anno = createAnnotation(AId.class, BId.class);
        final ExpectedEntityIdPathValidator testee = new ExpectedEntityIdPathValidator();
        testee.initialize(anno);

        // TEST & VERIFY
        assertThat(testee.isValid(new EntityIdPath(aid, bid), null)).isTrue();
        assertThat(testee.isValid(new EntityIdPath(aid), null)).isFalse();
        assertThat(testee.isValid(new EntityIdPath(aid, cid), null)).isFalse();
        assertThat(testee.isValid(new EntityIdPath(aid, bid, cid), null)).isFalse();

    }

    @Test
    public void testIsValidThreeLevel() {

        // PREPARE
        final AId aid = new AId(1L);
        final BId bid = new BId(2L);
        final CId cid = new CId(3L);