@@ -13,6 +13,9 @@ import { temporal } from '@temporalio/proto';
1313import { Worker } from './helpers' ;
1414import { Context , helpers , makeTestFunction } from './helpers-integration' ;
1515import { unblockSignal , versionQuery } from './workflows' ;
16+ import { WorkerOptions } from '@temporalio/worker' ;
17+
18+ type WorkerDeploymentOptions = NonNullable < WorkerOptions [ 'workerDeploymentOptions' ] > ;
1619
1720const test = makeTestFunction ( { workflowsPath : __filename } ) ;
1821
@@ -302,7 +305,7 @@ async function testWorkerDeploymentWithDynamicBehavior(
302305 ( event ) =>
303306 event . workflowTaskCompletedEventAttributes &&
304307 event . workflowTaskCompletedEventAttributes . versioningBehavior ===
305- temporal . api . enums . v1 . VersioningBehavior . VERSIONING_BEHAVIOR_PINNED
308+ temporal . api . enums . v1 . VersioningBehavior . VERSIONING_BEHAVIOR_PINNED
306309 ) ;
307310 assert . ok ( hasPinnedVersioningBehavior , 'Expected workflow to use pinned versioning behavior' ) ;
308311
@@ -360,7 +363,7 @@ test('Workflows can use default versioning behavior', async (t) => {
360363 ( event ) =>
361364 event . workflowTaskCompletedEventAttributes &&
362365 event . workflowTaskCompletedEventAttributes . versioningBehavior ===
363- temporal . api . enums . v1 . VersioningBehavior . VERSIONING_BEHAVIOR_PINNED
366+ temporal . api . enums . v1 . VersioningBehavior . VERSIONING_BEHAVIOR_PINNED
364367 ) ;
365368 assert . ok ( hasPinnedVersioningBehavior , 'Expected workflow to use pinned versioning behavior' ) ;
366369
@@ -415,7 +418,7 @@ test('Workflow versioningOverride overrides default versioning behavior', async
415418 const hasPinnedVersioningBehavior = historyPinned . events ! . some (
416419 ( event ) =>
417420 event . workflowExecutionStartedEventAttributes ?. versioningOverride ?. behavior ===
418- temporal . api . enums . v1 . VersioningBehavior . VERSIONING_BEHAVIOR_PINNED ||
421+ temporal . api . enums . v1 . VersioningBehavior . VERSIONING_BEHAVIOR_PINNED ||
419422 event . workflowExecutionStartedEventAttributes ?. versioningOverride ?. pinned != null
420423 ) ;
421424 assert . ok ( hasPinnedVersioningBehavior , 'Expected workflow to use pinned versioning behavior' ) ;
@@ -474,3 +477,52 @@ async function setCurrentDeploymentVersion(
474477 conflictToken,
475478 } ) ;
476479}
480+
481+ ///////////////////////////////
482+
483+ /**
484+ * Type-level tests for WorkerDeploymentOptions.
485+ *
486+ * Ensures that:
487+ * - When useWorkerVersioning is true, defaultVersioningBehavior is required
488+ * - When useWorkerVersioning is false, defaultVersioningBehavior must be absent
489+ * - version is always required
490+ */
491+
492+ test ( 'WorkerDeploymentOptions with useWorkerVersioning true requires defaultVersioningBehavior' , ( t ) => {
493+ const valid : WorkerDeploymentOptions = {
494+ version : { buildId : '1.0' , deploymentName : 'my-deployment' } ,
495+ useWorkerVersioning : true ,
496+ defaultVersioningBehavior : 'AUTO_UPGRADE' ,
497+ } ;
498+
499+ const validPinned : WorkerDeploymentOptions = {
500+ version : { buildId : '1.0' , deploymentName : 'my-deployment' } ,
501+ useWorkerVersioning : true ,
502+ defaultVersioningBehavior : 'PINNED' ,
503+ } ;
504+
505+ // @ts -expect-error defaultVersioningBehavior is required when useWorkerVersioning is true
506+ const missingBehavior : WorkerDeploymentOptions = {
507+ version : { buildId : '1.0' , deploymentName : 'my-deployment' } ,
508+ useWorkerVersioning : true ,
509+ } ;
510+
511+ t . pass ( ) ;
512+ } ) ;
513+
514+ test ( 'WorkerDeploymentOptions with useWorkerVersioning false does not allow defaultVersioningBehavior' , ( t ) => {
515+ const _validNoVersioning : WorkerDeploymentOptions = {
516+ version : { buildId : '1.0' , deploymentName : 'my-deployment' } ,
517+ useWorkerVersioning : false ,
518+ } ;
519+
520+ const invalidWithBehavior : WorkerDeploymentOptions = {
521+ version : { buildId : '1.0' , deploymentName : 'my-deployment' } ,
522+ useWorkerVersioning : false ,
523+ // @ts -expect-error defaultVersioningBehavior must not be specified when useWorkerVersioning is false
524+ defaultVersioningBehavior : 'AUTO_UPGRADE' ,
525+ } ;
526+
527+ t . pass ( ) ;
528+ } ) ;
0 commit comments