test: Implement tests for get forms internal API endpoint

This commit is contained in:
Faruk AYDIN
2025-05-21 12:57:22 +02:00
parent 8c19cc70c0
commit 01fb867ef6
4 changed files with 104 additions and 6 deletions

View File

@@ -26,13 +26,15 @@ describe('POST /internal/api/v1/forms/:formId', () => {
parameters: {
fields: [
{
key: 'name',
type: 'string',
fieldName: 'email',
fieldKey: 'email',
fieldType: 'string',
required: true,
},
{
key: 'email',
type: 'string',
fieldName: 'name',
fieldKey: 'name',
fieldType: 'string',
required: true,
},
],

View File

@@ -0,0 +1,73 @@
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 getFormMock from '../../../../../../test/mocks/rest/internal/api/v1/forms/get-form.ee.js';
describe('GET /internal/api/v1/forms/:formId', () => {
let currentUser, flow, formStep;
beforeEach(async () => {
vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true);
currentUser = await createUser();
flow = await createFlow({ userId: currentUser.id });
formStep = await createStep({
flowId: flow.id,
appKey: 'forms',
key: 'form',
type: 'trigger',
parameters: {
fields: [
{
fieldKey: 'email',
fieldName: 'email',
fieldType: 'string',
required: true,
},
{
fieldKey: 'name',
fieldName: 'name',
fieldType: 'string',
required: true,
},
],
},
});
});
it('should return form data when trigger step is forms', async () => {
const response = await request(app)
.get(`/internal/api/v1/forms/${flow.id}`)
.expect(200);
const expectedPayload = getFormMock(flow, formStep);
expect(response.body).toStrictEqual(expectedPayload);
});
it('should return 400 for invalid trigger step', async () => {
await formStep.$query().patch({ appKey: 'github' });
const response = await request(app)
.get(`/internal/api/v1/forms/${flow.id}`)
.expect(400);
expect(response.body.errors).toStrictEqual({
general: ['Invalid trigger step'],
});
});
it('should return 404 for non-existent form', async () => {
const nonExistentFormId = Crypto.randomUUID();
await request(app)
.get(`/internal/api/v1/forms/${nonExistentFormId}`)
.expect(404);
});
});

View File

@@ -1,11 +1,10 @@
import stepSerializer from './step.js';
import slugify from 'slugify';
const formSerializer = (form) => {
const formData = {
id: form.id,
name: form.name,
fields: form.steps[0].parameters.fields.map((parameter) => ({
fields: form?.steps[0]?.parameters?.fields?.map((parameter) => ({
fieldKey: slugify(parameter.fieldName, {
lower: true,
strict: true,

View File

@@ -0,0 +1,24 @@
const getFormMock = (flow, formStep) => {
const data = {
id: flow.id,
name: flow.name,
fields: formStep?.parameters?.fields?.map((field) => ({
fieldKey: field.fieldKey,
fieldName: field.fieldName,
fieldType: field.fieldType,
})),
};
return {
data,
meta: {
count: 1,
currentPage: null,
isArray: false,
totalPages: null,
type: 'Flow',
},
};
};
export default getFormMock;