public static <T> Call<T> response(@Nullable T successValue) { return new FakeCall<>(Response.success(successValue), null); }
/** Create a synthetic successful response with {@code body} as the deserialized body. */ public static <T> Response<T> success(@Nullable T body) { return success(body, new okhttp3.Response.Builder() // .code(200) .message("OK") .protocol(Protocol.HTTP_1_1) .request(new Request.Builder().url("http://localhost/").build()) .build()); }
/** * Create a synthetic successful response with an HTTP status code of {@code code} and * {@code body} as the deserialized body. */ public static <T> Response<T> success(int code, @Nullable T body) { if (code < 200 || code >= 300) { throw new IllegalArgumentException("code < 200 or >= 300: " + code); } return success(body, new okhttp3.Response.Builder() // .code(code) .message("Response.success()") .protocol(Protocol.HTTP_1_1) .request(new Request.Builder().url("http://localhost/").build()) .build()); }
/** * Create a synthetic successful response using {@code headers} with {@code body} as the * deserialized body. */ public static <T> Response<T> success(@Nullable T body, Headers headers) { checkNotNull(headers, "headers == null"); return success(body, new okhttp3.Response.Builder() // .code(200) .message("OK") .protocol(Protocol.HTTP_1_1) .headers(headers) .request(new Request.Builder().url("http://localhost/").build()) .build()); }
/** Create a synthetic successful response with {@code body} as the deserialized body. */ public static <T> Response<T> success(@Nullable T body) { return success(body, new okhttp3.Response.Builder() // .code(200) .message("OK") .protocol(Protocol.HTTP_1_1) .request(new Request.Builder().url("http://localhost/").build()) .build()); }
/** * Create a synthetic successful response with an HTTP status code of {@code code} and * {@code body} as the deserialized body. */ public static <T> Response<T> success(int code, @Nullable T body) { if (code < 200 || code >= 300) { throw new IllegalArgumentException("code < 200 or >= 300: " + code); } return success(body, new okhttp3.Response.Builder() // .code(code) .message("Response.success()") .protocol(Protocol.HTTP_1_1) .request(new Request.Builder().url("http://localhost/").build()) .build()); }
/** * Create a synthetic successful response using {@code headers} with {@code body} as the * deserialized body. */ public static <T> Response<T> success(@Nullable T body, Headers headers) { checkNotNull(headers, "headers == null"); return success(body, new okhttp3.Response.Builder() // .code(200) .message("OK") .protocol(Protocol.HTTP_1_1) .headers(headers) .request(new Request.Builder().url("http://localhost/").build()) .build()); }
@Test public void testSyncEnabledCached() throws IOException { HackerNewsItem hnItem = mock(HackerNewsItem.class); Call<HackerNewsItem> call = mock(Call.class); when(call.execute()).thenReturn(Response.success(hnItem)); when(TestRestServiceFactory.hnRestService.cachedItem(any())).thenReturn(call); syncScheduler.scheduleSync(service, "1"); adapter.onPerformSync(mock(Account.class), getLastSyncExtras(), null, null, null); // cache hit, should not try network or defer verify(TestRestServiceFactory.hnRestService).cachedItem(any()); verify(TestRestServiceFactory.hnRestService, never()).networkItem(any()); assertThat(syncPreferences.getAll()).isEmpty(); }
@Test public void testSyncReadabilityNotStory() throws IOException { HackerNewsItem item = new TestHnItem(1L) { @Override public boolean isStoryType() { return false; } }; Call<HackerNewsItem> call = mock(Call.class); when(call.execute()).thenReturn(Response.success(item)); when(TestRestServiceFactory.hnRestService.cachedItem(any())).thenReturn(call); syncScheduler.scheduleSync(service, "1"); adapter.onPerformSync(mock(Account.class), getLastSyncExtras(), null, null, null); verify(TestRestServiceFactory.hnRestService).cachedItem(any()); verify(readabilityClient, never()).parse(any(), any(), any()); }
@Test public void testSyncChildrenDisabled() throws IOException { HackerNewsItem item = mock(HackerNewsItem.class); when(item.getKids()).thenReturn(new long[]{2L, 3L}); Call<HackerNewsItem> call = mock(Call.class); when(call.execute()).thenReturn(Response.success(item)); when(TestRestServiceFactory.hnRestService.cachedItem(any())).thenReturn(call); PreferenceManager.getDefaultSharedPreferences(service) .edit() .putBoolean(service.getString(R.string.pref_offline_comments), false) .apply(); syncScheduler.scheduleSync(service, "1"); adapter.onPerformSync(mock(Account.class), getLastSyncExtras(), null, null, null); // should not sync children verify(TestRestServiceFactory.hnRestService).cachedItem(any()); }
@Test public void testSyncEnabledWifi() throws IOException { Call<HackerNewsItem> call = mock(Call.class); when(call.execute()).thenThrow(IOException.class); when(TestRestServiceFactory.hnRestService.cachedItem(any())).thenReturn(call); when(TestRestServiceFactory.hnRestService.networkItem(any())).thenReturn(call); syncScheduler.scheduleSync(service, "1"); adapter.onPerformSync(mock(Account.class), getLastSyncExtras(), null, null, null); // should try cache before network verify(TestRestServiceFactory.hnRestService).cachedItem(any()); verify(TestRestServiceFactory.hnRestService).networkItem(any()); assertThat(syncPreferences.getAll()).isEmpty(); // on network response should try children verify(call).enqueue(callbackCapture.capture()); HackerNewsItem item = mock(HackerNewsItem.class); when(item.getKids()).thenReturn(new long[]{2L, 3L}); callbackCapture.getValue().onResponse(null, Response.success(item)); verify(TestRestServiceFactory.hnRestService, times(3)).cachedItem(any()); }
@Test public void testSyncReadabilityNoWifi() throws IOException { HackerNewsItem item = new TestHnItem(1L) { @Override public boolean isStoryType() { return true; } }; Call<HackerNewsItem> call = mock(Call.class); when(call.execute()).thenReturn(Response.success(item)); when(TestRestServiceFactory.hnRestService.cachedItem(any())).thenReturn(call); setNetworkType(ConnectivityManager.TYPE_MOBILE); syncScheduler.scheduleSync(service, "1"); adapter.onPerformSync(mock(Account.class), getLastSyncExtras(), null, null, null); verify(readabilityClient, never()).parse(any(), any(), any()); }
@Test public void testSyncReadability() throws IOException { HackerNewsItem item = new TestHnItem(1L) { @Override public boolean isStoryType() { return true; } @Override public String getRawUrl() { return "http://example.com"; } }; Call<HackerNewsItem> call = mock(Call.class); when(call.execute()).thenReturn(Response.success(item)); when(TestRestServiceFactory.hnRestService.cachedItem(any())).thenReturn(call); syncScheduler.scheduleSync(service, "1"); adapter.onPerformSync(mock(Account.class), getLastSyncExtras(), null, null, null); verify(TestRestServiceFactory.hnRestService).cachedItem(any()); verify(readabilityClient).parse(any(), eq("http://example.com"), any()); }
@Test public void testSyncReadabilityDisabled() throws IOException { HackerNewsItem item = new TestHnItem(1L) { @Override public boolean isStoryType() { return true; } @Override public String getRawUrl() { return "http://example.com"; } }; Call<HackerNewsItem> call = mock(Call.class); when(call.execute()).thenReturn(Response.success(item)); when(TestRestServiceFactory.hnRestService.cachedItem(any())).thenReturn(call); PreferenceManager.getDefaultSharedPreferences(service) .edit() .putBoolean(service.getString(R.string.pref_offline_readability), false) .apply(); syncScheduler.scheduleSync(service, "1"); adapter.onPerformSync(mock(Account.class), getLastSyncExtras(), null, null, null); verify(TestRestServiceFactory.hnRestService).cachedItem(any()); verify(readabilityClient, never()).parse(any(), any(), any()); }
@Test public void testSyncWebCacheDisabled() throws IOException { ShadowWebView.lastGlobalLoadedUrl = null; PreferenceManager.getDefaultSharedPreferences(service) .edit() .putBoolean(service.getString(R.string.pref_offline_article), false) .apply(); HackerNewsItem item = new TestHnItem(1L) { @Override public boolean isStoryType() { return true; } @Override public String getRawUrl() { return "http://example.com"; } }; Call<HackerNewsItem> call = mock(Call.class); when(call.execute()).thenReturn(Response.success(item)); when(TestRestServiceFactory.hnRestService.cachedItem(any())).thenReturn(call); syncScheduler.scheduleSync(service, "1"); adapter.onPerformSync(mock(Account.class), getLastSyncExtras(), null, null, null); assertThat(ShadowWebView.getLastGlobalLoadedUrl()).isNullOrEmpty(); }
@Override protected Single<Response<Page<Repository>>> loadData(int page) { return service.searchRepositories(query, null, null, page) .map(response -> { SearchPage<Repository> repositorySearchPage = response.body(); return Response.success(Page.<Repository>builder() .first(repositorySearchPage.first()) .last(repositorySearchPage.last()) .next(repositorySearchPage.next()) .prev(repositorySearchPage.prev()) .items(repositorySearchPage.items()) .build()); }); }
@Override protected Single<Response<Page<User>>> loadData(int page) { return service.searchUsers(query, null, null, page) .map(response -> { SearchPage<User> repositorySearchPage = response.body(); return Response.success(Page.<User>builder() .first(repositorySearchPage.first()) .last(repositorySearchPage.last()) .next(repositorySearchPage.next()) .prev(repositorySearchPage.prev()) .items(repositorySearchPage.items()) .build()); }); }
@Override protected Single<Response<Page<Issue>>> loadData(int page) { String searchQuery = query + "+repo:" + InfoUtils.createRepoId(repository); return service.searchIssues(searchQuery, null, null, page) .map(response -> { SearchPage<Issue> issueSearchPage = response.body(); return Response.success(Page.<Issue>builder() .first(issueSearchPage.first()) .last(issueSearchPage.last()) .next(issueSearchPage.next()) .prev(issueSearchPage.prev()) .items(issueSearchPage.items()) .build()); }); }