package com.spotify.heroic.aggregation;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
public class CoreAggregationFactoryTest {
@Rule
public ExpectedException expected = ExpectedException.none();
private final RuntimeException e = new RuntimeException("exception");
private Aggregation aggregation;
private CoreAggregationFactory factory;
@Before
public void setup() {
aggregation = mock(Aggregation.class);
final AggregationDSL throwing = mock(AggregationDSL.class);
doThrow(e).when(throwing).build(any(AggregationArguments.class));
final AggregationDSL working = mock(AggregationDSL.class);
doReturn(aggregation).when(working).build(any(AggregationArguments.class));
final Map<String, AggregationDSL> builderMap =
ImmutableMap.of("throwing", throwing, "working", working);
factory = new CoreAggregationFactory(builderMap);
}
@Test
public void builderMissing() {
expected.expect(MissingAggregation.class);
expected.expectMessage("Missing aggregation missing");
factory.build("missing", ImmutableList.of(), ImmutableMap.of());
}
@Test
public void builderThrowing() {
expected.expect(RuntimeException.class);
expected.expectMessage("throwing: exception");
factory.build("throwing", ImmutableList.of(), ImmutableMap.of());
}
@Test
public void builderWorking() {
assertEquals(aggregation, factory.build("working", ImmutableList.of(), ImmutableMap.of()));
}
}