1515 */
1616package io.github.nstdio.http.ext
1717
18+ import org.junit.jupiter.api.BeforeEach
1819import org.junit.jupiter.api.Test
19- import org.mockito.Mockito.mock
20+ import org.junit.jupiter.api.extension.ExtendWith
21+ import org.mockito.Mock
2022import org.mockito.Mockito.verify
23+ import org.mockito.Mockito.verifyNoInteractions
24+ import org.mockito.junit.jupiter.MockitoExtension
25+ import java.net.http.HttpRequest
26+ import java.time.Clock
2127
28+ @ExtendWith(MockitoExtension ::class )
2229internal class FilteringCacheTest {
30+ @Mock
31+ private lateinit var mockDelegate: Cache
32+
33+ @Mock
34+ private lateinit var mockRequest: HttpRequest
35+
36+ @Mock
37+ private lateinit var mockEntry: Cache .CacheEntry
38+ private lateinit var metadata: CacheEntryMetadata
39+
40+ @BeforeEach
41+ fun setup () {
42+ metadata = CacheEntryMetadata .of(0 , 0 , Helpers .responseInfo(mapOf ()), mockRequest, Clock .systemUTC())
43+ }
44+
2345 @Test
2446 fun `Should call delegate` () {
2547 // given
26- val mock = mock(Cache ::class .java)
27- val cache = FilteringCache (mock, { true }, { true })
48+ val cache = FilteringCache (mockDelegate, { true }, { true })
2849
2950 // when
51+ cache.put(mockRequest, mockEntry)
52+ cache.evict(mockRequest)
53+ cache.evictAll(mockRequest)
54+ cache.evictAll()
55+ cache.get(mockRequest)
56+ cache.stats()
57+ cache.writer<String >(metadata)
3058 cache.close()
3159
3260 // then
33- verify(mock).close()
61+ verify(mockDelegate).put(mockRequest, mockEntry)
62+ verify(mockDelegate).evict(mockRequest)
63+ verify(mockDelegate).evictAll(mockRequest)
64+ verify(mockDelegate).evictAll()
65+ verify(mockDelegate).get(mockRequest)
66+ verify(mockDelegate).stats()
67+ verify(mockDelegate).writer<String >(metadata)
68+ verify(mockDelegate).close()
69+ }
70+
71+ @Test
72+ fun `Should not call delegate when request does not match` () {
73+ // given
74+ val cache = FilteringCache (mockDelegate, { false }, { true })
75+
76+ // when
77+ cache.put(mockRequest, mockEntry)
78+ cache.evict(mockRequest)
79+ cache.evictAll(mockRequest)
80+ cache.get(mockRequest)
81+ cache.writer<String >(metadata)
82+
83+ // then
84+ verifyNoInteractions(mockDelegate)
85+ }
86+
87+ @Test
88+ fun `Should not call delegate when response does not match` () {
89+ // given
90+ val cache = FilteringCache (mockDelegate, { true }, { false })
91+
92+ // when
93+ cache.writer<String >(metadata)
94+
95+ // then
96+ verifyNoInteractions(mockDelegate)
3497 }
3598}
0 commit comments