@Test
  public void testFetchIncludesDoesNotExist() throws ParseException {
    OfflineStore store = mock(OfflineStore.class);
    when(store.fetchLocallyAsync(any(ParseObject.class), any(ParseSQLiteDatabase.class)))
        .thenReturn(Task.<ParseObject>forResult(null));

    ParseQuery.State<ParseObject> query =
        new ParseQuery.State.Builder<>("TestObject").include("foo").build();

    ParseObject object = new ParseObject("TestObject");

    ParseTaskUtils.wait(OfflineQueryLogic.fetchIncludesAsync(store, object, query, null));
    // only itself
    verify(store, times(1))
        .fetchLocallyAsync(any(ParseObject.class), any(ParseSQLiteDatabase.class));
  }
  @Test
  public void testFetchIncludesParseObject() throws ParseException {
    OfflineStore store = mock(OfflineStore.class);
    when(store.fetchLocallyAsync(any(ParseObject.class), any(ParseSQLiteDatabase.class)))
        .thenReturn(Task.<ParseObject>forResult(null));

    ParseSQLiteDatabase db = mock(ParseSQLiteDatabase.class);

    ParseQuery.State<ParseObject> query =
        new ParseQuery.State.Builder<>("TestObject").include("foo").build();

    ParseObject object = new ParseObject("TestObject");
    ParseObject unfetchedObject = new ParseObject("TestObject");
    object.put("foo", unfetchedObject);

    ParseTaskUtils.wait(OfflineQueryLogic.fetchIncludesAsync(store, object, query, db));
    verify(store).fetchLocallyAsync(object, db);
    verify(store).fetchLocallyAsync(unfetchedObject, db);
    verifyNoMoreInteractions(store);
  }
 private static <T extends ParseObject> boolean matches(
     OfflineQueryLogic logic, ParseQuery.State<T> query, T object, ParseUser user)
     throws ParseException {
   Task<Boolean> task = logic.createMatcher(query, user).matchesAsync(object, null);
   return ParseTaskUtils.wait(task);
 }