View Javadoc
1   package de.juplo.httpresources;
2   
3   import org.junit.jupiter.api.BeforeEach;
4   import org.junit.jupiter.api.DisplayName;
5   import org.junit.jupiter.api.Test;
6   import org.junit.jupiter.api.extension.ExtendWith;
7   import org.mockito.Mock;
8   import org.mockito.junit.jupiter.MockitoExtension;
9   import org.mockito.junit.jupiter.MockitoSettings;
10  import org.mockito.quality.Strictness;
11  import org.slf4j.Logger;
12  import org.slf4j.LoggerFactory;
13  import org.springframework.cache.support.NoOpCache;
14  import org.springframework.http.HttpHeaders;
15  import org.springframework.test.context.junit.jupiter.SpringExtension;
16  
17  import java.net.URI;
18  import java.time.Clock;
19  import java.time.ZoneId;
20  
21  import static de.juplo.httpresources.TestUtil.*;
22  import static org.assertj.core.api.Assertions.assertThat;
23  import static org.mockito.ArgumentMatchers.any;
24  import static org.mockito.Mockito.*;
25  
26  
27  @DisplayName(("HttpResource - Fetched - Not Expired - Fetch: Unmodified"))
28  @ExtendWith({ SpringExtension.class, MockitoExtension.class })
29  @MockitoSettings(strictness = Strictness.LENIENT)
30  public class HttpResourceNotExpiredFetchUnmodifiedTest
31  {
32    private final static Logger LOG = LoggerFactory.getLogger(HttpResourceNotExpiredFetchUnmodifiedTest.class);
33  
34    @Mock
35    HttpResourceFetcher fetcher;
36  
37    HttpResources resources;
38    URI uri;
39    HttpResource resource;
40  
41  
42    /************** SETUP */
43  
44    @BeforeEach
45    public void setUp()
46    {
47      Clock clock = Clock.fixed(NOW.toInstant(), ZoneId.of("GMT"));
48      resources = new HttpResources(fetcher, clock);
49      uri = URI.create("http://foo/bar");
50      resource = new HttpResource(resources, fetcher, clock, uri);
51      resource.data = DATA_NOT_EXPIRED;
52  
53      // Everything is possible, nothing is necessary: Only defines behavior!
54  
55      HttpHeaders headers = new HttpHeaders();
56      headers.setContentType(MIME_TYPE_CONTENT_TYPE_HTML);
57  
58      when(fetcher.fetch(any(), any())).thenReturn(DATA_NOT_EXPIRED_DUMMY);
59    }
60  
61  
62    /*************** For calls, that do not trigger a fetch see: HttpResourceNotExpiredTest */
63  
64  
65    /*************** Results for calls, that does trigger a fetch */
66  
67    @Test
68    @DisplayName(("fetch() returns false, if fetcher returned false"))
69    public void test_fetch_ReturnsFalseIfFetcherReturnedFalse()
70    {
71      LOG.info("<-- start of test-case");
72  
73      assertThat(resource.fetch()).isFalse();
74    }
75  
76  
77    /*************** Expected state after calls that trigger a fetch */
78  
79    @Test
80    @DisplayName(("fetch() updates data"))
81    public void test_fetch_UpdatesData()
82    {
83      LOG.info("<-- start of test-case");
84  
85      resource.fetch();
86  
87      assertThat(resource.data).isSameAs(DATA_NOT_EXPIRED_DUMMY);
88    }
89  }