package org.lightadmin.core.config.domain.unit; import org.junit.Test; import org.lightadmin.api.config.annotation.Administration; import org.lightadmin.api.config.unit.EntityMetadataConfigurationUnit; import java.util.Set; import static com.google.common.collect.Sets.newLinkedHashSet; import static org.junit.Assert.*; import static org.lightadmin.core.config.domain.unit.DomainConfigurationUnitType.*; import static org.lightadmin.core.test.util.ConfigurationUnitsUtils.*; public class ConfigurationUnitsTest { @Test(expected = IllegalArgumentException.class) public void nullConfigurationClassNotAllowed() throws Exception { configurationUnits(null); } @Test public void correctDomainTypeReturned() throws Exception { assertEquals(configurationUnits(DomainTypeConfiguration.class).getDomainType(), DomainType.class); } @Test public void existingUnitFound() throws Exception { final ConfigurationUnits testee = configurationUnits(DomainTypeConfiguration.class, configurationUnitFor(CONFIGURATION, EntityMetadataConfigurationUnit.class)); assertNotNull(testee.getEntityConfiguration()); } @Test public void nullReturnedForMissingConfigurationUnit() throws Exception { final ConfigurationUnits testee = configurationUnits(DomainTypeConfiguration.class, configurationUnitFor(FILTERS)); assertNull(testee.getScreenContext()); } @Test public void unitsOrderTheSameAsInitial() throws Exception { final ConfigurationUnits testee = configurationUnits(DomainTypeConfiguration.class, configurationUnitsFor(FILTERS, CONFIGURATION, SCOPES)); assertUnitsOrderEqual(testee, new DomainConfigurationUnitType[]{FILTERS, CONFIGURATION, SCOPES}); } private void assertUnitsOrderEqual(final ConfigurationUnits testee, final DomainConfigurationUnitType[] expectedOrderedUnitTypes) { Set<DomainConfigurationUnitType> actualUnitTypes = newLinkedHashSet(); for (ConfigurationUnit configurationUnit : testee) { actualUnitTypes.add(configurationUnit.getDomainConfigurationUnitType()); } assertArrayEquals(actualUnitTypes.toArray(), expectedOrderedUnitTypes); } private static class DomainType { } @Administration(DomainType.class) private static class DomainTypeConfiguration { } }