@Test
  public void testCacheEntryNull() throws VolleyError {
    when(cache.get(anyString())).thenReturn(null);

    dispatcher.processRequest(request);
    verify(mockNetwork).performRequest(request);
  }
  @Test
  public void testCachePutExpired() throws VolleyError {
    when(cacheEntry.isExpired()).thenReturn(true);

    // mock non expired entry for return
    Cache.Entry networkEntry = mock(Cache.Entry.class);
    when(networkEntry.isExpired()).thenReturn(true);

    Response response = Response.success(null, networkEntry);
    when(request.parseNetworkResponse(any(NetworkResponse.class))).thenReturn(response);

    dispatcher.processRequest(request);
    verify(cache, never()).put("test-cache-key", networkEntry);
  }
  @Test
  public void testRefresh() throws VolleyError {
    when(cacheEntry.isExpired()).thenReturn(false);
    when(cacheEntry.refreshNeeded()).thenReturn(true);

    // mock non expired entry for return
    Cache.Entry networkEntry = mock(Cache.Entry.class);
    when(networkEntry.isExpired()).thenReturn(false);

    Response response = Response.success(null, networkEntry);
    when(request.parseNetworkResponse(any(NetworkResponse.class))).thenReturn(response);
    request.setShouldCache(true);

    dispatcher.processRequest(request);
    verify(cache).put("test-cache-key", networkEntry);
    verify(mockNetwork).performRequest(request);
  }
  @Test
  public void testCachePut() throws VolleyError {
    // Given
    when(cacheEntry.isExpired()).thenReturn(true);

    // mock non expired entry for return
    Cache.Entry networkEntry = new Cache.Entry();
    networkEntry.ttl = System.currentTimeMillis() + 100000;

    NetworkResponse networkResponse = mock(NetworkResponse.class);
    when(mockNetwork.performRequest(any(Request.class))).thenReturn(networkResponse);

    Response response = Response.success(new Object(), networkEntry);
    when(request.parseNetworkResponse(any(NetworkResponse.class))).thenReturn(response);
    request.setShouldCache(true);

    // When
    dispatcher.processRequest(request);

    // Then
    verify(cache).put("test-cache-key", networkEntry);
  }
 @Test
 public void testNetworkAccess() throws VolleyError {
   when(cacheEntry.isExpired()).thenReturn(true);
   dispatcher.processRequest(request);
   verify(mockNetwork).performRequest(request);
 }
 @Test
 public void testCacheAccess() {
   dispatcher.processRequest(request);
   verify(cache).get("test-cache-key");
 }