@Test
  public void shouldRenewLeaseAtEachTraversal() {
    Response response = createAPagedTraverser();

    String traverserId = parseTraverserIdFromLocationUri(response);

    ((FakeClock) leaseManager.getClock()).forward(30, TimeUnit.SECONDS);
    response = service.pagedTraverse(traverserId, TraverserReturnType.node);
    assertEquals(200, response.getStatus());

    ((FakeClock) leaseManager.getClock()).forward(30, TimeUnit.SECONDS);
    response = service.pagedTraverse(traverserId, TraverserReturnType.node);
    assertEquals(200, response.getStatus());

    ((FakeClock) leaseManager.getClock())
        .forward(enoughMinutesToExpireTheLease(), TimeUnit.MINUTES);
    response = service.pagedTraverse(traverserId, TraverserReturnType.node);
    assertEquals(404, response.getStatus());
  }
  @Test
  public void shouldRespondWith404WhenTraversalHasExpired() {
    Response response = createAPagedTraverser();
    ((FakeClock) leaseManager.getClock()).forward(2, TimeUnit.MINUTES);

    String traverserId = parseTraverserIdFromLocationUri(response);

    response = service.pagedTraverse(traverserId, TraverserReturnType.node);

    assertEquals(404, response.getStatus());
  }
  @Test
  public void givenAPageTraversalHasBeenCreatedShouldYieldNextPageAndRespondWith200()
      throws Exception {
    Response response = createAPagedTraverser();

    String traverserId = parseTraverserIdFromLocationUri(response);

    response = service.pagedTraverse(traverserId, TraverserReturnType.node);

    assertEquals(200, response.getStatus());
    assertNotNull(response.getEntity());
    assertThat(new String((byte[]) response.getEntity()), not(containsString("\"name\" : \"19\"")));
    assertThat(new String((byte[]) response.getEntity()), containsString("\"name\" : \"91\""));
  }
  private Response createAPagedTraverser() {
    long startNodeId = createListOfNodes(1000);
    String description =
        "{"
            + "\"prune_evaluator\":{\"language\":\"builtin\",\"name\":\"none\"},"
            + "\"return_filter\":{\"language\":\"javascript\",\"body\":\"position.endNode().getProperty('name')"
            + ".contains('9');\"},"
            + "\"order\":\"depth first\","
            + "\"relationships\":{\"type\":\"PRECEDES\",\"direction\":\"out\"}"
            + "}";

    final int SIXTY_SECONDS = 60;
    final int PAGE_SIZE = 10;

    return service.createPagedTraverser(
        startNodeId, TraverserReturnType.node, PAGE_SIZE, SIXTY_SECONDS, description);
  }
 @Test
 public void shouldRespondWith404WhenNoSuchTraversalRegistered() {
   Response response = service.pagedTraverse("anUnlikelyTraverserId", TraverserReturnType.node);
   assertEquals(404, response.getStatus());
 }