diff --git a/packages/backend/src/controllers/internal/api/v1/forms/create-form-submission.ee.test.js b/packages/backend/src/controllers/internal/api/v1/forms/create-form-submission.ee.test.js new file mode 100644 index 00000000..da6b24ba --- /dev/null +++ b/packages/backend/src/controllers/internal/api/v1/forms/create-form-submission.ee.test.js @@ -0,0 +1,86 @@ +import { vi, describe, it, expect, beforeEach } from 'vitest'; +import request from 'supertest'; +import Crypto from 'crypto'; +import app from '../../../../../app.js'; +import { createUser } from '../../../../../../test/factories/user.js'; +import { createFlow } from '../../../../../../test/factories/flow.js'; +import { createStep } from '../../../../../../test/factories/step.js'; +import * as license from '../../../../../helpers/license.ee.js'; +import * as formHandler from '../../../../../helpers/form-handler.ee.js'; + +describe('POST /internal/api/v1/forms/:formId', () => { + let currentUser, flow, formStep; + + beforeEach(async () => { + vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); + vi.spyOn(formHandler, 'default').mockResolvedValue(undefined); + + currentUser = await createUser(); + flow = await createFlow({ userId: currentUser.id }); + + formStep = await createStep({ + flowId: flow.id, + appKey: 'forms', + key: 'form', + type: 'trigger', + parameters: { + fields: [ + { + key: 'name', + type: 'string', + required: true, + }, + { + key: 'email', + type: 'string', + required: true, + }, + ], + }, + }); + }); + + it('should process form submission successfully', async () => { + const formData = { + name: 'John Doe', + email: 'john@example.com', + }; + + await request(app) + .post(`/internal/api/v1/forms/${flow.id}`) + .send(formData) + .expect(204); + }); + + it('should return 400 for invalid trigger step', async () => { + await formStep.$query().patch({ appKey: 'github' }); + + const formData = { + name: 'John Doe', + email: 'john@example.com', + }; + + const response = await request(app) + .post(`/internal/api/v1/forms/${flow.id}`) + .send(formData) + .expect(400); + + expect(response.body.errors).toStrictEqual({ + general: ['Invalid trigger step'], + }); + }); + + it('should return 404 for non-existent form', async () => { + const nonExistentFormId = Crypto.randomUUID(); + + const formData = { + name: 'John Doe', + email: 'john@example.com', + }; + + await request(app) + .post(`/internal/api/v1/forms/${nonExistentFormId}`) + .send(formData) + .expect(404); + }); +}); diff --git a/packages/backend/src/controllers/internal/api/v1/forms/get-form.ee.js b/packages/backend/src/controllers/internal/api/v1/forms/get-form.ee.js index 3017aa7d..75b92f33 100644 --- a/packages/backend/src/controllers/internal/api/v1/forms/get-form.ee.js +++ b/packages/backend/src/controllers/internal/api/v1/forms/get-form.ee.js @@ -1,5 +1,5 @@ -import { renderObject, renderError } from '../../../../helpers/renderer.js'; -import Flow from '../../../../models/flow.js'; +import { renderObject, renderError } from '../../../../../helpers/renderer.js'; +import Flow from '../../../../../models/flow.js'; export default async (request, response) => { const form = await Flow.query()