diff --git a/packages/nodes-base/nodes/Form/test/utils.test.ts b/packages/nodes-base/nodes/Form/test/utils.test.ts index b93b922d0f2..3705dc16373 100644 --- a/packages/nodes-base/nodes/Form/test/utils.test.ts +++ b/packages/nodes-base/nodes/Form/test/utils.test.ts @@ -547,6 +547,33 @@ describe('FormTrigger, formWebhook', () => { }); }); + it('should resolve expressions inside html field content', async () => { + const mockRender = jest.fn(); + + const formFields: FormFieldsParameter = [ + { + fieldLabel: 'Custom HTML', + fieldType: 'html', + html: '
{{ $json.test }}
', + requiredField: false, + }, + ]; + + executeFunctions.getNodeParameter.calledWith('formFields.values').mockReturnValue(formFields); + executeFunctions.evaluateExpression + .calledWith('{{ $json.test }}') + .mockReturnValue('TEST VALUE' as any); + executeFunctions.getResponseObject.mockReturnValue({ + render: mockRender, + setHeader: jest.fn(), + } as any); + + await formWebhook(executeFunctions); + + const renderArgs = mockRender.mock.calls[0][1]; + expect(renderArgs.formFields[0].html).toBe('
TEST VALUE
'); + }); + it('should sanitize form descriptions', async () => { const mockRender = jest.fn(); diff --git a/packages/nodes-base/nodes/Form/utils/utils.ts b/packages/nodes-base/nodes/Form/utils/utils.ts index d79fbfb0e87..9d6a4b191ea 100644 --- a/packages/nodes-base/nodes/Form/utils/utils.ts +++ b/packages/nodes-base/nodes/Form/utils/utils.ts @@ -630,6 +630,16 @@ export async function formWebhook( const mode = context.getMode() === 'manual' ? 'test' : 'production'; const formFields = context.getNodeParameter('formFields.values', []) as FormFieldsParameter; + for (const field of formFields) { + if (field.fieldType === 'html') { + let html = field.html ?? ''; + for (const resolvable of getResolvables(html)) { + html = html.replace(resolvable, context.evaluateExpression(resolvable) as string); + } + field.html = html; + } + } + const method = context.getRequestObject().method; validateResponseModeConfiguration(context);