package org.molgenis.data.support;
import com.google.common.collect.Lists;
import org.molgenis.data.meta.AttributeType;
import org.molgenis.data.meta.model.Attribute;
import org.molgenis.data.meta.model.Package;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.util.Iterator;
import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
import static java.util.Arrays.asList;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.molgenis.data.meta.AttributeType.*;
import static org.molgenis.data.meta.DefaultPackage.PACKAGE_DEFAULT;
import static org.testng.Assert.assertEquals;
public class EntityTypeUtilsTest
{
@DataProvider(name = "isReferenceTypeAttrProvider")
public static Iterator<Object[]> isReferenceTypeAttrProvider()
{
List<Object[]> dataList = Lists.newArrayList();
for (AttributeType attrType : AttributeType.values())
{
Attribute attr = mock(Attribute.class);
when(attr.getDataType()).thenReturn(attrType);
when(attr.toString()).thenReturn("attr_" + attrType.toString());
boolean isRefAttr =
attrType == CATEGORICAL || attrType == CATEGORICAL_MREF || attrType == FILE || attrType == MREF
|| attrType == ONE_TO_MANY || attrType == XREF;
dataList.add(new Object[] { attr, isRefAttr });
}
return dataList.iterator();
}
@Test(dataProvider = "isReferenceTypeAttrProvider")
public void isReferenceTypeAttr(Attribute attr, boolean isRefAttr)
{
assertEquals(EntityTypeUtils.isReferenceType(attr), isRefAttr);
}
@DataProvider(name = "isReferenceTypeAttrTypeProvider")
public static Iterator<Object[]> isReferenceTypeAttrTypeProvider()
{
List<Object[]> dataList = Lists.newArrayList();
for (AttributeType attrType : AttributeType.values())
{
boolean isRefAttr =
attrType == CATEGORICAL || attrType == CATEGORICAL_MREF || attrType == FILE || attrType == MREF
|| attrType == ONE_TO_MANY || attrType == XREF;
dataList.add(new Object[] { attrType, isRefAttr });
}
return dataList.iterator();
}
@Test(dataProvider = "isReferenceTypeAttrTypeProvider")
public void isReferenceTypeAttrType(AttributeType attrType, boolean isRefAttrType)
{
assertEquals(EntityTypeUtils.isReferenceType(attrType), isRefAttrType);
}
@DataProvider(name = "isMultipleReferenceTypeProvider")
public static Iterator<Object[]> isMultipleReferenceTypeProvider()
{
List<Object[]> dataList = Lists.newArrayList();
for (AttributeType attrType : AttributeType.values())
{
Attribute attr = mock(Attribute.class);
when(attr.getDataType()).thenReturn(attrType);
when(attr.toString()).thenReturn("attr_" + attrType.toString());
boolean isMultipleRefAttr = attrType == CATEGORICAL_MREF || attrType == MREF || attrType == ONE_TO_MANY;
dataList.add(new Object[] { attr, isMultipleRefAttr });
}
return dataList.iterator();
}
@Test(dataProvider = "isMultipleReferenceTypeProvider")
public void isMultipleReferenceType(Attribute attr, boolean isMultipleRefAttr)
{
assertEquals(EntityTypeUtils.isMultipleReferenceType(attr), isMultipleRefAttr);
}
@Test
public void getAttributeNames()
{
Attribute attr0 = when(mock(Attribute.class).getName()).thenReturn("attr0").getMock();
Attribute attr1 = when(mock(Attribute.class).getName()).thenReturn("attr1").getMock();
assertEquals(newArrayList(EntityTypeUtils.getAttributeNames(asList(attr0, attr1))), asList("attr0", "attr1"));
}
@Test
public void buildFullNamePackage()
{
Package package_ = when(mock(Package.class).getName()).thenReturn("my_first_package").getMock();
assertEquals(EntityTypeUtils.buildFullName(package_, "simpleName"), "my_first_package_simpleName");
}
@Test
public void buildFullNamePackageDefault()
{
Package defaultPackage = when(mock(Package.class).getName()).thenReturn(PACKAGE_DEFAULT).getMock();
assertEquals(EntityTypeUtils.buildFullName(defaultPackage, "simpleName"), PACKAGE_DEFAULT + "_simpleName");
}
@Test
public void buildFullNameNoPackage()
{
assertEquals(EntityTypeUtils.buildFullName(null, "simpleName"), "simpleName");
}
}