@@ -6,6 +6,7 @@ import consumers from "stream/consumers";
6
6
import { Macro , ThrowsExpectation } from "ava" ;
7
7
import {
8
8
KV_PLUGIN_NAME ,
9
+ MAX_BULK_GET_KEYS ,
9
10
Miniflare ,
10
11
MiniflareOptions ,
11
12
ReplaceWorkersTypes ,
@@ -122,6 +123,107 @@ test("get: returns value", async (t) => {
122
123
const result = await kv . get ( "key" ) ;
123
124
t . is ( result , "value" ) ;
124
125
} ) ;
126
+
127
+ test ( "bulk get: returns value" , async ( t ) => {
128
+ const { kv } = t . context ;
129
+ await kv . put ( "key1" , "value1" ) ;
130
+ const result : any = await kv . get ( [ "key1" , "key2" ] ) ;
131
+ const expectedResult = new Map ( [
132
+ [ "key1" , "value1" ] ,
133
+ [ "key2" , null ] ,
134
+ ] ) ;
135
+
136
+ t . deepEqual ( result , expectedResult ) ;
137
+ } ) ;
138
+
139
+ test ( "bulk get: check max keys" , async ( t ) => {
140
+ const { kv } = t . context ;
141
+ await kv . put ( "key1" , "value1" ) ;
142
+ const keyArray = [ ] ;
143
+ for ( let i = 0 ; i <= MAX_BULK_GET_KEYS ; i ++ ) {
144
+ keyArray . push ( `key${ i } ` ) ;
145
+ }
146
+ try {
147
+ await kv . get ( keyArray ) ;
148
+ } catch ( error : any ) {
149
+ t . is ( error . message , "KV GET_BULK failed: 400 Bad Request" ) ;
150
+ }
151
+ } ) ;
152
+
153
+ test ( "bulk get: request json type" , async ( t ) => {
154
+ const { kv } = t . context ;
155
+ await kv . put ( "key1" , '{"example": "ex"}' ) ;
156
+ await kv . put ( "key2" , "example" ) ;
157
+ let result : any = await kv . get ( [ "key1" ] ) ;
158
+ let expectedResult : any = new Map ( [ [ "key1" , '{"example": "ex"}' ] ] ) ;
159
+ expectedResult = new Map ( [ [ "key1" , '{"example": "ex"}' ] ] ) ;
160
+ t . deepEqual ( result , expectedResult ) ;
161
+
162
+ result = await kv . get ( [ "key1" ] , "json" ) ;
163
+ expectedResult = new Map ( [ [ "key1" , { example : "ex" } ] ] ) ;
164
+ t . deepEqual ( result , expectedResult ) ;
165
+
166
+ try {
167
+ await kv . get ( [ "key1" , "key2" ] , "json" ) ;
168
+ } catch ( error : any ) {
169
+ t . is (
170
+ error . message ,
171
+ "KV GET_BULK failed: 400 At least one of the requested keys corresponds to a non-JSON value"
172
+ ) ;
173
+ }
174
+ } ) ;
175
+
176
+ test ( "bulk get: check metadata" , async ( t ) => {
177
+ const { kv } = t . context ;
178
+ await kv . put ( "key1" , "value1" , {
179
+ expiration : TIME_FUTURE ,
180
+ metadata : { testing : true } ,
181
+ } ) ;
182
+
183
+ await kv . put ( "key2" , "value2" ) ;
184
+ const result : any = await kv . getWithMetadata ( [ "key1" , "key2" ] ) ;
185
+ const expectedResult : any = new Map ( [
186
+ [ "key1" , { value : "value1" , metadata : { testing : true } } ] ,
187
+ [ "key2" , { value : "value2" , metadata : null } ] ,
188
+ ] ) ;
189
+ t . deepEqual ( result , expectedResult ) ;
190
+ } ) ;
191
+
192
+ test ( "bulk get: check metadata with int" , async ( t ) => {
193
+ const { kv } = t . context ;
194
+ await kv . put ( "key1" , "value1" , {
195
+ expiration : TIME_FUTURE ,
196
+ metadata : 123 ,
197
+ } ) ;
198
+
199
+ const result : any = await kv . getWithMetadata ( [ "key1" ] ) ;
200
+ const expectedResult : any = new Map ( [
201
+ [ "key1" , { value : "value1" , metadata : 123 } ] ,
202
+ ] ) ;
203
+ t . deepEqual ( result , expectedResult ) ;
204
+ } ) ;
205
+
206
+ test ( "bulk get: check metadata as string" , async ( t ) => {
207
+ const { kv } = t . context ;
208
+ await kv . put ( "key1" , "value1" , {
209
+ expiration : TIME_FUTURE ,
210
+ metadata : "example" ,
211
+ } ) ;
212
+ const result : any = await kv . getWithMetadata ( [ "key1" ] ) ;
213
+ const expectedResult : any = new Map ( [
214
+ [ "key1" , { value : "value1" , metadata : "example" } ] ,
215
+ ] ) ;
216
+ t . deepEqual ( result , expectedResult ) ;
217
+ } ) ;
218
+
219
+ test ( "bulk get: get with metadata for 404" , async ( t ) => {
220
+ const { kv } = t . context ;
221
+
222
+ const result : any = await kv . getWithMetadata ( [ "key1" ] ) ;
223
+ const expectedResult : any = new Map ( [ [ "key1" , null ] ] ) ;
224
+ t . deepEqual ( result , expectedResult ) ;
225
+ } ) ;
226
+
125
227
test ( "get: returns null for non-existent keys" , async ( t ) => {
126
228
const { kv } = t . context ;
127
229
t . is ( await kv . get ( "key" ) , null ) ;
0 commit comments