package com.ctp.cdi.query.meta.unit;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.util.LinkedList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
public class DescriptorHierarchyBuilderTest {
private final List<EntityDescriptor> entities = new LinkedList<EntityDescriptor>();
private final List<MappedSuperclassDescriptor> superClasses = new LinkedList<MappedSuperclassDescriptor>();
@Before
public void before() {
entities.add(new EntityDescriptor("test", null, EntityLevel3.class.getName(), null, null));
entities.add(new EntityDescriptor("test", null, EntityLevel5.class.getName(), null, null));
superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel1.class.getName(), null, "id"));
superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel4.class.getName(), null, null));
superClasses.add(new MappedSuperclassDescriptor("test", null, MappedUnrelated.class.getName(), null, null));
superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel2.class.getName(), null, null));
}
@Test
public void should_build_hierarchy() {
// given
DescriptorHierarchyBuilder builder = DescriptorHierarchyBuilder.newInstance(entities, superClasses);
// when
builder.buildHierarchy();
// then
assertEquals(entities.size(), 2);
assertEquals(EntityLevel3.class, entities.get(0).getEntityClass());
assertEquals(EntityLevel5.class, entities.get(1).getEntityClass());
assertEquals(MappedLevel2.class, entities.get(0).getParent().getEntityClass());
assertEquals(MappedLevel4.class, entities.get(1).getParent().getEntityClass());
assertEquals(superClasses.size(), 4);
assertNull(superClasses.get(0).getParent());
assertEquals(EntityLevel3.class, superClasses.get(1).getParent().getEntityClass());
assertNull(superClasses.get(2).getParent());
assertEquals(MappedLevel1.class, superClasses.get(3).getParent().getEntityClass());
}
private static class MappedLevel1 {
@SuppressWarnings("unused")
private Long id;
}
private static class MappedLevel2 extends MappedLevel1 {}
private static class EntityLevel3 extends MappedLevel2 {}
private static class MappedLevel4 extends EntityLevel3 {}
private static class EntityLevel5 extends MappedLevel4 {}
private static class MappedUnrelated {}
}