package pl.llp.aircasting.model;
import pl.llp.aircasting.InjectedTestRunner;
import pl.llp.aircasting.New;
import pl.llp.aircasting.model.events.SensorEvent;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.ArrayList;
import static com.google.common.collect.Lists.newArrayList;
import static junit.framework.Assert.assertEquals;
import static org.fest.assertions.Assertions.assertThat;
@RunWith(InjectedTestRunner.class)
public class MeasurementStreamTest
{
private SensorEvent event;
private MeasurementStream stream;
Measurement measurement = new Measurement(0, 0, 0);
Measurement otherMeasurement = new Measurement(0, 0, 1);
@Before
public void setup() {
event = New.sensorEvent();
stream = event.stream();
stream.add(measurement);
stream.add(otherMeasurement);
}
@Test
public void should_not_be_empty_with_measurements() {
assertThat(stream.isEmpty()).isFalse();
}
@Test
public void should_be_empty_without_measurements() {
MeasurementStream stream = event.stream();
assertThat(stream.isEmpty()).isTrue();
}
@Test
public void shouldStoreMeasurements() {
assertThat(stream.getMeasurements()).contains(measurement);
}
@Test
public void shouldStoreSensorName() {
assertThat(stream.getSensorName()).isEqualTo(event.getSensorName());
}
@Test
public void shouldStoreMeasurementType() {
assertThat(stream.getMeasurementType()).isEqualTo(event.getMeasurementType());
}
@Test
public void shouldStoreUnit() {
assertThat(stream.getUnit()).isEqualTo(event.getUnit());
}
@Test
public void shouldStoreSymbol() {
assertThat(stream.getSymbol()).isEqualTo(event.getSymbol());
}
@Test
public void shouldProvideAnAverage() {
assertThat(stream.getAvg()).isEqualTo(0.5);
}
@Test
public void shouldProvidePeak() {
assertThat(stream.getPeak()).isEqualTo(1.0);
}
@Test
public void setting_all_measurements_should_properly_average() {
ArrayList<Measurement> measurements = newArrayList(new Measurement(10), new Measurement(20));
stream.setMeasurements(measurements);
assertThat(stream.getAvg()).isEqualTo(15.0);
}
@Test
public void setting_average_should_override_calculated() throws Exception {
// given
assertEquals(0.5, stream.getAvg(), 0.1);
// when
stream.setAvg(2);
// then
assertEquals(2, stream.getAvg(), 0.1);
}
@Test
public void adding_a_measurement_should_override_set() throws Exception {
// given
stream.setAvg(2);
assertEquals(2, stream.getAvg(), 0.1);
// when
stream.add(new Measurement(0.5, 1, 5));
// then
assertEquals(3.0, stream.getAvg(), 0.1);
}
@Test
public void should_calculateAverage() throws Exception
{
stream = new MeasurementStream();
// given
stream.add(New.measurement(0));
stream.add(New.measurement(2));
assertEquals(1.0, stream.getAvg());
// when
stream.add(New.measurement(4));
// then
assertEquals(2.0, stream.getAvg());
}
}