Test workflow with webhook expected body (#19688)
As title. Currently payload is always undefined when testing
This commit is contained in:
+9
-1
@@ -2,6 +2,7 @@ import { HeadlessEngineCommandWrapperEffect } from '@/command-menu-item/engine-c
|
||||
import { useHeadlessCommandContextApi } from '@/command-menu-item/engine-command/hooks/useHeadlessCommandContextApi';
|
||||
import { useRunWorkflowVersion } from '@/workflow/hooks/useRunWorkflowVersion';
|
||||
import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion';
|
||||
import { getTestPayloadFromTrigger } from '@/workflow/workflow-trigger/utils/getTestPayloadFromTrigger';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export const TestWorkflowSingleRecordCommand = () => {
|
||||
@@ -22,9 +23,16 @@ export const TestWorkflowSingleRecordCommand = () => {
|
||||
return;
|
||||
}
|
||||
|
||||
const { currentVersion } = workflowWithCurrentVersion;
|
||||
|
||||
if (!isDefined(currentVersion.trigger)) {
|
||||
return;
|
||||
}
|
||||
|
||||
runWorkflowVersion({
|
||||
workflowVersionId: workflowWithCurrentVersion.currentVersion.id,
|
||||
workflowVersionId: currentVersion.id,
|
||||
workflowId: workflowWithCurrentVersion.id,
|
||||
payload: getTestPayloadFromTrigger(currentVersion.trigger),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
import { type WorkflowTrigger } from '@/workflow/types/Workflow';
|
||||
import { getTestPayloadFromTrigger } from '@/workflow/workflow-trigger/utils/getTestPayloadFromTrigger';
|
||||
|
||||
describe('getTestPayloadFromTrigger', () => {
|
||||
it('returns undefined for a manual trigger', () => {
|
||||
const trigger: WorkflowTrigger = {
|
||||
type: 'MANUAL',
|
||||
name: 'Test',
|
||||
settings: {
|
||||
outputSchema: {},
|
||||
},
|
||||
};
|
||||
|
||||
expect(getTestPayloadFromTrigger(trigger)).toBeUndefined();
|
||||
});
|
||||
|
||||
it('returns undefined for a cron trigger', () => {
|
||||
const trigger: WorkflowTrigger = {
|
||||
type: 'CRON',
|
||||
name: 'Test',
|
||||
settings: {
|
||||
type: 'DAYS',
|
||||
schedule: { day: 1, hour: 0, minute: 0 },
|
||||
outputSchema: {},
|
||||
},
|
||||
};
|
||||
|
||||
expect(getTestPayloadFromTrigger(trigger)).toBeUndefined();
|
||||
});
|
||||
|
||||
it('returns expectedBody for a POST webhook trigger', () => {
|
||||
const expectedBody = { message: 'Workflow was started', count: 42 };
|
||||
const trigger: WorkflowTrigger = {
|
||||
type: 'WEBHOOK',
|
||||
name: 'Test',
|
||||
settings: {
|
||||
httpMethod: 'POST',
|
||||
expectedBody,
|
||||
outputSchema: {},
|
||||
authentication: null,
|
||||
},
|
||||
};
|
||||
|
||||
expect(getTestPayloadFromTrigger(trigger)).toEqual(expectedBody);
|
||||
});
|
||||
|
||||
it('returns undefined for a GET webhook trigger', () => {
|
||||
const trigger: WorkflowTrigger = {
|
||||
type: 'WEBHOOK',
|
||||
name: 'Test',
|
||||
settings: {
|
||||
httpMethod: 'GET',
|
||||
outputSchema: {},
|
||||
authentication: null,
|
||||
},
|
||||
};
|
||||
|
||||
expect(getTestPayloadFromTrigger(trigger)).toBeUndefined();
|
||||
});
|
||||
|
||||
it('throws for a database event trigger', () => {
|
||||
const trigger: WorkflowTrigger = {
|
||||
type: 'DATABASE_EVENT',
|
||||
name: 'Test',
|
||||
settings: {
|
||||
eventName: 'company.created',
|
||||
outputSchema: {},
|
||||
},
|
||||
};
|
||||
|
||||
expect(() => getTestPayloadFromTrigger(trigger)).toThrow(
|
||||
'Test workflow is not supported for database event triggers',
|
||||
);
|
||||
});
|
||||
});
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
import { type WorkflowTrigger } from '@/workflow/types/Workflow';
|
||||
import { assertUnreachable } from 'twenty-shared/utils';
|
||||
|
||||
export const getTestPayloadFromTrigger = (
|
||||
trigger: WorkflowTrigger,
|
||||
): Record<string, unknown> | undefined => {
|
||||
switch (trigger.type) {
|
||||
case 'MANUAL':
|
||||
case 'CRON': {
|
||||
return undefined;
|
||||
}
|
||||
case 'WEBHOOK': {
|
||||
if (trigger.settings.httpMethod === 'POST') {
|
||||
return trigger.settings.expectedBody;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
case 'DATABASE_EVENT': {
|
||||
throw new Error(
|
||||
'Test workflow is not supported for database event triggers',
|
||||
);
|
||||
}
|
||||
default: {
|
||||
return assertUnreachable(trigger, 'Unknown trigger type');
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user