package org.fluxtream.core.domain; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import junit.framework.Assert; import org.junit.Test; /** * <p> * <code>TagFilterTest</code> tests the {@link TagFilter} class. * </p> * * @author Chris Bartley (bartley@cmu.edu) */ public final class TagFilterTest { @Test public void testCreateMethod() { final List<String> emptyList = new ArrayList<String>(); final List<String> oneTag = Arrays.asList("foo"); final List<String> multipleTags = Arrays.asList("foo", "bar"); final List<String> tagsWithOneEmptyItem = Arrays.asList("foo", ""); final List<String> tagsWithDuplicateItems = Arrays.asList("foo", "Foo", "bar", " bar "); final List<String> tagsWithAllEmptyItems = Arrays.asList("\t", " ", ""); Assert.assertNull(TagFilter.create(null, null)); Assert.assertNull(TagFilter.create(null, TagFilter.FilteringStrategy.ALL)); Assert.assertNull(TagFilter.create(null, TagFilter.FilteringStrategy.ANY)); Assert.assertNull(TagFilter.create(null, TagFilter.FilteringStrategy.NONE)); Assert.assertNull(TagFilter.create(emptyList, null)); Assert.assertNull(TagFilter.create(emptyList, TagFilter.FilteringStrategy.ALL)); Assert.assertNull(TagFilter.create(emptyList, TagFilter.FilteringStrategy.ANY)); Assert.assertNull(TagFilter.create(emptyList, TagFilter.FilteringStrategy.NONE)); Assert.assertNull(TagFilter.create(tagsWithAllEmptyItems, TagFilter.FilteringStrategy.ALL)); Assert.assertNull(TagFilter.create(tagsWithAllEmptyItems, TagFilter.FilteringStrategy.ANY)); Assert.assertNull(TagFilter.create(tagsWithAllEmptyItems, TagFilter.FilteringStrategy.NONE)); testUntagged(TagFilter.create(null, TagFilter.FilteringStrategy.UNTAGGED)); testUntagged(TagFilter.create(oneTag, TagFilter.FilteringStrategy.UNTAGGED)); testUntagged(TagFilter.create(multipleTags, TagFilter.FilteringStrategy.UNTAGGED)); testUntagged(TagFilter.create(tagsWithOneEmptyItem, TagFilter.FilteringStrategy.UNTAGGED)); testUntagged(TagFilter.create(tagsWithDuplicateItems, TagFilter.FilteringStrategy.UNTAGGED)); testUntagged(TagFilter.create(tagsWithAllEmptyItems, TagFilter.FilteringStrategy.UNTAGGED)); testTagFilter(TagFilter.create(oneTag, TagFilter.FilteringStrategy.ALL), TagFilter.FilteringStrategy.ALL, 1, new String[]{"facet.tags like '%,foo,%'"}); testTagFilter(TagFilter.create(multipleTags, TagFilter.FilteringStrategy.ALL), TagFilter.FilteringStrategy.ALL, 2, new String[]{"facet.tags like '%,foo,%'", "AND", "facet.tags like '%,bar,%'"}); testTagFilter(TagFilter.create(tagsWithDuplicateItems, TagFilter.FilteringStrategy.ALL), TagFilter.FilteringStrategy.ALL, 2, new String[]{"facet.tags like '%,foo,%'", "AND", "facet.tags like '%,bar,%'"}); testTagFilter(TagFilter.create(tagsWithOneEmptyItem, TagFilter.FilteringStrategy.ALL), TagFilter.FilteringStrategy.ALL, 1, new String[]{"facet.tags like '%,foo,%'"}); testTagFilter(TagFilter.create(oneTag, TagFilter.FilteringStrategy.ANY), TagFilter.FilteringStrategy.ANY, 1, new String[]{"facet.tags like '%,foo,%'"}); testTagFilter(TagFilter.create(multipleTags, TagFilter.FilteringStrategy.ANY), TagFilter.FilteringStrategy.ANY, 2, new String[]{"facet.tags like '%,foo,%'", "OR", "facet.tags like '%,bar,%'"}); testTagFilter(TagFilter.create(tagsWithDuplicateItems, TagFilter.FilteringStrategy.ANY), TagFilter.FilteringStrategy.ANY, 2, new String[]{"facet.tags like '%,foo,%'", "OR", "facet.tags like '%,bar,%'"}); testTagFilter(TagFilter.create(tagsWithOneEmptyItem, TagFilter.FilteringStrategy.ANY), TagFilter.FilteringStrategy.ANY, 1, new String[]{"facet.tags like '%,foo,%'"}); testTagFilter(TagFilter.create(oneTag, TagFilter.FilteringStrategy.NONE), TagFilter.FilteringStrategy.NONE, 1, new String[]{"facet.tags is NULL OR (facet.tags NOT like '%,foo,%')"}); testTagFilter(TagFilter.create(multipleTags, TagFilter.FilteringStrategy.NONE), TagFilter.FilteringStrategy.NONE, 2, new String[]{"facet.tags is NULL OR (", "facet.tags NOT like '%,foo,%'", "AND", "facet.tags NOT like '%,bar,%'",")"}); testTagFilter(TagFilter.create(tagsWithDuplicateItems, TagFilter.FilteringStrategy.NONE), TagFilter.FilteringStrategy.NONE, 2, new String[]{"facet.tags is NULL OR (", "facet.tags NOT like '%,foo,%'", "AND", "facet.tags NOT like '%,bar,%'", ")"}); testTagFilter(TagFilter.create(tagsWithOneEmptyItem, TagFilter.FilteringStrategy.NONE), TagFilter.FilteringStrategy.NONE, 1, new String[]{"facet.tags is NULL OR (facet.tags NOT like '%,foo,%')"}); } private void testUntagged(final TagFilter tagFilter) { testTagFilter(tagFilter, TagFilter.FilteringStrategy.UNTAGGED, 0, new String[]{"facet.tags is NULL"}); } private void testTagFilter(final TagFilter tagFilter, final TagFilter.FilteringStrategy expectedFilteringStrategy, final int expectedNumberOfTags, final String[] expectedWhereClauseParts) { Assert.assertNotNull(tagFilter); Assert.assertNotNull(tagFilter.getTags()); Assert.assertEquals(expectedNumberOfTags, tagFilter.getTags().size()); Assert.assertEquals(expectedFilteringStrategy, tagFilter.getFilteringStrategy()); // Assert.assertEquals(expectedWhereClause, tagFilter.getWhereClause()); String whereClause = tagFilter.getWhereClause(); for (String expectedWhereClausePart : expectedWhereClauseParts){ String message = "Validation of where clause failed. Could not find ["+expectedWhereClausePart+"] in ["+whereClause+"]"; Assert.assertTrue(message, whereClause.contains(expectedWhereClausePart)); } } }