From 5dca0191d2efe744cfd5c5a47142813969187b1e Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Wed, 28 Feb 2024 16:16:08 +0100 Subject: [PATCH] feat: Implement get app auth API endpoint --- .../src/controllers/api/v1/apps/get-auth.js | 8 +++++ .../controllers/api/v1/apps/get-auth.test.js | 35 +++++++++++++++++++ packages/backend/src/routes/api/v1/apps.js | 2 ++ .../test/mocks/rest/api/v1/apps/get-auth.js | 18 ++++++++++ 4 files changed, 63 insertions(+) create mode 100644 packages/backend/src/controllers/api/v1/apps/get-auth.js create mode 100644 packages/backend/src/controllers/api/v1/apps/get-auth.test.js create mode 100644 packages/backend/test/mocks/rest/api/v1/apps/get-auth.js diff --git a/packages/backend/src/controllers/api/v1/apps/get-auth.js b/packages/backend/src/controllers/api/v1/apps/get-auth.js new file mode 100644 index 00000000..37b30753 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/apps/get-auth.js @@ -0,0 +1,8 @@ +import App from '../../../../models/app.js'; +import { renderObject } from '../../../../helpers/renderer.js'; + +export default async (request, response) => { + const auth = await App.findAuthByKey(request.params.appKey); + + renderObject(response, auth, { serializer: 'Auth' }); +}; diff --git a/packages/backend/src/controllers/api/v1/apps/get-auth.test.js b/packages/backend/src/controllers/api/v1/apps/get-auth.test.js new file mode 100644 index 00000000..b846e607 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/apps/get-auth.test.js @@ -0,0 +1,35 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import request from 'supertest'; +import App from '../../../../models/app'; +import app from '../../../../app.js'; +import createAuthTokenByUserId from '../../../../helpers/create-auth-token-by-user-id'; +import { createUser } from '../../../../../test/factories/user'; +import getAuthMock from '../../../../../test/mocks/rest/api/v1/apps/get-auth.js'; + +describe('GET /api/v1/apps/:appKey/auth', () => { + let currentUser, token; + + beforeEach(async () => { + currentUser = await createUser(); + token = createAuthTokenByUserId(currentUser.id); + }); + + it('should return the app auth info', async () => { + const exampleApp = await App.findOneByKey('github'); + + const response = await request(app) + .get(`/api/v1/apps/${exampleApp.key}/auth`) + .set('Authorization', token) + .expect(200); + + const expectedPayload = getAuthMock(exampleApp.auth); + expect(response.body).toEqual(expectedPayload); + }); + + it('should return not found response for invalid app key', async () => { + await request(app) + .get('/api/v1/apps/invalid-app-key') + .set('Authorization', token) + .expect(404); + }); +}); diff --git a/packages/backend/src/routes/api/v1/apps.js b/packages/backend/src/routes/api/v1/apps.js index b5d23b4a..2f696bb1 100644 --- a/packages/backend/src/routes/api/v1/apps.js +++ b/packages/backend/src/routes/api/v1/apps.js @@ -2,9 +2,11 @@ import { Router } from 'express'; import asyncHandler from 'express-async-handler'; import { authenticateUser } from '../../../helpers/authentication.js'; import getAppAction from '../../../controllers/api/v1/apps/get-app.js'; +import getAuthAction from '../../../controllers/api/v1/apps/get-auth.js'; const router = Router(); router.get('/:appKey', authenticateUser, asyncHandler(getAppAction)); +router.get('/:appKey/auth', authenticateUser, asyncHandler(getAuthAction)); export default router; diff --git a/packages/backend/test/mocks/rest/api/v1/apps/get-auth.js b/packages/backend/test/mocks/rest/api/v1/apps/get-auth.js new file mode 100644 index 00000000..68ea18cd --- /dev/null +++ b/packages/backend/test/mocks/rest/api/v1/apps/get-auth.js @@ -0,0 +1,18 @@ +const getAuthMock = (auth) => { + return { + data: { + fields: auth.fields, + authenticationSteps: auth.authenticationSteps, + reconnectionSteps: auth.reconnectionSteps, + }, + meta: { + count: 1, + currentPage: null, + isArray: false, + totalPages: null, + type: 'Object', + }, + }; +}; + +export default getAuthMock;