@@ -297,6 +297,7 @@ describe('body matching', () => {
297
297
Headers,
298
298
Response,
299
299
} ) ;
300
+
300
301
const router = new Router ( { Request, Headers } , { routes : [ route ] } ) ;
301
302
const normalizedRequest = await createCallLogFromRequest (
302
303
new Request ( 'http://a.com/' , {
@@ -328,6 +329,51 @@ describe('body matching', () => {
328
329
) . toBe ( false ) ;
329
330
} ) ;
330
331
332
+ describe ( 'multivalue fields' , ( ) => {
333
+ it ( 'match multivalue fields' , async ( ) => {
334
+ const routeBody = new FormData ( ) ;
335
+ routeBody . append ( 'foo' , 'bar' ) ;
336
+ routeBody . append ( 'foo' , 'baz' ) ;
337
+ const route = new Route ( { body : routeBody , response : 200 } ) ;
338
+
339
+ const requestBody = new FormData ( ) ;
340
+ requestBody . append ( 'foo' , 'bar' ) ;
341
+ requestBody . append ( 'foo' , 'baz' ) ;
342
+ expect (
343
+ route . matcher ( {
344
+ url : 'http://a.com/' ,
345
+ options : {
346
+ method : 'POST' ,
347
+ body : requestBody ,
348
+ headers : { 'Content-Type' : 'multipart/form-data' } ,
349
+ } ,
350
+ } ) ,
351
+ ) . toBe ( true ) ;
352
+ } ) ;
353
+
354
+ it ( 'not match mismatched multivalue fields' , async ( ) => {
355
+ const routeBody = new FormData ( ) ;
356
+ routeBody . append ( 'foo' , 'bar' ) ;
357
+ routeBody . append ( 'foo' , 'baz' ) ;
358
+ const route = new Route ( { body : routeBody , response : 200 } ) ;
359
+
360
+ const requestBody = new FormData ( ) ;
361
+ requestBody . append ( 'foo' , 'bar' ) ;
362
+ requestBody . append ( 'foo' , 'baz' ) ;
363
+ requestBody . append ( 'foo' , 'barry' ) ;
364
+ expect (
365
+ route . matcher ( {
366
+ url : 'http://a.com/' ,
367
+ options : {
368
+ method : 'POST' ,
369
+ body : requestBody ,
370
+ headers : { 'Content-Type' : 'multipart/form-data' } ,
371
+ } ,
372
+ } ) ,
373
+ ) . toBe ( false ) ;
374
+ } ) ;
375
+ } ) ;
376
+
331
377
it ( 'should not match if body sent isn’t FormData' , ( ) => {
332
378
const route = new Route ( { body : constructFormData ( ) , response : 200 } ) ;
333
379
expect (
@@ -367,46 +413,37 @@ describe('body matching', () => {
367
413
) . toBe ( true ) ;
368
414
} ) ;
369
415
370
- describe . skip ( 'partial body matching' , ( ) => {
416
+ describe ( 'partial body matching' , ( ) => {
371
417
it ( 'match when missing properties' , ( ) => {
372
418
const route = new Route ( {
373
- body : { ham : 'sandwich' } ,
419
+ body : constructFormData ( ) ,
374
420
matchPartialBody : true ,
375
421
response : 200 ,
376
422
} ) ;
377
- expect (
378
- route . matcher ( {
379
- url : 'http://a.com' ,
380
- options : {
381
- method : 'POST' ,
382
- body : JSON . stringify ( { ham : 'sandwich' , egg : 'mayonaise' } ) ,
383
- } ,
384
- } ) ,
385
- ) . toBe ( true ) ;
386
- } ) ;
387
423
388
- it ( 'match when missing nested properties' , ( ) => {
389
- const route = new Route ( {
390
- body : { meal : { ham : 'sandwich' } } ,
391
- matchPartialBody : true ,
392
- response : 200 ,
393
- } ) ;
424
+ const requestBody = constructFormData ( ) ;
425
+ requestBody . append ( 'fuzz' , 'ball' ) ;
394
426
expect (
395
427
route . matcher ( {
396
428
url : 'http://a.com' ,
397
429
options : {
398
430
method : 'POST' ,
399
- body : JSON . stringify ( {
400
- meal : { ham : 'sandwich' , egg : 'mayonaise' } ,
401
- } ) ,
431
+ body : requestBody ,
402
432
} ,
403
433
} ) ,
404
434
) . toBe ( true ) ;
405
435
} ) ;
406
436
407
- it ( 'not match when properties at wrong depth' , ( ) => {
437
+ it ( 'match when starting subset of multivalue field' , ( ) => {
438
+ const routeBody = new FormData ( ) ;
439
+ routeBody . append ( 'foo' , 'bar' ) ;
440
+ routeBody . append ( 'foo' , 'baz' ) ;
441
+ const requestBody = new FormData ( ) ;
442
+ requestBody . append ( 'foo' , 'bar' ) ;
443
+ requestBody . append ( 'foo' , 'baz' ) ;
444
+ requestBody . append ( 'foo' , 'barry' ) ;
408
445
const route = new Route ( {
409
- body : { ham : 'sandwich' } ,
446
+ body : routeBody ,
410
447
matchPartialBody : true ,
411
448
response : 200 ,
412
449
} ) ;
@@ -415,32 +452,22 @@ describe('body matching', () => {
415
452
url : 'http://a.com' ,
416
453
options : {
417
454
method : 'POST' ,
418
- body : JSON . stringify ( { meal : { ham : 'sandwich' } } ) ,
419
- } ,
420
- } ) ,
421
- ) . toBe ( false ) ;
422
- } ) ;
423
-
424
- it ( 'match when starting subset of array' , ( ) => {
425
- const route = new Route ( {
426
- body : { ham : [ 1 , 2 ] } ,
427
- matchPartialBody : true ,
428
- response : 200 ,
429
- } ) ;
430
- expect (
431
- route . matcher ( {
432
- url : 'http://a.com' ,
433
- options : {
434
- method : 'POST' ,
435
- body : JSON . stringify ( { ham : [ 1 , 2 , 3 ] } ) ,
455
+ body : requestBody ,
436
456
} ,
437
457
} ) ,
438
458
) . toBe ( true ) ;
439
459
} ) ;
440
460
441
461
it ( 'match when subset of array has gaps' , ( ) => {
462
+ const routeBody = new FormData ( ) ;
463
+ routeBody . append ( 'foo' , 'bar' ) ;
464
+ routeBody . append ( 'foo' , 'barry' ) ;
465
+ const requestBody = new FormData ( ) ;
466
+ requestBody . append ( 'foo' , 'bar' ) ;
467
+ requestBody . append ( 'foo' , 'baz' ) ;
468
+ requestBody . append ( 'foo' , 'barry' ) ;
442
469
const route = new Route ( {
443
- body : { ham : [ 1 , 3 ] } ,
470
+ body : routeBody ,
444
471
matchPartialBody : true ,
445
472
response : 200 ,
446
473
} ) ;
@@ -449,7 +476,7 @@ describe('body matching', () => {
449
476
url : 'http://a.com' ,
450
477
options : {
451
478
method : 'POST' ,
452
- body : JSON . stringify ( { ham : [ 1 , 2 , 3 ] } ) ,
479
+ body : requestBody ,
453
480
} ,
454
481
} ) ,
455
482
) . toBe ( true ) ;
0 commit comments