@@ -361,6 +361,65 @@ test('Workflows can use default versioning behavior', async (t) => {
361361 t . pass ( ) ;
362362} ) ;
363363
364+ test ( 'Workflow versioningOverride overrides default versioning behavior' , async ( t ) => {
365+ const taskQueue = 'task-queue-versioning-override-' + randomUUID ( ) ;
366+ const { client, nativeConnection } = t . context . env ;
367+
368+ const workerV1 = {
369+ buildId : '1.0' ,
370+ deploymentName : 'deployment-versioning-override-' + randomUUID ( ) ,
371+ } ;
372+
373+ const worker1 = await Worker . create ( {
374+ workflowsPath : require . resolve ( './deployment-versioning-v1' ) ,
375+ taskQueue,
376+ workerDeploymentOptions : {
377+ useWorkerVersioning : true ,
378+ version : workerV1 ,
379+ defaultVersioningBehavior : 'AUTO_UPGRADE' ,
380+ } ,
381+ connection : nativeConnection ,
382+ } ) ;
383+ const worker1Promise = worker1 . run ( ) ;
384+ worker1Promise . catch ( ( err ) => {
385+ t . fail ( 'Worker 1.0 run error: ' + err ) ;
386+ } ) ;
387+
388+ // Wait for workers to be visible and set current version to v1
389+ const describeResp = await waitUntilWorkerDeploymentVisible ( client , workerV1 ) ;
390+ await setCurrentDeploymentVersion ( client , describeResp . conflictToken , workerV1 ) ;
391+
392+ // Start workflow with PINNED to v1 versioningOverride - should use v1 despite AUTO_UPGRADE default
393+ const wfPinned = await client . workflow . start ( 'deploymentVersioning' , {
394+ taskQueue,
395+ workflowId : 'versioning-override-pinned-v1-' + randomUUID ( ) ,
396+ versioningOverride : {
397+ pinnedTo : workerV1 ,
398+ } ,
399+ } ) ;
400+ const statePinned = await wfPinned . query ( versionQuery ) ;
401+ assert . equal ( statePinned , 'v1' ) ;
402+
403+ await wfPinned . signal ( unblockSignal ) ;
404+
405+ // Get results and check versioning behavior
406+ const historyPinned = await wfPinned . fetchHistory ( ) ;
407+ const hasPinnedVersioningBehavior = historyPinned . events ! . some (
408+ ( event ) =>
409+ event . workflowExecutionStartedEventAttributes ?. versioningOverride ?. behavior ===
410+ temporal . api . enums . v1 . VersioningBehavior . VERSIONING_BEHAVIOR_PINNED ||
411+ event . workflowExecutionStartedEventAttributes ?. versioningOverride ?. pinned != null
412+ ) ;
413+ assert . ok ( hasPinnedVersioningBehavior , 'Expected workflow to use pinned versioning behavior' ) ;
414+
415+ const resPinned = await wfPinned . result ( ) ;
416+ assert . equal ( resPinned , 'version-v1' ) ;
417+
418+ worker1 . shutdown ( ) ;
419+ await worker1Promise ;
420+ t . pass ( ) ;
421+ } ) ;
422+
364423async function setRampingVersion (
365424 client : Client ,
366425 conflictToken : Uint8Array ,
0 commit comments