@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 fullViewShouldBeEmptyWithoutASession() {
    when(presenter.sessionManager.isSessionSaved()).thenReturn(false);
    when(presenter.sessionManager.isSessionStarted()).thenReturn(false);

    triggerMeasurement(measurement1);

    assertThat(presenter.getFullView()).isEmpty();
  }
  //
  //  @Test
  //  public void shouldScrollLeft()
  //  {
  //    presenter.setZoom(4000);
  //
  //    presenter.scroll(-0.5);
  //
  //    assertThat(presenter.getTimelineView(), hasItem(equalTo(measurements.get(2))));
  //    assertThat(presenter.getTimelineView(), hasItem(equalTo(measurements.get(1))));
  //  }
  //
  //  @Test
  //  public void shouldScrollRight()
  //  {
  //    presenter.setZoom(4000);
  //
  //    presenter.scroll(-1);
  //    presenter.scroll(0.5);
  //
  //    assertThat(presenter.getTimelineView(), hasItem(equalTo(measurements.get(2))));
  //    assertThat(presenter.getTimelineView(), hasItem(equalTo(measurements.get(1))));
  //  }
  //
  //  @Test
  //  public void shouldNotScrollTooMuchRight()
  //  {
  //    presenter.setZoom(4000);
  //
  //    presenter.scroll(2);
  //
  //    assertThat(presenter.getTimelineView(), hasItem(equalTo(measurements.get(3))));
  //    assertThat(presenter.getTimelineView(), hasItem(equalTo(measurements.get(2))));
  //  }
  //
  //  @Test
  //  public void shouldNotScrollTooMuchLeft()
  //  {
  //    presenter.setZoom(4000);
  //
  //    presenter.scroll(-10);
  //
  //    assertThat(presenter.getTimelineView(), hasItem(equalTo(measurements.get(1))));
  //    assertThat(presenter.getTimelineView(), hasItem(equalTo(measurements.get(0))));
  //  }
  //
  //  @Test
  //  public void shouldNotifyListenersOnScroll()
  //  {
  //    presenter.scroll(-10);
  //
  //    verify(listener).onViewUpdated();
  //  }
  //
  //  @Test
  //  public void shouldNotUpdateTheTimelineIfScrolled()
  //  {
  //    presenter.setZoom(4000);
  //    presenter.scroll(-0.5);
  //
  //    presenter.getTimelineView();
  //    triggerMeasurement(measurement1);
  //
  //    assertThat(presenter.getTimelineView(), not(hasItem(equalTo(measurement1))));
  //  }
  //
  //  @Test
  //  public void shouldAverage()
  //  {
  //    when(presenter.settingsHelper.getAveragingTime()).thenReturn(4);
  //    Measurement expected = new Measurement(1.5, 1.5, 1.5, new Date(0, 0, 0, 0, 1, 3));
  //
  //    presenter.onEvent(EVENT);
  //
  //    assertThat(presenter.getFullView(), hasItem(equalTo(expected)));
  //  }
  //
  @Test
  public void shouldAverageOnTheFly() {
    state.recording().startRecording();
    when(presenter.settingsHelper.getAveragingTime()).thenReturn(4);
    Measurement expected = new Measurement(3.5, 3.5, 3.5, new Date(0, 0, 0, 0, 1, 5));

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

    assertThat(presenter.getFullView()).contains(expected, measurement2);
  }