package org.lightadmin.core.config.domain.filter;
import com.google.common.collect.Iterables;
import org.junit.Test;
import org.lightadmin.api.config.unit.FiltersConfigurationUnit;
import org.lightadmin.core.config.domain.unit.DomainConfigurationUnitType;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.lightadmin.api.config.utils.FilterMetadataUtils.filter;
public class DefaultFiltersConfigurationUnitBuilderTest {
@Test
public void defaultConfigurationUnitCreatedForDomainType() throws Exception {
final FiltersConfigurationUnit configurationUnit = defaultFiltersBuilder().build();
assertEquals(DomainConfigurationUnitType.FILTERS, configurationUnit.getDomainConfigurationUnitType());
assertEquals(DomainType.class, configurationUnit.getDomainType());
}
@Test
public void simpleFieldFilterDefined() throws Exception {
final FiltersConfigurationUnit configurationUnit = defaultFiltersBuilder()
.filter("Name field filter", "name")
.build();
assertFiltersDefined(configurationUnit, filter("Name field filter", "name"));
}
@Test
public void fewFieldFiltersDefined() throws Exception {
final FiltersConfigurationUnit configurationUnit = defaultFiltersBuilder()
.filter("Name field filter", "name")
.filter("Surname field filter", "surname")
.build();
assertFiltersDefined(configurationUnit,
filter("Name field filter", "name"),
filter("Surname field filter", "surname")
);
}
private DefaultFiltersConfigurationUnitBuilder defaultFiltersBuilder() {
return new DefaultFiltersConfigurationUnitBuilder(DomainType.class);
}
private void assertFiltersDefined(final FiltersConfigurationUnit configurationUnit, final FilterMetadata... filters) {
assertEquals(filters.length, Iterables.size(configurationUnit));
for (FilterMetadata filter : filters) {
assertFilterDefined(filter, configurationUnit);
}
}
private void assertFilterDefined(final FilterMetadata filter, final FiltersConfigurationUnit configurationUnit) {
for (FilterMetadata filterMetadata : configurationUnit) {
if (equalFilters(filter, filterMetadata)) {
return;
}
}
fail();
}
private boolean equalFilters(final FilterMetadata filter, final FilterMetadata filterMetadata) {
return filterMetadata.getName().equals(filter.getName()) && filterMetadata.getFieldName().equals(filter.getFieldName());
}
private static class DomainType {
}
}