diff --git a/packages/backend/src/serializers/flow.js b/packages/backend/src/serializers/flow.js new file mode 100644 index 00000000..b1b131cf --- /dev/null +++ b/packages/backend/src/serializers/flow.js @@ -0,0 +1,18 @@ +import stepSerializer from './step.js'; + +const flowSerializer = (flow) => { + let flowData = { + id: flow.id, + name: flow.name, + active: flow.active, + status: flow.status, + }; + + if (flow.steps) { + flowData.steps = flow.steps.map((step) => stepSerializer(step)); + } + + return flowData; +}; + +export default flowSerializer; diff --git a/packages/backend/src/serializers/flow.test.js b/packages/backend/src/serializers/flow.test.js new file mode 100644 index 00000000..299d2451 --- /dev/null +++ b/packages/backend/src/serializers/flow.test.js @@ -0,0 +1,44 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import { createFlow } from '../../test/factories/flow'; +import flowSerializer from './flow'; +import stepSerializer from './step'; +import { createStep } from '../../test/factories/step'; + +describe('flowSerializer', () => { + let flow, stepOne, stepTwo; + + beforeEach(async () => { + flow = await createFlow(); + + stepOne = await createStep({ + flowId: flow.id, + type: 'trigger', + }); + + stepTwo = await createStep({ + flowId: flow.id, + type: 'action', + }); + }); + + it('should return flow data', async () => { + const expectedPayload = { + id: flow.id, + name: flow.name, + active: flow.active, + status: flow.status, + }; + + expect(flowSerializer(flow)).toEqual(expectedPayload); + }); + + it('should return flow data with the steps', async () => { + flow.steps = [stepOne, stepTwo]; + + const expectedPayload = { + steps: [stepSerializer(stepOne), stepSerializer(stepTwo)], + }; + + expect(flowSerializer(flow)).toMatchObject(expectedPayload); + }); +}); diff --git a/packages/backend/src/serializers/index.js b/packages/backend/src/serializers/index.js index c6c48ba5..2f766949 100644 --- a/packages/backend/src/serializers/index.js +++ b/packages/backend/src/serializers/index.js @@ -3,6 +3,8 @@ import roleSerializer from './role.js'; import permissionSerializer from './permission.js'; import samlAuthProviderSerializer from './saml-auth-provider.ee.js'; import appAuthClientSerializer from './app-auth-client.js'; +import flowSerializer from './flow.js'; +import stepSerializer from './step.js'; const serializers = { User: userSerializer, @@ -10,6 +12,8 @@ const serializers = { Permission: permissionSerializer, SamlAuthProvider: samlAuthProviderSerializer, AppAuthClient: appAuthClientSerializer, + Flow: flowSerializer, + Step: stepSerializer, }; export default serializers;