From aae4511013eaf60552335f2c25d5a18480b2b10c Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Fri, 25 Apr 2025 09:58:15 +0000 Subject: [PATCH] feat(api): add get template endpoint --- .../api/v1/templates/get-template.ee.js | 10 +++++++ .../api/v1/templates/get-template.ee.test.js | 30 +++++++++++++++++++ .../backend/src/routes/api/v1/templates.ee.js | 2 ++ .../rest/api/v1/templates/get-template.ee.js | 22 ++++++++++++++ packages/backend/vitest.config.js | 4 +-- 5 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 packages/backend/src/controllers/api/v1/templates/get-template.ee.js create mode 100644 packages/backend/src/controllers/api/v1/templates/get-template.ee.test.js create mode 100644 packages/backend/test/mocks/rest/api/v1/templates/get-template.ee.js diff --git a/packages/backend/src/controllers/api/v1/templates/get-template.ee.js b/packages/backend/src/controllers/api/v1/templates/get-template.ee.js new file mode 100644 index 00000000..c0f5d0c9 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/templates/get-template.ee.js @@ -0,0 +1,10 @@ +import { renderObject } from '../../../../helpers/renderer.js'; +import Template from '../../../../models/template.ee.js'; + +export default async (request, response) => { + const template = await Template.query() + .findById(request.params.templateId) + .throwIfNotFound(); + + renderObject(response, template, { serializer: 'PublicTemplate' }); +}; diff --git a/packages/backend/src/controllers/api/v1/templates/get-template.ee.test.js b/packages/backend/src/controllers/api/v1/templates/get-template.ee.test.js new file mode 100644 index 00000000..072eccc9 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/templates/get-template.ee.test.js @@ -0,0 +1,30 @@ +import request from 'supertest'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { createApiToken } from '../../../../../test/factories/api-token.js'; +import { createTemplate } from '../../../../../test/factories/template.js'; +import getTemplateMock from '../../../../../test/mocks/rest/api/v1/templates/get-template.ee.js'; +import app from '../../../../app.js'; +import * as license from '../../../../helpers/license.ee.js'; + +describe('GET /api/v1/templates/:templateId', () => { + let token; + + beforeEach(async () => { + vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); + + token = (await createApiToken()).token; + }); + + it('should return templates', async () => { + const template = await createTemplate(); + + const response = await request(app) + .get(`/api/v1/templates/${template.id}`) + .set('x-api-token', token) + .expect(200); + + const expectedPayload = await getTemplateMock(template); + + expect(response.body).toStrictEqual(expectedPayload); + }); +}); diff --git a/packages/backend/src/routes/api/v1/templates.ee.js b/packages/backend/src/routes/api/v1/templates.ee.js index 6a4e43b4..6673b5d9 100644 --- a/packages/backend/src/routes/api/v1/templates.ee.js +++ b/packages/backend/src/routes/api/v1/templates.ee.js @@ -1,8 +1,10 @@ import { Router } from 'express'; +import getTemplateAction from '../../../controllers/api/v1/templates/get-template.ee.js'; import getTemplatesAction from '../../../controllers/api/v1/templates/get-templates.ee.js'; const router = Router(); router.get('/', getTemplatesAction); +router.get('/:templateId', getTemplateAction); export default router; diff --git a/packages/backend/test/mocks/rest/api/v1/templates/get-template.ee.js b/packages/backend/test/mocks/rest/api/v1/templates/get-template.ee.js new file mode 100644 index 00000000..256819fa --- /dev/null +++ b/packages/backend/test/mocks/rest/api/v1/templates/get-template.ee.js @@ -0,0 +1,22 @@ +const getTemplateMock = async (template) => { + const data = { + id: template.id, + name: template.name, + createdAt: template.createdAt.getTime(), + updatedAt: template.updatedAt.getTime(), + flowData: template.getFlowDataWithIconUrls(), + }; + + return { + data: data, + meta: { + count: 1, + currentPage: null, + isArray: false, + totalPages: null, + type: 'Template', + }, + }; +}; + +export default getTemplateMock; diff --git a/packages/backend/vitest.config.js b/packages/backend/vitest.config.js index 14354db5..b8d4b487 100644 --- a/packages/backend/vitest.config.js +++ b/packages/backend/vitest.config.js @@ -29,8 +29,8 @@ export default defineConfig({ thresholds: { autoUpdate: true, statements: 99.41, - branches: 98.34, - functions: 99.06, + branches: 98.35, + functions: 99.07, lines: 99.41, }, },