From a04ca8f86c520878e937b573c2daf8049d2b8917 Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Wed, 23 Apr 2025 15:52:30 +0000 Subject: [PATCH] feat(api): add get-app endpoint --- .../src/controllers/api/v1/apps/get-app.ee.js | 8 +++++ .../api/v1/apps/get-app.ee.test.js | 36 +++++++++++++++++++ .../api/v1/apps/get-apps.ee.test.js | 1 + packages/backend/src/routes/api/v1/apps.js | 2 ++ 4 files changed, 47 insertions(+) create mode 100644 packages/backend/src/controllers/api/v1/apps/get-app.ee.js create mode 100644 packages/backend/src/controllers/api/v1/apps/get-app.ee.test.js diff --git a/packages/backend/src/controllers/api/v1/apps/get-app.ee.js b/packages/backend/src/controllers/api/v1/apps/get-app.ee.js new file mode 100644 index 00000000..2f27d3cd --- /dev/null +++ b/packages/backend/src/controllers/api/v1/apps/get-app.ee.js @@ -0,0 +1,8 @@ +import App from '../../../../models/app.js'; +import { renderObject } from '../../../../helpers/renderer.js'; + +export default async (request, response) => { + const app = await App.findOneByKey(request.params.appKey); + + renderObject(response, app, { serializer: 'App' }); +}; diff --git a/packages/backend/src/controllers/api/v1/apps/get-app.ee.test.js b/packages/backend/src/controllers/api/v1/apps/get-app.ee.test.js new file mode 100644 index 00000000..85877fcd --- /dev/null +++ b/packages/backend/src/controllers/api/v1/apps/get-app.ee.test.js @@ -0,0 +1,36 @@ +import { vi, describe, it, expect, beforeEach } from 'vitest'; +import request from 'supertest'; +import App from '../../../../models/app.js'; +import app from '../../../../app.js'; +import { createApiToken } from '../../../../../test/factories/api-token.js'; +import getAppMock from '../../../../../test/mocks/rest/internal/api/v1/apps/get-app.js'; +import * as license from '../../../../helpers/license.ee.js'; + +describe('GET /api/v1/apps/:appKey', () => { + let token; + + beforeEach(async () => { + vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); + + token = (await createApiToken()).token; + }); + + it('should return the app info', async () => { + const exampleApp = await App.findOneByKey('github'); + + const response = await request(app) + .get(`/api/v1/apps/${exampleApp.key}`) + .set('x-api-token', token) + .expect(200); + + const expectedPayload = getAppMock(exampleApp); + expect(response.body).toStrictEqual(expectedPayload); + }); + + it('should return not found response for invalid app key', async () => { + await request(app) + .get('/api/v1/apps/invalid-app-key') + .set('x-api-token', token) + .expect(404); + }); +}); diff --git a/packages/backend/src/controllers/api/v1/apps/get-apps.ee.test.js b/packages/backend/src/controllers/api/v1/apps/get-apps.ee.test.js index 20a94ee1..766875a6 100644 --- a/packages/backend/src/controllers/api/v1/apps/get-apps.ee.test.js +++ b/packages/backend/src/controllers/api/v1/apps/get-apps.ee.test.js @@ -11,6 +11,7 @@ describe('GET /api/v1/apps', () => { beforeEach(async () => { vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); + token = (await createApiToken()).token; apps = await App.findAll(); }); diff --git a/packages/backend/src/routes/api/v1/apps.js b/packages/backend/src/routes/api/v1/apps.js index addfb8eb..ef541872 100644 --- a/packages/backend/src/routes/api/v1/apps.js +++ b/packages/backend/src/routes/api/v1/apps.js @@ -1,8 +1,10 @@ import { Router } from 'express'; +import getAppAction from '../../../controllers/api/v1/apps/get-app.ee.js'; import getAppsAction from '../../../controllers/api/v1/apps/get-apps.ee.js'; const router = Router(); router.get('/', getAppsAction); +router.get('/:appKey', getAppAction); export default router;