Skip to content

Commit 55f7de6

Browse files
authored
fix(api-service): workflow creation api flow didn't generate payload schema (#7366)
1 parent e8e8fab commit 55f7de6

File tree

5 files changed

+40
-8
lines changed

5 files changed

+40
-8
lines changed

apps/api/src/app/workflows-v2/usecases/build-payload-schema/build-payload-schema.command.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { EnvironmentWithUserCommand } from '@novu/application-generic';
2-
import { IsString, IsObject, IsNotEmpty, IsOptional } from 'class-validator';
2+
import { IsString, IsObject, IsOptional } from 'class-validator';
33

44
export class BuildPayloadSchemaCommand extends EnvironmentWithUserCommand {
55
@IsString()
6-
@IsNotEmpty()
7-
workflowId: string;
6+
@IsOptional()
7+
workflowId?: string;
88

99
/**
1010
* Control values used for preview purposes

apps/api/src/app/workflows-v2/usecases/build-payload-schema/build-payload-schema.usecase.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export class BuildPayloadSchema {
2323
private async getControlValues(command: BuildPayloadSchemaCommand) {
2424
let controlValues = command.controlValues ? [command.controlValues] : [];
2525

26-
if (!controlValues.length) {
26+
if (!controlValues.length && command.workflowId) {
2727
controlValues = (
2828
await this.controlValuesRepository.find(
2929
{

apps/api/src/app/workflows-v2/usecases/build-variable-schema/build-available-variable-schema.usecase.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,15 @@ export class BuildAvailableVariableSchemaUsecase {
6262
workflow: NotificationTemplateEntity | undefined,
6363
command: BuildAvailableVariableSchemaCommand
6464
): Promise<JSONSchemaDto> {
65-
if (!workflow) {
65+
if (workflow && workflow.steps.length === 0) {
6666
return {
6767
type: 'object',
6868
properties: {},
6969
additionalProperties: true,
7070
};
7171
}
7272

73-
if (workflow.payloadSchema) {
73+
if (workflow?.payloadSchema) {
7474
return parsePayloadSchema(workflow.payloadSchema, { safe: true }) || emptyJsonSchema();
7575
}
7676

@@ -79,7 +79,7 @@ export class BuildAvailableVariableSchemaUsecase {
7979
environmentId: command.environmentId,
8080
organizationId: command.organizationId,
8181
userId: command.userId,
82-
workflowId: workflow._id,
82+
workflowId: workflow?._id,
8383
...(command.optimisticControlValues ? { controlValues: command.optimisticControlValues } : {}),
8484
})
8585
);

apps/api/src/app/workflows-v2/usecases/upsert-workflow/upsert-workflow.usecase.ts

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import {
3030
WorkflowStatusEnum,
3131
StepIssues,
3232
ControlSchemas,
33-
DigestUnitEnum,
3433
} from '@novu/shared';
3534
import {
3635
CreateWorkflow as CreateWorkflowGeneric,

apps/api/src/app/workflows-v2/workflow.controller.e2e.ts

+33
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,39 @@ describe('Workflow Controller E2E API Testing', () => {
275275
await assertValuesInSteps(workflowCreated);
276276
}
277277
});
278+
279+
it('should generate a payload schema if only control values are provided during workflow creation', async () => {
280+
const steps = [
281+
{
282+
...buildEmailStep(),
283+
controlValues: {
284+
body: 'Welcome {{payload.name}}',
285+
subject: 'Hello {{payload.name}}',
286+
},
287+
},
288+
];
289+
290+
const nameSuffix = `Test Workflow${new Date().toISOString()}`;
291+
292+
const createWorkflowDto: CreateWorkflowDto = buildCreateWorkflowDto(`${nameSuffix}`, { steps });
293+
const res = await workflowsClient.createWorkflow(createWorkflowDto);
294+
expect(res.isSuccessResult()).to.be.true;
295+
296+
const workflow = res.value as WorkflowResponseDto;
297+
expect(workflow).to.be.ok;
298+
299+
expect(workflow.steps[0].variables).to.be.ok;
300+
301+
const stepData = await getStepData(workflow._id, workflow.steps[0]._id);
302+
expect(stepData.variables).to.be.ok;
303+
304+
const { properties } = stepData.variables as JSONSchemaDto;
305+
expect(properties).to.be.ok;
306+
307+
const payloadProperties = properties?.payload as JSONSchemaDto;
308+
expect(payloadProperties).to.be.ok;
309+
expect(payloadProperties.properties?.name).to.be.ok;
310+
});
278311
});
279312

280313
describe('Update Workflow Permutations', () => {

0 commit comments

Comments
 (0)