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