package org.molgenis.data.meta; import org.molgenis.data.meta.model.Attribute; import org.molgenis.data.meta.model.AttributeFactory; import org.molgenis.data.meta.model.AttributeMetadata; import org.molgenis.data.meta.model.EntityTypeMetadata; import org.molgenis.data.populate.IdGenerator; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.Set; import static com.google.common.collect.Sets.newHashSet; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.molgenis.data.meta.model.EntityType.AttributeRole.*; import static org.testng.Assert.assertEquals; public class SystemEntityTypeTest { AttributeFactory attributeFactory; EntityTypeMetadata entityTypeMetaData; @BeforeMethod public void beforeMethod() { attributeFactory = mock(AttributeFactory.class); entityTypeMetaData = mock(EntityTypeMetadata.class); when(attributeFactory.getAttributeMetadata()).thenReturn(mock(AttributeMetadata.class)); } @Test public void testAssignRolesToAttributeParts() { TestCompoundEMD testEMD = new TestCompoundEMD("Test"); testEMD.setAttributeFactory(attributeFactory); testEMD.bootstrap(entityTypeMetaData); assertEquals(testEMD.getIdAttribute().getName(), "idAttr"); assertEquals(testEMD.getLabelAttribute().getName(), "labelAttr"); Set<String> lookupAttributes = newHashSet(); testEMD.getLookupAttributes().forEach(e -> lookupAttributes.add(e.getName())); assertEquals(lookupAttributes, newHashSet("lookupAttr1", "lookupAttr2")); } @Test public void testAssignRolesToAttributePartsNested() { TestNestedCompoundEMD testEMD = new TestNestedCompoundEMD("Test"); testEMD.setAttributeFactory(attributeFactory); testEMD.bootstrap(entityTypeMetaData); assertEquals(testEMD.getIdAttribute().getName(), "idAttr"); assertEquals(testEMD.getLabelAttribute().getName(), "labelAttr"); Set<String> lookupAttributes = newHashSet(); testEMD.getLookupAttributes().forEach(e -> lookupAttributes.add(e.getName())); assertEquals(lookupAttributes, newHashSet("lookupAttr1", "lookupAttr2")); } private class TestNestedCompoundEMD extends SystemEntityType { TestNestedCompoundEMD(String entityName) { super(entityName); setIdGenerator(mock(IdGenerator.class)); } @Override protected void init() { Attribute compoundAttr1 = when(mock(Attribute.class).getName()).thenReturn("compound2").getMock(); when(compoundAttr1.getLookupAttributeIndex()).thenReturn(null); addAttribute(compoundAttr1); addAttribute("compoundAttr2").setParent(compoundAttr1); addAttribute("idAttr", ROLE_ID).setParent(compoundAttr1); addAttribute("labelAttr", ROLE_LABEL).setParent(compoundAttr1); addAttribute("lookupAttr1", ROLE_LOOKUP).setParent(compoundAttr1); addAttribute("lookupAttr2", ROLE_LOOKUP).setParent(compoundAttr1); } } private class TestCompoundEMD extends SystemEntityType { TestCompoundEMD(String entityName) { super(entityName); setIdGenerator(mock(IdGenerator.class)); } @Override protected void init() { Attribute compoundAttr = when(mock(Attribute.class).getName()).thenReturn("compound").getMock(); when(compoundAttr.getLookupAttributeIndex()).thenReturn(null); addAttribute(compoundAttr); addAttribute("idAttr", ROLE_ID).setParent(compoundAttr); addAttribute("labelAttr", ROLE_LABEL).setParent(compoundAttr); addAttribute("lookupAttr1", ROLE_LOOKUP).setParent(compoundAttr); addAttribute("lookupAttr2", ROLE_LOOKUP).setParent(compoundAttr); } } }