1
- // env jest
2
-
3
1
const cache = require ( './cache' ) ;
4
2
5
3
describe ( 'cache()' , ( ) => {
6
4
const parent = { id : 1 } ;
7
5
const args = { name : 'hello' } ;
8
- let cacheMock ;
6
+ let cacheMock = { } ;
9
7
10
- beforeAll ( ( ) => {
8
+ beforeEach ( ( ) => {
11
9
cacheMock = {
12
10
get : jest . fn ( ( ) => Promise . resolve ( ) ) ,
11
+ set : jest . fn ( ( key , result ) => Promise . resolve ( result ) ) ,
13
12
} ;
14
13
} ) ;
15
14
@@ -27,7 +26,7 @@ describe('cache()', () => {
27
26
} ) ;
28
27
} ) ;
29
28
30
- describe ( 'cache retrieval ' , ( ) => {
29
+ describe ( 'cache behavior ' , ( ) => {
31
30
const cachedValue = 'cached' ;
32
31
const uncachedValue = 'uncached' ;
33
32
const resolver = cache ( ( ) => uncachedValue ) ;
@@ -37,18 +36,47 @@ describe('cache()', () => {
37
36
38
37
expect . assertions ( 1 ) ;
39
38
40
- resolver ( parent , args , { resolverCache : cacheMock } ) . then ( actual => {
39
+ return resolver ( parent , args , {
40
+ resolverCache : cacheMock ,
41
+ } ) . then ( actual => {
41
42
expect ( actual ) . toEqual ( cachedValue ) ;
42
43
} ) ;
43
44
} ) ;
44
45
46
+ it ( 'does not re-cache cached value' , ( ) => {
47
+ cacheMock . get = jest . fn ( ( ) => Promise . resolve ( cachedValue ) ) ;
48
+
49
+ expect . assertions ( 1 ) ;
50
+
51
+ return resolver ( parent , args , {
52
+ resolverCache : cacheMock ,
53
+ } ) . then ( ( ) => {
54
+ expect ( cacheMock . set ) . toHaveBeenCalledTimes ( 0 ) ;
55
+ } ) ;
56
+ } ) ;
57
+
45
58
it ( 'returns uncached value if the cache returns undefined' , ( ) => {
46
59
cacheMock . get = jest . fn ( ( ) => Promise . resolve ( undefined ) ) ;
47
60
48
- expect . assertions ( 1 ) ;
61
+ expect . assertions ( 2 ) ;
49
62
50
- resolver ( parent , args , { resolverCache : cacheMock } ) . then ( actual => {
63
+ return resolver ( parent , args , {
64
+ resolverCache : cacheMock ,
65
+ } ) . then ( actual => {
51
66
expect ( actual ) . toEqual ( uncachedValue ) ;
67
+ expect ( cacheMock . set ) . toHaveBeenCalledTimes ( 1 ) ;
68
+ } ) ;
69
+ } ) ;
70
+
71
+ it ( 'sets uncached value in cache' , ( ) => {
72
+ cacheMock . get = jest . fn ( ( ) => Promise . resolve ( undefined ) ) ;
73
+
74
+ expect . assertions ( 1 ) ;
75
+
76
+ return resolver ( parent , args , {
77
+ resolverCache : cacheMock ,
78
+ } ) . then ( ( ) => {
79
+ expect ( cacheMock . set ) . toHaveBeenCalledTimes ( 1 ) ;
52
80
} ) ;
53
81
} ) ;
54
82
} ) ;
0 commit comments