diff --git a/packages/backend/src/serializers/admin/template.ee.js b/packages/backend/src/serializers/admin/template.ee.js new file mode 100644 index 00000000..60b02a9c --- /dev/null +++ b/packages/backend/src/serializers/admin/template.ee.js @@ -0,0 +1,11 @@ +const adminTemplateSerializer = (template) => { + return { + id: template.id, + name: template.name, + flowData: template.flowData, + createdAt: template.createdAt.getTime(), + updatedAt: template.updatedAt.getTime(), + }; +}; + +export default adminTemplateSerializer; diff --git a/packages/backend/src/serializers/admin/template.ee.test.js b/packages/backend/src/serializers/admin/template.ee.test.js new file mode 100644 index 00000000..545bcf8c --- /dev/null +++ b/packages/backend/src/serializers/admin/template.ee.test.js @@ -0,0 +1,23 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import templateSerializer from './template.ee.js'; +import { createTemplate } from '../../../test/factories/template.js'; + +describe('adminTemplateSerializer', () => { + let template; + + beforeEach(async () => { + template = await createTemplate(); + }); + + it('should return flow data', async () => { + const expectedPayload = { + id: template.id, + name: template.name, + flowData: template.flowData, + createdAt: template.createdAt.getTime(), + updatedAt: template.updatedAt.getTime(), + }; + + expect(templateSerializer(template)).toStrictEqual(expectedPayload); + }); +}); diff --git a/packages/backend/src/serializers/index.js b/packages/backend/src/serializers/index.js index ba53399f..a96a0072 100644 --- a/packages/backend/src/serializers/index.js +++ b/packages/backend/src/serializers/index.js @@ -2,6 +2,7 @@ import userSerializer from './user.js'; import roleSerializer from './role.js'; import permissionSerializer from './permission.js'; import adminSamlAuthProviderSerializer from './admin-saml-auth-provider.ee.js'; +import adminTemplateSerializer from './admin/template.ee.js'; import samlAuthProviderSerializer from './saml-auth-provider.ee.js'; import samlAuthProviderRoleMappingSerializer from './role-mapping.ee.js'; import oauthClientSerializer from './oauth-client.js'; @@ -27,6 +28,7 @@ const serializers = { Role: roleSerializer, Permission: permissionSerializer, AdminSamlAuthProvider: adminSamlAuthProviderSerializer, + AdminTemplate: adminTemplateSerializer, SamlAuthProvider: samlAuthProviderSerializer, RoleMapping: samlAuthProviderRoleMappingSerializer, OAuthClient: oauthClientSerializer, diff --git a/packages/backend/test/factories/template.js b/packages/backend/test/factories/template.js new file mode 100644 index 00000000..b8dbc4bb --- /dev/null +++ b/packages/backend/test/factories/template.js @@ -0,0 +1,46 @@ +import Template from '../../src/models/template.ee'; +import { createFlow } from './flow'; +import { createStep } from './step'; + +export const createTemplate = async (params = {}) => { + params.name = params?.name || 'Sample template name!'; + + if (!params?.flowData) { + const flow = await createFlow(); + + const triggerStep = await createStep({ + flowId: flow.id, + type: 'trigger', + appKey: 'webhook', + key: 'catchRawWebhook', + name: 'Catch raw webhook', + parameters: { + workSynchronously: true, + }, + position: 1, + webhookPath: `/webhooks/flows/${flow.id}/sync`, + }); + + await createStep({ + flowId: flow.id, + type: 'action', + appKey: 'formatter', + key: 'text', + name: 'Text', + parameters: { + input: `hello {{step.${triggerStep.id}.query.sample}} world`, + transform: 'capitalize', + }, + position: 2, + }); + + params.flowData = await flow.export(); + } + + params.createdAt = params?.createdAt || new Date().toISOString(); + params.updatedAt = params?.updatedAt || new Date().toISOString(); + + const template = await Template.query().insertAndFetch(params); + + return template; +};