@@ -20,6 +20,244 @@ describe('onRpcRequest', () => {
20
20
} ) ;
21
21
} ) ;
22
22
23
+ describe ( 'setState' , ( ) => {
24
+ it ( 'sets the state to the params' , async ( ) => {
25
+ const { request } = await installSnap ( ) ;
26
+
27
+ expect (
28
+ await request ( {
29
+ method : 'setState' ,
30
+ params : {
31
+ value : {
32
+ items : [ 'foo' ] ,
33
+ } ,
34
+ } ,
35
+ } ) ,
36
+ ) . toRespondWith ( null ) ;
37
+
38
+ expect (
39
+ await request ( {
40
+ method : 'getState' ,
41
+ } ) ,
42
+ ) . toRespondWith ( {
43
+ items : [ 'foo' ] ,
44
+ } ) ;
45
+ } ) ;
46
+
47
+ it ( 'sets the state at a specific key' , async ( ) => {
48
+ const { request } = await installSnap ( ) ;
49
+
50
+ expect (
51
+ await request ( {
52
+ method : 'setState' ,
53
+ params : {
54
+ value : 'foo' ,
55
+ key : 'nested.key' ,
56
+ } ,
57
+ } ) ,
58
+ ) . toRespondWith ( null ) ;
59
+
60
+ expect (
61
+ await request ( {
62
+ method : 'getState' ,
63
+ } ) ,
64
+ ) . toRespondWith ( {
65
+ nested : {
66
+ key : 'foo' ,
67
+ } ,
68
+ } ) ;
69
+ } ) ;
70
+
71
+ it ( 'sets the unencrypted state to the params' , async ( ) => {
72
+ const { request } = await installSnap ( ) ;
73
+
74
+ expect (
75
+ await request ( {
76
+ method : 'setState' ,
77
+ params : {
78
+ value : {
79
+ items : [ 'foo' ] ,
80
+ } ,
81
+ encrypted : false ,
82
+ } ,
83
+ } ) ,
84
+ ) . toRespondWith ( null ) ;
85
+
86
+ expect (
87
+ await request ( {
88
+ method : 'getState' ,
89
+ } ) ,
90
+ ) . toRespondWith ( null ) ;
91
+
92
+ expect (
93
+ await request ( {
94
+ method : 'getState' ,
95
+ params : {
96
+ encrypted : false ,
97
+ } ,
98
+ } ) ,
99
+ ) . toRespondWith ( {
100
+ items : [ 'foo' ] ,
101
+ } ) ;
102
+ } ) ;
103
+
104
+ it ( 'throws if the state is not an object and no key is specified' , async ( ) => {
105
+ const { request } = await installSnap ( ) ;
106
+
107
+ const response = await request ( {
108
+ method : 'setState' ,
109
+ params : {
110
+ value : 'foo' ,
111
+ } ,
112
+ } ) ;
113
+
114
+ expect ( response ) . toRespondWithError (
115
+ expect . objectContaining ( {
116
+ code : - 32602 ,
117
+ message :
118
+ 'Invalid params: Value must be an object if key is not provided.' ,
119
+ } ) ,
120
+ ) ;
121
+ } ) ;
122
+ } ) ;
123
+
124
+ describe ( 'getState' , ( ) => {
125
+ it ( 'returns `null` if no state has been set' , async ( ) => {
126
+ const { request } = await installSnap ( ) ;
127
+
128
+ const response = await request ( {
129
+ method : 'getState' ,
130
+ } ) ;
131
+
132
+ expect ( response ) . toRespondWith ( null ) ;
133
+ } ) ;
134
+
135
+ it ( 'returns the state' , async ( ) => {
136
+ const { request } = await installSnap ( ) ;
137
+
138
+ await request ( {
139
+ method : 'setState' ,
140
+ params : {
141
+ value : {
142
+ items : [ 'foo' ] ,
143
+ } ,
144
+ } ,
145
+ } ) ;
146
+
147
+ const response = await request ( {
148
+ method : 'getState' ,
149
+ } ) ;
150
+
151
+ expect ( response ) . toRespondWith ( {
152
+ items : [ 'foo' ] ,
153
+ } ) ;
154
+ } ) ;
155
+
156
+ it ( 'returns the state at a specific key' , async ( ) => {
157
+ const { request } = await installSnap ( ) ;
158
+
159
+ await request ( {
160
+ method : 'setState' ,
161
+ params : {
162
+ value : {
163
+ nested : {
164
+ key : 'foo' ,
165
+ } ,
166
+ } ,
167
+ } ,
168
+ } ) ;
169
+
170
+ const response = await request ( {
171
+ method : 'getState' ,
172
+ params : {
173
+ key : 'nested.key' ,
174
+ } ,
175
+ } ) ;
176
+
177
+ expect ( response ) . toRespondWith ( 'foo' ) ;
178
+ } ) ;
179
+
180
+ it ( 'returns the unencrypted state' , async ( ) => {
181
+ const { request } = await installSnap ( ) ;
182
+
183
+ await request ( {
184
+ method : 'setState' ,
185
+ params : {
186
+ value : {
187
+ items : [ 'foo' ] ,
188
+ } ,
189
+ encrypted : false ,
190
+ } ,
191
+ } ) ;
192
+
193
+ const response = await request ( {
194
+ method : 'getState' ,
195
+ params : {
196
+ encrypted : false ,
197
+ } ,
198
+ } ) ;
199
+
200
+ expect ( response ) . toRespondWith ( {
201
+ items : [ 'foo' ] ,
202
+ } ) ;
203
+ } ) ;
204
+ } ) ;
205
+
206
+ describe ( 'clearState' , ( ) => {
207
+ it ( 'clears the state' , async ( ) => {
208
+ const { request } = await installSnap ( ) ;
209
+
210
+ await request ( {
211
+ method : 'setState' ,
212
+ params : {
213
+ value : {
214
+ items : [ 'foo' ] ,
215
+ } ,
216
+ } ,
217
+ } ) ;
218
+
219
+ await request ( {
220
+ method : 'clearState' ,
221
+ } ) ;
222
+
223
+ const response = await request ( {
224
+ method : 'getState' ,
225
+ } ) ;
226
+
227
+ expect ( response ) . toRespondWith ( null ) ;
228
+ } ) ;
229
+
230
+ it ( 'clears the unencrypted state' , async ( ) => {
231
+ const { request } = await installSnap ( ) ;
232
+
233
+ await request ( {
234
+ method : 'setState' ,
235
+ params : {
236
+ value : {
237
+ items : [ 'foo' ] ,
238
+ } ,
239
+ encrypted : false ,
240
+ } ,
241
+ } ) ;
242
+
243
+ await request ( {
244
+ method : 'clearState' ,
245
+ params : {
246
+ encrypted : false ,
247
+ } ,
248
+ } ) ;
249
+
250
+ const response = await request ( {
251
+ method : 'getState' ,
252
+ params : {
253
+ encrypted : false ,
254
+ } ,
255
+ } ) ;
256
+
257
+ expect ( response ) . toRespondWith ( null ) ;
258
+ } ) ;
259
+ } ) ;
260
+
23
261
describe ( 'legacy_setState' , ( ) => {
24
262
it ( 'sets the state to the params' , async ( ) => {
25
263
const { request } = await installSnap ( ) ;
0 commit comments