@Before
  public void setup() {
    measurements = new ArrayList<Measurement>();
    for (int i = 0; i < 4; i++) {
      measurements.add(new Measurement(i, i, i, new Date(0, 0, 0, 0, 1, 2 * i)));
    }

    sensor = mock(Sensor.class);
    when(sensor.getSensorName()).thenReturn("LHC");

    presenter.sensorManager = mock(SensorManager.class);
    when(presenter.sensorManager.getVisibleSensor()).thenReturn(sensor);
    presenter.onEvent(new ViewStreamEvent(sensor));

    stream = mock(MeasurementStream.class);
    when(stream.getMeasurements()).thenReturn(measurements);

    presenter.sessionManager = mockSessionManager();
    when(presenter.sessionManager.getMeasurementStream("LHC")).thenReturn(stream);
    when(presenter.sessionManager.isSessionStarted()).thenReturn(true);

    listener = mock(MeasurementPresenter.Listener.class);
    presenter.registerListener(listener);

    presenter.settingsHelper = mock(SettingsHelper.class);
    when(presenter.settingsHelper.getAveragingTime()).thenReturn(1);
    EVENT = new SessionChangeEvent(new Session());
  }
  @Test
  public void shouldUpdateTheFullView() {
    state.recording().startRecording();
    presenter.getFullView();
    presenter.sessionManager = mockSessionManager();

    triggerMeasurement(measurement1);
    List<Measurement> result = presenter.getFullView();

    assertThat(result).contains(measurement1);
  }
  @Test
  public void shouldOnlyUpdateFromVisibleSensorEvents() {
    presenter.getFullView();
    presenter.sessionManager = mockSessionManager();
    when(presenter.sessionManager.isSessionStarted()).thenReturn(false);
    when(presenter.sessionManager.isSessionSaved()).thenReturn(true);

    presenter.onEvent(EVENT);
    triggerMeasurement(measurement1);

    assertThat(presenter.getFullView()).isEmpty();
  }
  @Test
  public void shouldNotUpdateWhenViewingASession() {
    presenter.getFullView();
    presenter.sessionManager = mockSessionManager();
    when(presenter.sessionManager.isSessionStarted()).thenReturn(false);
    when(presenter.sessionManager.isSessionSaved()).thenReturn(true);

    presenter.onEvent(EVENT);
    triggerMeasurement(measurement1);

    assertThat(presenter.getFullView()).isEmpty();
  }
  @Test
  public void shouldAppendWithoutRecalculating() {
    state.recording().startRecording();
    presenter.setZoom(4000);
    presenter.getTimelineView();
    presenter.sessionManager = mockSessionManager();

    triggerMeasurement(measurement1);
    List<Measurement> result = presenter.getTimelineView();

    assertThat(result).contains(measurement1, measurements.get(3)).excludes(measurements.get(2));
  }