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
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
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
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
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 }