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