@@ -470,6 +470,62 @@ module('Unit | Handler | sqlite-handler', function (hooks) {
470470 assert . strictEqual ( results [ 0 ] . name , 'specific-target' ) ;
471471 } ) ;
472472
473+ test ( 'it reuses the global token for a more specific query when the global token exists' , async function ( assert ) {
474+ const targets = this . server . createList ( 'target' , 3 , { scope } ) ;
475+ let capturedListToken ;
476+ let responseToken = 'specific-list-token' ;
477+
478+ this . server . get ( 'targets' , ( _schema , request ) => {
479+ capturedListToken = request . queryParams . list_token ;
480+ return {
481+ items : targets . map ( ( t ) =>
482+ this . server . serializerOrRegistry . serialize ( t ) ,
483+ ) ,
484+ list_token : responseToken ,
485+ response_type : 'complete' ,
486+ } ;
487+ } ) ;
488+
489+ // Run the specific query first
490+ await store . query ( 'target' , { scope_id : 'some-specific-scope' } ) ;
491+
492+ // Switch the response token and run the global query
493+ responseToken = 'global-list-token' ;
494+ await store . query ( 'target' , { scope_id : 'global' , recursive : true } ) ;
495+
496+ capturedListToken = undefined ;
497+
498+ // Re-run the specific query which has a cached token but should prefer the global token since it exists
499+ await store . query ( 'target' , { scope_id : 'some-specific-scope' } ) ;
500+
501+ assert . strictEqual ( capturedListToken , 'global-list-token' ) ;
502+ } ) ;
503+
504+ test ( 'it uses the specific token when no global token exists' , async function ( assert ) {
505+ const targets = this . server . createList ( 'target' , 3 , { scope } ) ;
506+ let capturedListToken ;
507+
508+ this . server . get ( 'targets' , ( _schema , request ) => {
509+ capturedListToken = request . queryParams . list_token ;
510+ return {
511+ items : targets . map ( ( t ) =>
512+ this . server . serializerOrRegistry . serialize ( t ) ,
513+ ) ,
514+ list_token : 'specific-list-token' ,
515+ response_type : 'complete' ,
516+ } ;
517+ } ) ;
518+
519+ await store . query ( 'target' , { scope_id : 'some-specific-scope' } ) ;
520+
521+ capturedListToken = undefined ;
522+
523+ // Re-run the specific query which should just use the normal specific token since no global token exists
524+ await store . query ( 'target' , { scope_id : 'some-specific-scope' } ) ;
525+
526+ assert . strictEqual ( capturedListToken , 'specific-list-token' ) ;
527+ } ) ;
528+
473529 test ( 'it retries query when invalid list token error occurs' , async function ( assert ) {
474530 let targets = this . server . createList ( 'target' , 5 , { scope } ) ;
475531
0 commit comments