@Test
  public void shouldSetDescending() {
    ViewQuery query = ViewQuery.from("design", "view").descending();
    assertEquals("descending=true", query.toString());

    query = ViewQuery.from("design", "view").descending(false);
    assertEquals("descending=false", query.toString());
  }
  @Test
  public void shouldSetInclusiveEnd() {
    ViewQuery query = ViewQuery.from("design", "view").inclusiveEnd();
    assertEquals("inclusive_end=true", query.toString());

    query = ViewQuery.from("design", "view").inclusiveEnd(false);
    assertEquals("inclusive_end=false", query.toString());
  }
  @Test
  public void shouldGroup() {
    ViewQuery query = ViewQuery.from("design", "view").group();
    assertEquals("group=true", query.toString());

    query = ViewQuery.from("design", "view").group(false);
    assertEquals("group=false", query.toString());
  }
  @Test
  public void shouldSetOnError() {
    ViewQuery query = ViewQuery.from("design", "view").onError(OnError.CONTINUE);
    assertEquals("on_error=continue", query.toString());

    query = ViewQuery.from("design", "view").onError(OnError.STOP);
    assertEquals("on_error=stop", query.toString());
  }
 @Test
 public void shouldConcatMoreParams() {
   ViewQuery query =
       ViewQuery.from("design", "view")
           .descending()
           .debug()
           .development()
           .group()
           .reduce(false)
           .startKey(JsonArray.from("foo", true));
   assertEquals(
       "reduce=false&group=true&debug=true&descending=true&startkey=%5B%22foo%22%2Ctrue%5D",
       query.toString());
 }
  @Test
  public void shouldSetStale() {
    ViewQuery query = ViewQuery.from("design", "view").stale(Stale.FALSE);
    assertEquals("stale=false", query.toString());

    query = ViewQuery.from("design", "view").stale(Stale.TRUE);
    assertEquals("stale=ok", query.toString());

    query = ViewQuery.from("design", "view").stale(Stale.UPDATE_AFTER);
    assertEquals("stale=update_after", query.toString());
  }
  @Test
  public void shouldReduce() {
    ViewQuery query = ViewQuery.from("design", "view").reduce();
    assertEquals("reduce=true", query.toString());

    query = ViewQuery.from("design", "view").reduce(true);
    assertEquals("reduce=true", query.toString());

    query = ViewQuery.from("design", "view").reduce(false);
    assertEquals("reduce=false", query.toString());
  }
 @Test
 public void shouldSetDefaults() {
   ViewQuery query = ViewQuery.from("design", "view");
   assertEquals("design", query.getDesign());
   assertEquals("view", query.getView());
   assertFalse(query.isDevelopment());
   assertTrue(query.toString().isEmpty());
 }
 @Test
 public void shouldGroupLevel() {
   ViewQuery query = ViewQuery.from("design", "view").groupLevel(2);
   assertEquals("group_level=2", query.toString());
 }
 @Test
 public void shouldSkip() {
   ViewQuery query = ViewQuery.from("design", "view").skip(3);
   assertEquals("skip=3", query.toString());
 }
 @Test
 public void shouldLimit() {
   ViewQuery query = ViewQuery.from("design", "view").limit(10);
   assertEquals("limit=10", query.toString());
 }
 @Test
 public void shouldHandleEndKeyDocID() {
   ViewQuery query = ViewQuery.from("design", "view").endKeyDocId("mykey");
   assertEquals("endkey_docid=%22mykey%22", query.toString());
 }
  @Test
  public void shouldHandleEndKey() {
    ViewQuery query = ViewQuery.from("design", "view").endKey("key");
    assertEquals("endkey=%22key%22", query.toString());

    query = ViewQuery.from("design", "view").endKey(1);
    assertEquals("endkey=1", query.toString());

    query = ViewQuery.from("design", "view").endKey(true);
    assertEquals("endkey=true", query.toString());

    query = ViewQuery.from("design", "view").endKey(3.55);
    assertEquals("endkey=3.55", query.toString());

    query = ViewQuery.from("design", "view").endKey(JsonArray.from("foo", 3));
    assertEquals("endkey=%5B%22foo%22%2C3%5D", query.toString());

    query = ViewQuery.from("design", "view").endKey(JsonObject.empty().put("foo", true));
    assertEquals("endkey=%7B%22foo%22%3Atrue%7D", query.toString());
  }
 @Test
 public void shouldHandleKeys() {
   ViewQuery query = ViewQuery.from("design", "view").keys(JsonArray.from("foo", 3, true));
   assertEquals("keys=%5B%22foo%22%2C3%2Ctrue%5D", query.toString());
 }