From eac51c18942ea781def9a57459967bf01efb8cdd Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Fri, 25 Apr 2025 10:03:33 +0000 Subject: [PATCH] feat(api): add delete template endpoint --- .../api/v1/templates/delete-template.ee.js | 11 +++++ .../v1/templates/delete-template.ee.test.js | 47 +++++++++++++++++++ .../backend/src/routes/api/v1/templates.ee.js | 2 + packages/backend/vitest.config.js | 2 +- 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/controllers/api/v1/templates/delete-template.ee.js create mode 100644 packages/backend/src/controllers/api/v1/templates/delete-template.ee.test.js diff --git a/packages/backend/src/controllers/api/v1/templates/delete-template.ee.js b/packages/backend/src/controllers/api/v1/templates/delete-template.ee.js new file mode 100644 index 00000000..444a2699 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/templates/delete-template.ee.js @@ -0,0 +1,11 @@ +import Template from '../../../../models/template.ee.js'; + +export default async (request, response) => { + const template = await Template.query() + .findById(request.params.templateId) + .throwIfNotFound(); + + await template.$query().delete(); + + response.status(204).end(); +}; diff --git a/packages/backend/src/controllers/api/v1/templates/delete-template.ee.test.js b/packages/backend/src/controllers/api/v1/templates/delete-template.ee.test.js new file mode 100644 index 00000000..9b4bf2d9 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/templates/delete-template.ee.test.js @@ -0,0 +1,47 @@ +import Crypto from 'node:crypto'; +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 app from '../../../../app.js'; +import * as license from '../../../../helpers/license.ee.js'; +import Template from '../../../../models/template.ee.js'; + +describe('DELETE /api/v1/templates/:templateId', () => { + let token; + + beforeEach(async () => { + vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); + + token = (await createApiToken()).token; + }); + + it('should delete the template', async () => { + const template = await createTemplate(); + + await request(app) + .delete(`/api/v1/templates/${template.id}`) + .set('x-api-token', token) + .expect(204); + + const deletedTemplate = await Template.query().findById(template.id); + + expect(deletedTemplate).toBeUndefined(); + }); + + it('should return not found response for not existing template UUID', async () => { + const notExistingTemplateUUID = Crypto.randomUUID(); + + await request(app) + .delete(`/api/v1/templates/${notExistingTemplateUUID}`) + .set('x-api-token', token) + .expect(404); + }); + + it('should return bad request response for invalid UUID', async () => { + await request(app) + .delete('/api/v1/templates/invalidTemplateUUID') + .set('x-api-token', token) + .expect(400); + }); +}); diff --git a/packages/backend/src/routes/api/v1/templates.ee.js b/packages/backend/src/routes/api/v1/templates.ee.js index 6673b5d9..d39ef363 100644 --- a/packages/backend/src/routes/api/v1/templates.ee.js +++ b/packages/backend/src/routes/api/v1/templates.ee.js @@ -1,10 +1,12 @@ import { Router } from 'express'; import getTemplateAction from '../../../controllers/api/v1/templates/get-template.ee.js'; +import deleteTemplateAction from '../../../controllers/api/v1/templates/delete-template.ee.js'; import getTemplatesAction from '../../../controllers/api/v1/templates/get-templates.ee.js'; const router = Router(); router.get('/', getTemplatesAction); router.get('/:templateId', getTemplateAction); +router.delete('/:templateId', deleteTemplateAction); export default router; diff --git a/packages/backend/vitest.config.js b/packages/backend/vitest.config.js index b8d4b487..2d450ca1 100644 --- a/packages/backend/vitest.config.js +++ b/packages/backend/vitest.config.js @@ -29,7 +29,7 @@ export default defineConfig({ thresholds: { autoUpdate: true, statements: 99.41, - branches: 98.35, + branches: 98.36, functions: 99.07, lines: 99.41, },