@@ -6,6 +6,7 @@ import consumers from "stream/consumers";
66import { Macro , ThrowsExpectation } from "ava" ;
77import {
88 KV_PLUGIN_NAME ,
9+ MAX_BULK_GET_KEYS ,
910 Miniflare ,
1011 MiniflareOptions ,
1112 ReplaceWorkersTypes ,
@@ -122,6 +123,107 @@ test("get: returns value", async (t) => {
122123 const result = await kv . get ( "key" ) ;
123124 t . is ( result , "value" ) ;
124125} ) ;
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+
125227test ( "get: returns null for non-existent keys" , async ( t ) => {
126228 const { kv } = t . context ;
127229 t . is ( await kv . get ( "key" ) , null ) ;
0 commit comments