Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 043ca15

Browse files
authored
fix(workflow): Fix argument wrapping in array when signaling from Workflow (temporalio#410)
1 parent a5cdf27 commit 043ca15

File tree

4 files changed

+14
-3
lines changed

4 files changed

+14
-3
lines changed

packages/test/src/workflows/child-workflow-signals.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
uuid4,
1313
} from '@temporalio/workflow';
1414
import { signalTarget } from './signal-target';
15-
import { unblockSignal, failWithMessageSignal } from './definitions';
15+
import { argsTestSignal, unblockSignal, failWithMessageSignal } from './definitions';
1616

1717
/**
1818
* If this workflow completes successfully, it should make the test pass
@@ -22,6 +22,8 @@ export async function childWorkflowSignals(): Promise<void> {
2222
{
2323
// Happy path
2424
const child = await startChild(signalTarget, {});
25+
// Args are transferred correctly
26+
await child.signal(argsTestSignal, 123, 'kid');
2527
await child.signal(unblockSignal);
2628
await child.result();
2729
}
@@ -52,6 +54,8 @@ export async function childWorkflowSignals(): Promise<void> {
5254
// Happy path
5355
const child = await startChild(signalTarget, {});
5456
const external = getExternalWorkflowHandle(child.workflowId, child.originalRunId);
57+
// Args are transferred correctly
58+
await external.signal(argsTestSignal, 123, 'kid');
5559
await external.signal(unblockSignal);
5660
await child.result();
5761
}

packages/test/src/workflows/definitions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ export interface LoggerSinks extends Sinks {
1212
export const activityStartedSignal = defineSignal('activityStarted');
1313
export const failSignal = defineSignal('fail');
1414
export const failWithMessageSignal = defineSignal<[string]>('fail');
15+
export const argsTestSignal = defineSignal<[number, string]>('argsTest');
1516
export const unblockSignal = defineSignal('unblock');

packages/test/src/workflows/signal-target.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,17 @@
55
* @module
66
*/
77
import { condition, setHandler } from '@temporalio/workflow';
8-
import { failWithMessageSignal, unblockSignal } from './definitions';
8+
import { argsTestSignal, failWithMessageSignal, unblockSignal } from './definitions';
99

1010
export async function signalTarget(): Promise<void> {
1111
let unblocked = false;
1212

13+
// Verify arguments are sent correctly
14+
setHandler(argsTestSignal, (num, str) => {
15+
if (!(num === 123 && str === 'kid')) {
16+
throw new Error('Invalid arguments');
17+
}
18+
});
1319
setHandler(failWithMessageSignal, (message) => {
1420
throw new Error(message);
1521
});

packages/workflow/src/workflow.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ function signalWorkflowNextHandler({ seq, signalName, args, target }: SignalWork
309309
state.pushCommand({
310310
signalExternalWorkflowExecution: {
311311
seq,
312-
args: state.dataConverter.toPayloadsSync(args),
312+
args: state.dataConverter.toPayloadsSync(...args),
313313
signalName,
314314
...(target.type === 'external'
315315
? {

0 commit comments

Comments
 (0)