@@ -3,27 +3,18 @@ import FreeeCryptor from '../../../sdk/services/freee-cryptor'
33
44const key = Buffer . from ( 'aaa' , 'utf8' )
55
6- const mockGetWhenCreated = jest
7- . fn ( )
8- . mockReturnValueOnce ( [ key ] )
9- . mockRejectedValue ( new Error ( 'Must not be called' ) )
10-
11- const mockGetWhenNotCreated = jest
12- . fn ( )
13- . mockRejectedValueOnce ( new Error ( 'Must not be called' ) )
14- . mockReturnValueOnce ( [ key ] )
15- . mockRejectedValue ( new Error ( 'Must not be called' ) )
16-
17- let isCreated = true
6+ const mockDownload = jest . fn ( )
7+ const mockExists = jest . fn ( )
8+ const mockSave = jest . fn ( )
189
1910jest . mock ( 'firebase-admin' , ( ) => {
2011 return {
2112 storage : ( ) => ( {
2213 bucket : ( path : string ) => ( {
2314 file : ( path : string ) => ( {
24- download : async ( ) =>
25- isCreated ? mockGetWhenCreated ( ) : mockGetWhenNotCreated ( ) ,
26- save : ( ) => ( isCreated = true )
15+ download : async ( ) => mockDownload ( ) ,
16+ exists : async ( ) => mockExists ( ) ,
17+ save : async ( ) => mockSave ( )
2718 } )
2819 } )
2920 } )
@@ -36,26 +27,78 @@ const keyFileName = '201907'
3627
3728describe ( 'FreeeCryptor' , ( ) => {
3829 describe ( 'getKey' , ( ) => {
39- describe ( 'when crypto key is already created' , ( ) => {
30+ beforeEach ( async ( ) => {
31+ mockDownload . mockReset ( )
32+ mockDownload
33+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
34+ mockExists . mockReset ( )
35+ mockExists
36+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
37+ mockSave . mockReset ( )
38+ mockSave
39+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
40+ } )
41+
42+ it ( 'when crypto key is already created' , async ( ) => {
43+ mockDownload . mockReset ( )
44+ mockDownload
45+ . mockReturnValueOnce ( [ key ] )
46+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
47+
4048 const cryptor = new FreeeCryptor ( bucket )
49+ expect ( await cryptor [ 'getKey' ] ( keyFileName ) ) . toStrictEqual ( key )
50+ // return key from cache(no exception)
51+ expect ( await cryptor [ 'getKey' ] ( keyFileName ) ) . toStrictEqual ( key )
52+ } )
4153
42- it ( 'return key from storage' , async ( ) => {
43- expect ( await cryptor [ 'getKey' ] ( keyFileName ) ) . toStrictEqual ( key )
44- } )
45- it ( 'return key from cache(no exception)' , async ( ) => {
46- expect ( await cryptor [ 'getKey' ] ( keyFileName ) ) . toStrictEqual ( key )
47- } )
54+ it ( 'when crypto key is not created yet' , async ( ) => {
55+ mockDownload . mockReset ( )
56+ mockDownload
57+ . mockRejectedValueOnce ( new Error ( 'crypto key does not exist' ) )
58+ . mockReturnValueOnce ( [ key ] )
59+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
60+ mockExists . mockReset ( )
61+ mockExists
62+ . mockReturnValueOnce ( [ false ] )
63+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
64+ mockSave . mockReset ( )
65+ mockSave
66+ . mockReturnValueOnce ( true )
67+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
68+
69+ const cryptor = new FreeeCryptor ( bucket )
70+ expect ( await cryptor [ 'getKey' ] ( keyFileName ) ) . toStrictEqual ( key )
71+ // return key from cache(no exception)
72+ expect ( await cryptor [ 'getKey' ] ( keyFileName ) ) . toStrictEqual ( key )
4873 } )
4974
50- describe ( 'when crypto key is not created yet' , ( ) => {
75+ it ( 'when crypto key is in error' , async ( ) => {
76+ mockDownload . mockReset ( )
77+ mockDownload
78+ . mockRejectedValueOnce ( new Error ( 'Unknown download error' ) )
79+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
80+ mockExists . mockReset ( )
81+ mockExists
82+ . mockRejectedValueOnce ( new Error ( 'Unknown exists error' ) )
83+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
84+
5185 const cryptor = new FreeeCryptor ( bucket )
52- isCreated = false
53- it ( 'return key from storage after create key' , async ( ) => {
54- expect ( await cryptor [ 'getKey' ] ( keyFileName ) ) . toStrictEqual ( key )
55- } )
56- it ( 'return key from cache(no exception)' , async ( ) => {
57- expect ( await cryptor [ 'getKey' ] ( keyFileName ) ) . toStrictEqual ( key )
58- } )
86+ await expect ( cryptor [ 'getKey' ] ( keyFileName ) ) . rejects . toThrow ( 'Unknown exists error' )
87+ } )
88+
89+ it ( 'error getting crypto key only once' , async ( ) => {
90+ mockDownload . mockReset ( )
91+ mockDownload
92+ . mockRejectedValueOnce ( new Error ( 'Unknown error' ) )
93+ . mockReturnValueOnce ( [ key ] )
94+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
95+ mockExists . mockReset ( )
96+ mockExists
97+ . mockReturnValueOnce ( [ true ] )
98+ . mockRejectedValue ( new Error ( 'Must not be called' ) )
99+
100+ const cryptor = new FreeeCryptor ( bucket )
101+ expect ( await cryptor [ 'getKey' ] ( keyFileName ) ) . toStrictEqual ( key )
59102 } )
60103 } )
61104} )
0 commit comments