package com.spotify.heroic.aggregation.simple;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.NamedType;
import com.spotify.heroic.aggregation.AggregationInstance;
import com.spotify.heroic.test.FakeModuleLoader;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class FilterAggregationTest {
private ObjectMapper mapper;
@Before
public void setup() {
mapper = FakeModuleLoader.builder().module(Module.class).build().json();
}
@Test
public void testAboveKInstance() throws Exception {
// TODO: support @JsonCreator
// verifyClassBuilder(AboveKInstance.class).checkGetters(false).verify();
verifyRoundtrip("{\"type\":\"abovek\",\"k\":0.0}", new AboveKInstance(0),
AboveKInstance.class);
}
@Test
public void testBelowKInstance() throws Exception {
// TODO: support @JsonCreator
// verifyClassBuilder(BelowKInstance.class).checkGetters(false).verify();
verifyRoundtrip("{\"type\":\"belowk\",\"k\":0.0}", new BelowKInstance(0),
BelowKInstance.class);
}
@Test
public void testBottomKInstance() throws Exception {
// TODO: support @JsonCreator
// verifyClassBuilder(BottomKInstance.class).checkGetters(false).verify();
verifyRoundtrip("{\"type\":\"bottomk\",\"k\":0}", new BottomKInstance(0),
BottomKInstance.class);
}
@Test
public void testTopKInstance() throws Exception {
// TODO: support @JsonCreator
// verifyClassBuilder(TopKInstance.class).checkGetters(false).verify();
verifyRoundtrip("{\"type\":\"topk\",\"k\":0}", new TopKInstance(0), TopKInstance.class);
}
private <T> void verifyRoundtrip(
final String json, final T reference, final Class<T> cls
) throws Exception {
assertEquals(reference, mapper.readValue(json, cls));
assertEquals(json, mapper.writeValueAsString(reference));
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
public interface TypeNameMixin {
}
}