package com.spotify.heroic.filter; import com.fasterxml.jackson.databind.ObjectMapper; import com.spotify.heroic.HeroicMappers; import com.spotify.heroic.grammar.QueryParser; import com.spotify.heroic.test.FakeModuleLoader; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.io.IOException; import static com.spotify.heroic.filter.Filter.and; import static com.spotify.heroic.filter.Filter.hasTag; import static com.spotify.heroic.filter.Filter.matchKey; import static com.spotify.heroic.filter.Filter.matchTag; import static com.spotify.heroic.filter.Filter.not; import static com.spotify.heroic.filter.Filter.or; import static com.spotify.heroic.filter.Filter.regex; import static com.spotify.heroic.filter.Filter.startsWith; import static org.junit.Assert.assertEquals; @RunWith(MockitoJUnitRunner.class) public class FilterSerializerTest { @Mock private QueryParser parser; private ObjectMapper m = FakeModuleLoader.builder().build().json();; @Test public void serializeTest() throws IOException { checkFilter(matchTag("a", "b"), "[\"=\",\"a\",\"b\"]"); checkFilter(startsWith("a", "b"), "[\"^\",\"a\",\"b\"]"); checkFilter(hasTag("a"), "[\"+\",\"a\"]"); checkFilter(matchKey("a"), "[\"key\",\"a\"]"); checkFilter(regex("a", "b"), "[\"~\",\"a\",\"b\"]"); checkFilter(not(matchTag("a", "b")), "[\"not\",[\"=\",\"a\",\"b\"]]"); checkFilter(and(matchTag("a", "b"), matchTag("c", "d")), "[\"and\",[\"=\",\"a\",\"b\"],[\"=\",\"c\",\"d\"]]"); checkFilter(or(matchTag("a", "b"), matchTag("c", "d")), "[\"or\",[\"=\",\"a\",\"b\"],[\"=\",\"c\",\"d\"]]"); } private void checkFilter(final Filter filter, final String json) throws IOException { final Filter f = filter.optimize(); assertEquals(f, m.readValue(json, Filter.class)); assertEquals(json, m.writeValueAsString(f)); } }