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 - Expired - Fetch: Unmodified"))
28  @ExtendWith({ SpringExtension.class, MockitoExtension.class })
29  @MockitoSettings(strictness = Strictness.LENIENT)
30  public class HttpResourceExpiredFetchUnmodifiedTest
31  {
32    private final static Logger LOG = LoggerFactory.getLogger(HttpResourceExpiredFetchUnmodifiedTest.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_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_EXPIRED_DUMMY);
59    }
60  
61  
62    /*************** Results for calls, that did trigger a fetch */
63  
64    @Test
65    @DisplayName(("fetch() reports no modification"))
66    public void test_fetch_ReportsNoModifications()
67    {
68      LOG.info("<-- start of test-case");
69  
70      assertThat(resource.fetch()).isFalse();
71    }
72  
73    @Test
74    @DisplayName(("exists() is true"))
75    public void test_exists_IsTrue()
76    {
77      LOG.info("<-- start of test-case");
78  
79      assertThat(resource.exists()).isTrue();
80    }
81  
82    @Test
83    @DisplayName(("readable() is true"))
84    public void test_isReadable_IsTrue()
85    {
86      LOG.info("<-- start of test-case");
87  
88      assertThat(resource.isReadable()).isTrue();
89    }
90  
91    @Test
92    @DisplayName(("isModified() reports no modification"))
93    public void test_isModified_ReportsNoModifications()
94    {
95      LOG.info("<-- start of test-case");
96  
97      assertThat(resource.isModified()).isFalse();
98    }
99  
100 
101   /*************** Expected state after calls, that did trigger a fetch */
102 
103   @Test
104   @DisplayName(("fetch() updates data"))
105   public void test_fetch_UpdatesData()
106   {
107     LOG.info("<-- start of test-case");
108 
109     resource.fetch();
110 
111     assertThat(resource.data).isSameAs(DATA_EXPIRED_DUMMY);
112   }
113 
114   @Test
115   @DisplayName(("exists() updates data"))
116   public void test_exists_UpdatesData()
117   {
118     LOG.info("<-- start of test-case");
119 
120     resource.exists();
121 
122     assertThat(resource.data).isSameAs(DATA_EXPIRED_DUMMY);
123   }
124 
125   @Test
126   @DisplayName(("isReadable() updates data"))
127   public void test_isReadable_UpdatesData()
128   {
129     LOG.info("<-- start of test-case");
130 
131     resource.isReadable();
132 
133     assertThat(resource.data).isSameAs(DATA_EXPIRED_DUMMY);
134   }
135 
136   @Test
137   @DisplayName(("isModified() updates data"))
138   public void test_isModified_UpdatesData()
139   {
140     LOG.info("<-- start of test-case");
141 
142     resource.isModified();
143 
144     assertThat(resource.data).isSameAs(DATA_EXPIRED_DUMMY);
145   }
146 
147   @Test
148   @DisplayName(("getInputStream() updates data"))
149   public void test_getInputStream_UpdatesData() throws Exception
150   {
151     LOG.info("<-- start of test-case");
152 
153     resource.getInputStream();
154 
155     assertThat(resource.data).isSameAs(DATA_EXPIRED_DUMMY);
156   }
157 }