@@ -14,7 +14,7 @@ import {
14
14
import { msToNumber , tsToMs } from '@temporalio/common/lib/time' ;
15
15
import { decode as payloadDecode , decodeFromPayloadsAtIndex } from '@temporalio/common/lib/internal-non-workflow' ;
16
16
17
- import { condition , defineQuery , setHandler , sleep } from '@temporalio/workflow' ;
17
+ import { condition , defineQuery , defineSignal , setDefaultQueryHandler , setHandler , sleep } from '@temporalio/workflow' ;
18
18
import { configurableHelpers , createTestWorkflowBundle } from './helpers-integration' ;
19
19
import * as activities from './activities' ;
20
20
import * as workflows from './workflows' ;
@@ -697,3 +697,57 @@ test('Query does not cause condition to be triggered', configMacro, async (t, co
697
697
// Worker did not crash
698
698
t . pass ( ) ;
699
699
} ) ;
700
+
701
+ const completeSignal = defineSignal ( 'complete' ) ;
702
+ const definedQuery = defineQuery < QueryNameAndArgs > ( 'query-handler-type' ) ;
703
+
704
+ interface QueryNameAndArgs {
705
+ name : string ;
706
+ queryName ?: string ;
707
+ args : any [ ] ;
708
+ }
709
+
710
+ export async function workflowWithMaybeDefinedQuery ( useDefinedQuery : boolean ) : Promise < void > {
711
+ let complete = false ;
712
+ setHandler ( completeSignal , ( ) => {
713
+ complete = true ;
714
+ } ) ;
715
+ setDefaultQueryHandler ( ( queryName : string , ...args : any [ ] ) => {
716
+ return { name : 'default' , queryName, args } ;
717
+ } ) ;
718
+ if ( useDefinedQuery ) {
719
+ setHandler ( definedQuery , ( ...args : any [ ] ) => {
720
+ return { name : definedQuery . name , args } ;
721
+ } ) ;
722
+ }
723
+
724
+ await condition ( ( ) => complete ) ;
725
+ }
726
+
727
+ test ( 'default query handler is used if requested query does not exist' , configMacro , async ( t , config ) => {
728
+ const { env, createWorkerWithDefaults } = config ;
729
+ const { startWorkflow } = configurableHelpers ( t , t . context . workflowBundle , env ) ;
730
+ const worker = await createWorkerWithDefaults ( t , { activities } ) ;
731
+ const handle = await startWorkflow ( workflowWithMaybeDefinedQuery , {
732
+ args : [ false ] ,
733
+ } ) ;
734
+ await worker . runUntil ( async ( ) => {
735
+ const args = [ 'test' , 'args' ] ;
736
+ const result = await handle . query ( definedQuery , ...args ) ;
737
+ t . deepEqual ( result , { name : 'default' , queryName : definedQuery . name , args } ) ;
738
+ } ) ;
739
+ } ) ;
740
+
741
+ test ( 'default query handler is not used if requested query exists' , configMacro , async ( t , config ) => {
742
+ const { env, createWorkerWithDefaults } = config ;
743
+ const { startWorkflow } = configurableHelpers ( t , t . context . workflowBundle , env ) ;
744
+ const worker = await createWorkerWithDefaults ( t , { activities } ) ;
745
+ const handle = await startWorkflow ( workflowWithMaybeDefinedQuery , {
746
+ args : [ true ] ,
747
+ } ) ;
748
+ await worker . runUntil ( async ( ) => {
749
+ const args = [ 'test' , 'args' ] ;
750
+ const result = await handle . query ( 'query-handler-type' , ...args ) ;
751
+ t . deepEqual ( result , { name : definedQuery . name , args } ) ;
752
+ } ) ;
753
+ } ) ;
0 commit comments