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.ArgumentMatchers.eq;
25  import static org.mockito.Mockito.*;
26  
27  
28  @DisplayName(("HttpResource - Fetched - Not Expired - Fetch: Modified"))
29  @ExtendWith({ SpringExtension.class, MockitoExtension.class })
30  @MockitoSettings(strictness = Strictness.LENIENT)
31  public class HttpResourceNotExpiredFetchModifiedTest
32  {
33    private final static Logger LOG = LoggerFactory.getLogger(HttpResourceNotExpiredFetchModifiedTest.class);
34  
35    @Mock
36    HttpResourceFetcher fetcher;
37  
38    HttpResources resources;
39    URI uri;
40    HttpResource resource;
41  
42  
43    /************** SETUP */
44  
45    @BeforeEach
46    public void setUp()
47    {
48      Clock clock = Clock.fixed(NOW.toInstant(), ZoneId.of("GMT"));
49      resources = new HttpResources(fetcher, clock);
50      uri = URI.create("http://foo/bar");
51      resource = new HttpResource(resources, fetcher, clock, uri);
52      resource.data = DATA_NOT_EXPIRED;
53  
54      // Everything is possible, nothing is necessary: Only defines behavior!
55  
56      HttpHeaders headers = new HttpHeaders();
57      headers.setContentType(MIME_TYPE_CONTENT_TYPE_HTML);
58  
59      when(fetcher.fetch(any(), any())).thenReturn(DATA_UPDATED);
60    }
61  
62  
63    /*************** For calls, that do not trigger a fetch see: HttpResourceNotExpiredTest */
64  
65  
66    /*************** Calls, that trigger a fetch */
67  
68    @Test
69    @DisplayName(("call to fetch() triggers fetch"))
70    public void test_fetch_TriggersFetch()
71    {
72      LOG.info("<-- start of test-case");
73  
74      resource.fetch();
75  
76      // Do not verify implementation: Only verify necessary outcome!
77      verify(fetcher).fetch(eq(uri), any());
78    }
79  
80  
81    /*************** Results for calls, that does trigger a fetch */
82  
83    @Test
84    @DisplayName(("fetch() returns true, if fetcher returned true"))
85    public void test_fetch_ReturnsTrueIfFetcherReturnedFalse()
86    {
87      LOG.info("<-- start of test-case");
88  
89      assertThat(resource.fetch()).isTrue();
90    }
91  
92  
93    /*************** Expected state after calls that trigger a fetch */
94  
95    @Test
96    @DisplayName(("fetch() updates data"))
97    public void test_fetch_UpdatesData()
98    {
99      LOG.info("<-- start of test-case");
100 
101     resource.fetch();
102 
103     assertThat(resource.data).isSameAs(DATA_UPDATED);
104   }
105 }