From 9ebba9427b064789adf317ae407611d2aad0ffc1 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Mon, 10 Mar 2025 16:34:38 +0100 Subject: [PATCH] feat: Implement create flow from template id --- .../controllers/api/v1/flows/create-flow.js | 6 ++++- .../api/v1/flows/create-flow.test.js | 24 ++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/controllers/api/v1/flows/create-flow.js b/packages/backend/src/controllers/api/v1/flows/create-flow.js index 16e6bbe3..36c46ac5 100644 --- a/packages/backend/src/controllers/api/v1/flows/create-flow.js +++ b/packages/backend/src/controllers/api/v1/flows/create-flow.js @@ -1,7 +1,11 @@ import { renderObject } from '../../../../helpers/renderer.js'; export default async (request, response) => { - const flow = await request.currentUser.createEmptyFlow(); + const { templateId } = request.query; + + const flow = templateId + ? await request.currentUser.createFlowFromTemplate(templateId) + : await request.currentUser.createEmptyFlow(); renderObject(response, flow, { status: 201 }); }; diff --git a/packages/backend/src/controllers/api/v1/flows/create-flow.test.js b/packages/backend/src/controllers/api/v1/flows/create-flow.test.js index fb8f5635..2c55f8ef 100644 --- a/packages/backend/src/controllers/api/v1/flows/create-flow.test.js +++ b/packages/backend/src/controllers/api/v1/flows/create-flow.test.js @@ -4,6 +4,7 @@ import request from 'supertest'; import app from '../../../../app.js'; import createAuthTokenByUserId from '../../../../helpers/create-auth-token-by-user-id.js'; import { createUser } from '../../../../../test/factories/user.js'; +import { createTemplate } from '../../../../../test/factories/template.js'; import createFlowMock from '../../../../../test/mocks/rest/api/v1/flows/create-flow.js'; import { createPermission } from '../../../../../test/factories/permission.js'; @@ -17,7 +18,7 @@ describe('POST /api/v1/flows', () => { token = await createAuthTokenByUserId(currentUser.id); }); - it('should return created flow', async () => { + it('should create an empty flow when no templateId is provided', async () => { await createPermission({ action: 'create', subject: 'Flow', @@ -38,4 +39,25 @@ describe('POST /api/v1/flows', () => { expect(response.body).toMatchObject(expectedPayload); }); + + it('should create a flow from template when templateId is provided', async () => { + await createPermission({ + action: 'create', + subject: 'Flow', + roleId: currentUserRole.id, + conditions: ['isCreator'], + }); + + const template = await createTemplate({ + name: 'Sample template', + }); + + const response = await request(app) + .post('/api/v1/flows') + .query({ templateId: template.id }) + .set('Authorization', token) + .expect(201); + + expect(response.body.data.name).toBe(template.flowData.name); + }); });