8
8
restoreSaved ,
9
9
defLen ,
10
10
} from './helper' ;
11
+ import { autorun , configure , makeObservable , action , observable } from 'mobx' ;
11
12
12
13
describe ( 'strict-async-storage' , ( ) => {
13
14
jest
@@ -20,29 +21,157 @@ describe('strict-async-storage', () => {
20
21
. mockImplementation ( ( name : string , value : string ) => {
21
22
setSaved ( name , value ) ;
22
23
} ) ;
23
- oneSetTest ( 'default sync' , new StrictAsyncStorage ( defaults ) ) ;
24
-
25
- oneSetTest (
26
- 'cunstom async' ,
27
- new StrictAsyncStorage ( defaults , {
28
- map : new Map ( ) ,
29
- driver : ( ) => new AsyncDriver ( ) ,
30
- } ) ,
31
- true
32
- ) ;
24
+
25
+ runTest ( 'sync driver' , new StrictAsyncStorage ( defaults ) ) ;
26
+
27
+ runTest ( 'async driver' , new StrictAsyncStorage ( defaults , new AsyncDriver ( ) ) ) ;
28
+
29
+ describe ( 'mobx' , ( ) => {
30
+ configure ( {
31
+ enforceActions : 'always' ,
32
+ computedRequiresReaction : true ,
33
+ reactionRequiresObservable : true ,
34
+ // observableRequiresReaction: true,
35
+ // disableErrorBoundaries: true,
36
+ } ) ;
37
+
38
+ let strictAsyncStorage : StrictAsyncStorage <
39
+ {
40
+ user : string ;
41
+ no : number ;
42
+ enable : boolean ;
43
+ data : { } ;
44
+ } ,
45
+ StorageName ,
46
+ AsyncDriver
47
+ > ;
48
+ let view : jest . Mock ;
49
+
50
+ beforeEach ( async ( ) => {
51
+ restoreSaved ( ) ;
52
+
53
+ strictAsyncStorage = makeObservable (
54
+ new StrictAsyncStorage ( defaults , new AsyncDriver ( ) ) ,
55
+ {
56
+ //@ts -expect-error
57
+ _map : observable ,
58
+ _initialized : observable ,
59
+ _disposed : observable ,
60
+ setMap : action ,
61
+ batchMap : action ,
62
+ setInitialized : action ,
63
+ setDisposed : action ,
64
+ }
65
+ ) ;
66
+ await strictAsyncStorage . initialize ( ) ;
67
+
68
+ view = jest . fn ( ( ) => {
69
+ try {
70
+ return `user:${ strictAsyncStorage . getItem (
71
+ StorageName . user
72
+ ) } ,no:${ strictAsyncStorage . getItem (
73
+ StorageName . no
74
+ ) } ,enable:${ strictAsyncStorage . getItem (
75
+ StorageName . enable
76
+ ) } ,data:${ strictAsyncStorage . getItem ( StorageName . data ) } ,`;
77
+ } catch ( error ) {
78
+ return error ;
79
+ }
80
+ } ) ;
81
+
82
+ autorun ( view ) ;
83
+ view . mockClear ( ) ;
84
+ } ) ;
85
+
86
+ it ( 'test setItem' , async ( ) => {
87
+ const user = 'test001' ;
88
+ await strictAsyncStorage . setItem ( StorageName . user , user ) ;
89
+ expect ( view ) . toBeCalledTimes ( 1 ) ;
90
+ expect ( view ) . lastReturnedWith (
91
+ `user:${ user } ,no:${ 123 } ,enable:${ defaults [ StorageName . enable ] } ,data:${ {
92
+ name : 'John' ,
93
+ age : 12 ,
94
+ } } ,`
95
+ ) ;
96
+
97
+ await strictAsyncStorage . setItem ( StorageName . user , undefined as any ) ;
98
+ expect ( view ) . toBeCalledTimes ( 2 ) ;
99
+ expect ( view ) . lastReturnedWith (
100
+ `user:${ undefined } ,no:${ 123 } ,enable:${
101
+ defaults [ StorageName . enable ]
102
+ } ,data:${ {
103
+ name : 'John' ,
104
+ age : 12 ,
105
+ } } ,`
106
+ ) ;
107
+
108
+ await strictAsyncStorage . setItem ( StorageName . user , null as any ) ;
109
+ expect ( view ) . toBeCalledTimes ( 3 ) ;
110
+ expect ( view ) . lastReturnedWith (
111
+ `user:${ defaults [ StorageName . user ] } ,no:${ 123 } ,enable:${
112
+ defaults [ StorageName . enable ]
113
+ } ,data:${ {
114
+ name : 'John' ,
115
+ age : 12 ,
116
+ } } ,`
117
+ ) ;
118
+
119
+ await expect (
120
+ strictAsyncStorage . setItem ( 'other' as any , null as any )
121
+ ) . rejects . toThrowError ( RangeError ) ;
122
+ expect ( view ) . toBeCalledTimes ( 3 ) ;
123
+ } ) ;
124
+
125
+ it ( 'test resetItem' , async ( ) => {
126
+ await strictAsyncStorage . resetItem ( StorageName . no ) ;
127
+ expect ( view ) . toBeCalledTimes ( 1 ) ;
128
+ expect ( view ) . lastReturnedWith (
129
+ `user:${ 'user001' } ,no:${ defaults [ StorageName . no ] } ,enable:${
130
+ defaults [ StorageName . enable ]
131
+ } ,data:${ {
132
+ name : 'John' ,
133
+ age : 12 ,
134
+ } } ,`
135
+ ) ;
136
+
137
+ await expect (
138
+ strictAsyncStorage . resetItem ( 'other' as any )
139
+ ) . rejects . toThrowError ( RangeError ) ;
140
+ expect ( view ) . toBeCalledTimes ( 1 ) ;
141
+ } ) ;
142
+
143
+ it ( 'test resetAll' , async ( ) => {
144
+ await strictAsyncStorage . resetAll ( ) ;
145
+ expect ( view ) . toBeCalledTimes ( 1 ) ;
146
+ expect ( view ) . lastReturnedWith (
147
+ `user:${ defaults [ StorageName . user ] } ,no:${
148
+ defaults [ StorageName . no ]
149
+ } ,enable:${ defaults [ StorageName . enable ] } ,data:${
150
+ defaults [ StorageName . data ]
151
+ } ,`
152
+ ) ;
153
+ } ) ;
154
+ } ) ;
33
155
} ) ;
34
156
35
- function oneSetTest < TDriver extends DriverInterface = Storage > (
157
+ function runTest < TDriver extends DriverInterface = Storage > (
36
158
testName : string | number | Function | jest . FunctionLike ,
37
- strictAsyncStorage : StrictAsyncStorage < typeof defaults , StorageName , TDriver > ,
38
- handleDispose = false
159
+ strictAsyncStorage : StrictAsyncStorage < typeof defaults , StorageName , TDriver >
39
160
) {
40
161
describe ( testName , ( ) => {
41
162
restoreSaved ( ) ;
42
163
43
- it ( 'test init' , async ( ) => {
44
- await strictAsyncStorage . init ( ) ;
164
+ it ( 'test initialize' , async ( ) => {
165
+ expect ( strictAsyncStorage . initialized ) . toBeFalsy ( ) ;
166
+ await strictAsyncStorage . initialize ( ) ;
167
+ expect ( strictAsyncStorage . initialized ) . toBeTruthy ( ) ;
45
168
expect ( strictAsyncStorage . defaults ) . toEqual ( defaults ) ;
169
+
170
+ await expect (
171
+ async ( ) => await strictAsyncStorage . initialize ( )
172
+ ) . rejects . toThrowError (
173
+ '[strict-async-storage] Invalid operation. This has been initialized.'
174
+ ) ;
46
175
} ) ;
47
176
48
177
it ( 'test length' , async ( ) => {
@@ -116,20 +245,18 @@ function oneSetTest<TDriver extends DriverInterface = Storage>(
116
245
} ) ;
117
246
118
247
it ( 'test dispose' , ( ) => {
119
- if ( handleDispose ) {
120
- const handler = jest . fn ( ( ) => {
121
- expect ( ( ) =>
122
- strictAsyncStorage . getItem ( StorageName . user )
123
- ) . not . toThrowError ( ) ;
124
- } ) ;
125
- strictAsyncStorage . dispose ( handler ) ;
126
- expect ( handler ) . toBeCalled ( ) ;
127
- } else {
128
- strictAsyncStorage . dispose ( ) ;
129
- }
130
- expect ( strictAsyncStorage . length ) . toBe ( 0 ) ;
248
+ expect ( strictAsyncStorage . disposed ) . toBeFalsy ( ) ;
249
+ strictAsyncStorage . dispose ( ) ;
250
+ expect ( strictAsyncStorage . disposed ) . toBeTruthy ( ) ;
251
+ expect ( ( ) => strictAsyncStorage . dispose ( ) ) . toThrowError (
252
+ '[strict-async-storage] Invalid operation. This has been disposed.'
253
+ ) ;
254
+
255
+ expect ( ( ) => strictAsyncStorage . length ) . toThrowError (
256
+ '[strict-async-storage] Invalid operation. Not initialized yet, failed to initialize or has been disposed.'
257
+ ) ;
131
258
expect ( ( ) => strictAsyncStorage . getItem ( StorageName . user ) ) . toThrowError (
132
- RangeError
259
+ '[strict-async-storage] Invalid operation. Not initialized yet, failed to initialize or has been disposed.'
133
260
) ;
134
261
} ) ;
135
262
} ) ;
0 commit comments