package pl.llp.aircasting.tracking;
import pl.llp.aircasting.InjectedTestRunner;
import pl.llp.aircasting.New;
import pl.llp.aircasting.helper.MetadataHelper;
import pl.llp.aircasting.helper.SettingsHelper;
import pl.llp.aircasting.model.Measurement;
import pl.llp.aircasting.model.MeasurementStream;
import pl.llp.aircasting.model.Sensor;
import pl.llp.aircasting.model.Session;
import pl.llp.aircasting.storage.DatabaseTaskQueue;
import pl.llp.aircasting.storage.repository.SessionRepository;
import com.google.common.eventbus.EventBus;
import com.google.inject.Inject;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static pl.llp.aircasting.storage.DatabaseTaskQueueAssertions.assertThat;
/**
* Created by ags on 24/03/2013 at 22:23
*/
@RunWith(InjectedTestRunner.class)
public class ActualSessionTrackerTest
{
public static final String NEW_TITLE = "New title";
ActualSessionTracker tracker;
Sensor sensor;
MeasurementStream stream;
Session session;
private DatabaseTaskQueue dbQueue;
@Inject EventBus eventBus;
private Measurement m;
@Inject SessionRepository sessions;
@Before
public void setUp() throws Exception
{
session = new Session();
session.setId(1234);
dbQueue = new DatabaseTaskQueue();
SettingsHelper settings = mock(SettingsHelper.class);
MetadataHelper metadata = mock(MetadataHelper.class);
m = mock(Measurement.class);
sensor = New.sensor();
stream = New.stream();
tracker = new ActualSessionTracker(eventBus, session, dbQueue, settings, metadata, sessions, false);
tracker.save(session);
}
@Test
public void should_delegate_adding_measurement() throws Exception
{
// given
tracker.measurementTracker = spy(tracker.measurementTracker);
// when
tracker.addMeasurement(sensor, stream, m);
// then
verify(tracker.measurementTracker).add(stream, m);
}
@Test
public void should_delegate_adding_stream() throws Exception
{
// given
// when
tracker.addStream(stream);
// then
}
@Test
public void should_not_add_same_stream_twice() throws Exception
{
// given
tracker.addStream(stream);
// when
tracker.addStream(stream);
// then
assertThat(session.getMeasurementStreams()).hasSize(1);
}
@Test
public void should_dump_session_in_db() throws Exception
{
// given
tracker.addStream(stream);
// when
tracker.addMeasurement(sensor, stream, m);
// then
assertThat(dbQueue).hasSize(3);
assertThat(stream.getMeasurements()).hasSize(1);
}
@Test
public void should_add_stream_to_session() throws Exception
{
// given
// when
tracker.addStream(stream);
// then
assertThat(session.getMeasurementStreams()).contains(stream);
}
@Test
public void adding_stream_should_create_a_database_task() throws Exception
{
// given
// when
tracker.addStream(stream);
// then
assertThat(dbQueue).hasSize(2);
}
@Test
public void should_updateTitle() throws Exception
{
// given
tracker.setTitle(session.getId(), NEW_TITLE);
// when
// then
assertThat(session.getTitle()).isEqualTo(NEW_TITLE);
}
}