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
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
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
64
65
66
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
77 verify(fetcher).fetch(eq(uri), any());
78 }
79
80
81
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
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 }