@@ -10932,6 +10932,42 @@ describe("a router", () => {
10932
10932
expect ( childLoaderRequest . url ) . toBe ( "http://localhost/child" ) ;
10933
10933
} ) ;
10934
10934
10935
+ it ( "should support a requestContext passed to loaders and actions" , async ( ) => {
10936
+ let requestContext = { sessionId : "12345" } ;
10937
+ let rootStub = jest . fn ( ( ) => "ROOT" ) ;
10938
+ let childStub = jest . fn ( ( ) => "CHILD" ) ;
10939
+ let actionStub = jest . fn ( ( ) => "CHILD ACTION" ) ;
10940
+ let arg = ( s ) => s . mock . calls [ 0 ] [ 0 ] ;
10941
+ let { query } = createStaticHandler ( [
10942
+ {
10943
+ id : "root" ,
10944
+ path : "/" ,
10945
+ loader : rootStub ,
10946
+ children : [
10947
+ {
10948
+ id : "child" ,
10949
+ path : "child" ,
10950
+ action : actionStub ,
10951
+ loader : childStub ,
10952
+ } ,
10953
+ ] ,
10954
+ } ,
10955
+ ] ) ;
10956
+
10957
+ await query ( createRequest ( "/child" ) , { requestContext } ) ;
10958
+ expect ( arg ( rootStub ) . context . sessionId ) . toBe ( "12345" ) ;
10959
+ expect ( arg ( childStub ) . context . sessionId ) . toBe ( "12345" ) ;
10960
+
10961
+ actionStub . mockClear ( ) ;
10962
+ rootStub . mockClear ( ) ;
10963
+ childStub . mockClear ( ) ;
10964
+
10965
+ await query ( createSubmitRequest ( "/child" ) , { requestContext } ) ;
10966
+ expect ( arg ( actionStub ) . context . sessionId ) . toBe ( "12345" ) ;
10967
+ expect ( arg ( rootStub ) . context . sessionId ) . toBe ( "12345" ) ;
10968
+ expect ( arg ( childStub ) . context . sessionId ) . toBe ( "12345" ) ;
10969
+ } ) ;
10970
+
10935
10971
describe ( "statusCode" , ( ) => {
10936
10972
it ( "should expose a 200 status code by default" , async ( ) => {
10937
10973
let { query } = createStaticHandler ( [
@@ -11254,7 +11290,7 @@ describe("a router", () => {
11254
11290
isError ? Promise . reject ( data ) : Promise . resolve ( data ) ,
11255
11291
} ,
11256
11292
] ) ;
11257
- return handler . queryRoute ( req , routeId ) ;
11293
+ return handler . queryRoute ( req , { routeId } ) ;
11258
11294
}
11259
11295
11260
11296
return {
@@ -11307,7 +11343,9 @@ describe("a router", () => {
11307
11343
data = await queryRoute ( createRequest ( "/parent?index" ) ) ;
11308
11344
expect ( data ) . toBe ( "PARENT INDEX LOADER" ) ;
11309
11345
11310
- data = await queryRoute ( createRequest ( "/parent/child" ) , "child" ) ;
11346
+ data = await queryRoute ( createRequest ( "/parent/child" ) , {
11347
+ routeId : "child" ,
11348
+ } ) ;
11311
11349
expect ( data ) . toBe ( "CHILD LOADER" ) ;
11312
11350
} ) ;
11313
11351
@@ -11324,19 +11362,27 @@ describe("a router", () => {
11324
11362
let data ;
11325
11363
11326
11364
// Layout route
11327
- data = await queryRoute ( createRequest ( "/parent" ) , "parent" ) ;
11365
+ data = await queryRoute ( createRequest ( "/parent" ) , {
11366
+ routeId : "parent" ,
11367
+ } ) ;
11328
11368
expect ( data ) . toBe ( "PARENT LOADER" ) ;
11329
11369
11330
11370
// Index route
11331
- data = await queryRoute ( createRequest ( "/parent" ) , "parentIndex" ) ;
11371
+ data = await queryRoute ( createRequest ( "/parent" ) , {
11372
+ routeId : "parentIndex" ,
11373
+ } ) ;
11332
11374
expect ( data ) . toBe ( "PARENT INDEX LOADER" ) ;
11333
11375
11334
11376
// Parent in nested route
11335
- data = await queryRoute ( createRequest ( "/parent/child" ) , "parent" ) ;
11377
+ data = await queryRoute ( createRequest ( "/parent/child" ) , {
11378
+ routeId : "parent" ,
11379
+ } ) ;
11336
11380
expect ( data ) . toBe ( "PARENT LOADER" ) ;
11337
11381
11338
11382
// Child in nested route
11339
- data = await queryRoute ( createRequest ( "/parent/child" ) , "child" ) ;
11383
+ data = await queryRoute ( createRequest ( "/parent/child" ) , {
11384
+ routeId : "child" ,
11385
+ } ) ;
11340
11386
expect ( data ) . toBe ( "CHILD LOADER" ) ;
11341
11387
11342
11388
// Non-undefined falsey values should count
@@ -11464,19 +11510,27 @@ describe("a router", () => {
11464
11510
let data ;
11465
11511
11466
11512
// Layout route
11467
- data = await queryRoute ( createRequest ( "/base/parent" ) , "parent" ) ;
11513
+ data = await queryRoute ( createRequest ( "/base/parent" ) , {
11514
+ routeId : "parent" ,
11515
+ } ) ;
11468
11516
expect ( data ) . toBe ( "PARENT LOADER" ) ;
11469
11517
11470
11518
// Index route
11471
- data = await queryRoute ( createRequest ( "/base/parent" ) , "parentIndex" ) ;
11519
+ data = await queryRoute ( createRequest ( "/base/parent" ) , {
11520
+ routeId : "parentIndex" ,
11521
+ } ) ;
11472
11522
expect ( data ) . toBe ( "PARENT INDEX LOADER" ) ;
11473
11523
11474
11524
// Parent in nested route
11475
- data = await queryRoute ( createRequest ( "/base/parent/child" ) , "parent" ) ;
11525
+ data = await queryRoute ( createRequest ( "/base/parent/child" ) , {
11526
+ routeId : "parent" ,
11527
+ } ) ;
11476
11528
expect ( data ) . toBe ( "PARENT LOADER" ) ;
11477
11529
11478
11530
// Child in nested route
11479
- data = await queryRoute ( createRequest ( "/base/parent/child" ) , "child" ) ;
11531
+ data = await queryRoute ( createRequest ( "/base/parent/child" ) , {
11532
+ routeId : "child" ,
11533
+ } ) ;
11480
11534
expect ( data ) . toBe ( "CHILD LOADER" ) ;
11481
11535
11482
11536
// Non-undefined falsey values should count
@@ -11494,19 +11548,27 @@ describe("a router", () => {
11494
11548
let data ;
11495
11549
11496
11550
// Layout route
11497
- data = await queryRoute ( createSubmitRequest ( "/parent" ) , "parent" ) ;
11551
+ data = await queryRoute ( createSubmitRequest ( "/parent" ) , {
11552
+ routeId : "parent" ,
11553
+ } ) ;
11498
11554
expect ( data ) . toBe ( "PARENT ACTION" ) ;
11499
11555
11500
11556
// Index route
11501
- data = await queryRoute ( createSubmitRequest ( "/parent" ) , "parentIndex" ) ;
11557
+ data = await queryRoute ( createSubmitRequest ( "/parent" ) , {
11558
+ routeId : "parentIndex" ,
11559
+ } ) ;
11502
11560
expect ( data ) . toBe ( "PARENT INDEX ACTION" ) ;
11503
11561
11504
11562
// Parent in nested route
11505
- data = await queryRoute ( createSubmitRequest ( "/parent/child" ) , "parent" ) ;
11563
+ data = await queryRoute ( createSubmitRequest ( "/parent/child" ) , {
11564
+ routeId : "parent" ,
11565
+ } ) ;
11506
11566
expect ( data ) . toBe ( "PARENT ACTION" ) ;
11507
11567
11508
11568
// Child in nested route
11509
- data = await queryRoute ( createSubmitRequest ( "/parent/child" ) , "child" ) ;
11569
+ data = await queryRoute ( createSubmitRequest ( "/parent/child" ) , {
11570
+ routeId : "child" ,
11571
+ } ) ;
11510
11572
expect ( data ) . toBe ( "CHILD ACTION" ) ;
11511
11573
11512
11574
// Non-undefined falsey values should count
@@ -11525,19 +11587,19 @@ describe("a router", () => {
11525
11587
11526
11588
data = await queryRoute (
11527
11589
createSubmitRequest ( "/parent" , { method : "PUT" } ) ,
11528
- "parent"
11590
+ { routeId : "parent" }
11529
11591
) ;
11530
11592
expect ( data ) . toBe ( "PARENT ACTION" ) ;
11531
11593
11532
11594
data = await queryRoute (
11533
11595
createSubmitRequest ( "/parent" , { method : "PATCH" } ) ,
11534
- "parent"
11596
+ { routeId : "parent" }
11535
11597
) ;
11536
11598
expect ( data ) . toBe ( "PARENT ACTION" ) ;
11537
11599
11538
11600
data = await queryRoute (
11539
11601
createSubmitRequest ( "/parent" , { method : "DELETE" } ) ,
11540
- "parent"
11602
+ { routeId : "parent" }
11541
11603
) ;
11542
11604
expect ( data ) . toBe ( "PARENT ACTION" ) ;
11543
11605
} ) ;
@@ -11697,10 +11759,9 @@ describe("a router", () => {
11697
11759
] ,
11698
11760
} ,
11699
11761
] ) ;
11700
- let response = await queryRoute (
11701
- createRequest ( "/parent/child" ) ,
11702
- "child"
11703
- ) ;
11762
+ let response = await queryRoute ( createRequest ( "/parent/child" ) , {
11763
+ routeId : "child" ,
11764
+ } ) ;
11704
11765
expect ( response instanceof Response ) . toBe ( true ) ;
11705
11766
expect ( ( response as Response ) . status ) . toBe ( 302 ) ;
11706
11767
expect ( ( response as Response ) . headers . get ( "Location" ) ) . toBe ( "/parent" ) ;
@@ -11724,10 +11785,9 @@ describe("a router", () => {
11724
11785
] ,
11725
11786
} ,
11726
11787
] ) ;
11727
- let response = await queryRoute (
11728
- createSubmitRequest ( "/parent/child" ) ,
11729
- "child"
11730
- ) ;
11788
+ let response = await queryRoute ( createSubmitRequest ( "/parent/child" ) , {
11789
+ routeId : "child" ,
11790
+ } ) ;
11731
11791
expect ( response instanceof Response ) . toBe ( true ) ;
11732
11792
expect ( ( response as Response ) . status ) . toBe ( 302 ) ;
11733
11793
expect ( ( response as Response ) . headers . get ( "Location" ) ) . toBe ( "/parent" ) ;
@@ -11749,7 +11809,9 @@ describe("a router", () => {
11749
11809
loader : ( ) => redirect ( url ) ,
11750
11810
} ,
11751
11811
] ) ;
11752
- let response = await handler . queryRoute ( createRequest ( "/" ) , "root" ) ;
11812
+ let response = await handler . queryRoute ( createRequest ( "/" ) , {
11813
+ routeId : "root" ,
11814
+ } ) ;
11753
11815
expect ( response instanceof Response ) . toBe ( true ) ;
11754
11816
expect ( ( response as Response ) . status ) . toBe ( 302 ) ;
11755
11817
expect ( ( response as Response ) . headers . get ( "Location" ) ) . toBe ( url ) ;
@@ -11766,7 +11828,7 @@ describe("a router", () => {
11766
11828
} ,
11767
11829
] ) ;
11768
11830
let request = createRequest ( "/" ) ;
11769
- let data = await queryRoute ( request , "root" ) ;
11831
+ let data = await queryRoute ( request , { routeId : "root" } ) ;
11770
11832
expect ( data instanceof Response ) . toBe ( true ) ;
11771
11833
expect ( await data . json ( ) ) . toEqual ( { key : "value" } ) ;
11772
11834
} ) ;
@@ -11781,7 +11843,7 @@ describe("a router", () => {
11781
11843
} ,
11782
11844
] ) ;
11783
11845
let request = createSubmitRequest ( "/" ) ;
11784
- let data = await queryRoute ( request , "root" ) ;
11846
+ let data = await queryRoute ( request , { routeId : "root" } ) ;
11785
11847
expect ( data instanceof Response ) . toBe ( true ) ;
11786
11848
expect ( await data . json ( ) ) . toEqual ( { key : "value" } ) ;
11787
11849
} ) ;
@@ -11801,7 +11863,7 @@ describe("a router", () => {
11801
11863
} ) ;
11802
11864
let e ;
11803
11865
try {
11804
- let statePromise = queryRoute ( request , "root" ) ;
11866
+ let statePromise = queryRoute ( request , { routeId : "root" } ) ;
11805
11867
controller . abort ( ) ;
11806
11868
// This should resolve even though we never resolved the loader
11807
11869
await statePromise ;
@@ -11826,7 +11888,7 @@ describe("a router", () => {
11826
11888
} ) ;
11827
11889
let e ;
11828
11890
try {
11829
- let statePromise = queryRoute ( request , "root" ) ;
11891
+ let statePromise = queryRoute ( request , { routeId : "root" } ) ;
11830
11892
controller . abort ( ) ;
11831
11893
// This should resolve even though we never resolved the loader
11832
11894
await statePromise ;
@@ -11841,7 +11903,7 @@ describe("a router", () => {
11841
11903
let request = createRequest ( "/" , { signal : undefined } ) ;
11842
11904
let e ;
11843
11905
try {
11844
- await queryRoute ( request , "index" ) ;
11906
+ await queryRoute ( request , { routeId : "index" } ) ;
11845
11907
} catch ( _e ) {
11846
11908
e = _e ;
11847
11909
}
@@ -11850,6 +11912,38 @@ describe("a router", () => {
11850
11912
) ;
11851
11913
} ) ;
11852
11914
11915
+ it ( "should support a requestContext passed to loaders and actions" , async ( ) => {
11916
+ let requestContext = { sessionId : "12345" } ;
11917
+ let childStub = jest . fn ( ( ) => "CHILD" ) ;
11918
+ let actionStub = jest . fn ( ( ) => "CHILD ACTION" ) ;
11919
+ let arg = ( s ) => s . mock . calls [ 0 ] [ 0 ] ;
11920
+ let { queryRoute } = createStaticHandler ( [
11921
+ {
11922
+ path : "/" ,
11923
+ children : [
11924
+ {
11925
+ id : "child" ,
11926
+ path : "child" ,
11927
+ action : actionStub ,
11928
+ loader : childStub ,
11929
+ } ,
11930
+ ] ,
11931
+ } ,
11932
+ ] ) ;
11933
+
11934
+ await queryRoute ( createRequest ( "/child" ) , {
11935
+ routeId : "child" ,
11936
+ requestContext,
11937
+ } ) ;
11938
+ expect ( arg ( childStub ) . context . sessionId ) . toBe ( "12345" ) ;
11939
+
11940
+ await queryRoute ( createSubmitRequest ( "/child" ) , {
11941
+ routeId : "child" ,
11942
+ requestContext,
11943
+ } ) ;
11944
+ expect ( arg ( actionStub ) . context . sessionId ) . toBe ( "12345" ) ;
11945
+ } ) ;
11946
+
11853
11947
describe ( "Errors with Status Codes" , ( ) => {
11854
11948
/* eslint-disable jest/no-conditional-expect */
11855
11949
let { queryRoute } = createStaticHandler ( [
@@ -11887,7 +11981,7 @@ describe("a router", () => {
11887
11981
11888
11982
it ( "should handle not found routeIds with a 403 Response" , async ( ) => {
11889
11983
try {
11890
- await queryRoute ( createRequest ( "/" ) , "junk" ) ;
11984
+ await queryRoute ( createRequest ( "/" ) , { routeId : "junk" } ) ;
11891
11985
expect ( false ) . toBe ( true ) ;
11892
11986
} catch ( data ) {
11893
11987
expect ( isRouteErrorResponse ( data ) ) . toBe ( true ) ;
@@ -11899,7 +11993,7 @@ describe("a router", () => {
11899
11993
}
11900
11994
11901
11995
try {
11902
- await queryRoute ( createSubmitRequest ( "/" ) , "junk" ) ;
11996
+ await queryRoute ( createSubmitRequest ( "/" ) , { routeId : "junk" } ) ;
11903
11997
expect ( false ) . toBe ( true ) ;
11904
11998
} catch ( data ) {
11905
11999
expect ( isRouteErrorResponse ( data ) ) . toBe ( true ) ;
@@ -11913,7 +12007,7 @@ describe("a router", () => {
11913
12007
11914
12008
it ( "should handle missing loaders with a 400 Response" , async ( ) => {
11915
12009
try {
11916
- await queryRoute ( createRequest ( "/" ) , "root" ) ;
12010
+ await queryRoute ( createRequest ( "/" ) , { routeId : "root" } ) ;
11917
12011
expect ( false ) . toBe ( true ) ;
11918
12012
} catch ( data ) {
11919
12013
expect ( isRouteErrorResponse ( data ) ) . toBe ( true ) ;
@@ -11930,7 +12024,7 @@ describe("a router", () => {
11930
12024
11931
12025
it ( "should handle missing actions with a 405 Response" , async ( ) => {
11932
12026
try {
11933
- await queryRoute ( createSubmitRequest ( "/" ) , "root" ) ;
12027
+ await queryRoute ( createSubmitRequest ( "/" ) , { routeId : "root" } ) ;
11934
12028
expect ( false ) . toBe ( true ) ;
11935
12029
} catch ( data ) {
11936
12030
expect ( isRouteErrorResponse ( data ) ) . toBe ( true ) ;
@@ -11947,7 +12041,9 @@ describe("a router", () => {
11947
12041
11948
12042
it ( "should handle unsupported methods with a 405 Response" , async ( ) => {
11949
12043
try {
11950
- await queryRoute ( createRequest ( "/" , { method : "OPTIONS" } ) , "root" ) ;
12044
+ await queryRoute ( createRequest ( "/" , { method : "OPTIONS" } ) , {
12045
+ routeId : "root" ,
12046
+ } ) ;
11951
12047
expect ( false ) . toBe ( true ) ;
11952
12048
} catch ( data ) {
11953
12049
expect ( isRouteErrorResponse ( data ) ) . toBe ( true ) ;
0 commit comments