diff --git a/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-client.js b/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-client.ee.js similarity index 100% rename from packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-client.js rename to packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-client.ee.js diff --git a/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-client.test.js b/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-client.ee.test.js similarity index 97% rename from packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-client.test.js rename to packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-client.ee.test.js index fcd6d842..e9d18222 100644 --- a/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-client.test.js +++ b/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-client.ee.test.js @@ -4,7 +4,7 @@ import Crypto from 'crypto'; import app from '../../../../../app.js'; import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js'; import { createUser } from '../../../../../../test/factories/user.js'; -import getAdminAppAuthClientMock from '../../../../../../test/mocks/rest/api/v1/admin/get-app-auth-client.js'; +import getAdminAppAuthClientMock from '../../../../../../test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-client.js'; import { createAppAuthClient } from '../../../../../../test/factories/app-auth-client.js'; import { createRole } from '../../../../../../test/factories/role.js'; import * as license from '../../../../../helpers/license.ee.js'; diff --git a/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.js b/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.js new file mode 100644 index 00000000..03d0aeee --- /dev/null +++ b/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.js @@ -0,0 +1,11 @@ +import { renderObject } from '../../../../../helpers/renderer.js'; +import AppAuthClient from '../../../../../models/app-auth-client.js'; + +export default async (request, response) => { + const appAuthClients = await AppAuthClient.query().orderBy( + 'created_at', + 'desc' + ); + + renderObject(response, appAuthClients); +}; diff --git a/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.test.js b/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.test.js new file mode 100644 index 00000000..b3394c89 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.test.js @@ -0,0 +1,41 @@ +import { vi, describe, it, expect, beforeEach } from 'vitest'; +import request from 'supertest'; +import app from '../../../../../app.js'; +import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js'; +import { createUser } from '../../../../../../test/factories/user.js'; +import getAdminAppAuthClientsMock from '../../../../../../test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-clients.js'; +import { createAppAuthClient } from '../../../../../../test/factories/app-auth-client.js'; +import { createRole } from '../../../../../../test/factories/role.js'; +import * as license from '../../../../../helpers/license.ee.js'; + +describe('GET /api/v1/admin/app-auth-clients', () => { + let currentUser, currentUserRole, token; + + describe('with valid license key', () => { + beforeEach(async () => { + vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); + + currentUserRole = await createRole({ key: 'admin' }); + currentUser = await createUser({ roleId: currentUserRole.id }); + + token = createAuthTokenByUserId(currentUser.id); + }); + + it('should return app auth clients', async () => { + const appAuthClientOne = await createAppAuthClient(); + const appAuthClientTwo = await createAppAuthClient(); + + const response = await request(app) + .get('/api/v1/admin/app-auth-clients') + .set('Authorization', token) + .expect(200); + + const expectedPayload = getAdminAppAuthClientsMock([ + appAuthClientTwo, + appAuthClientOne, + ]); + + expect(response.body).toEqual(expectedPayload); + }); + }); +}); diff --git a/packages/backend/src/controllers/api/v1/app-auth-clients/get-app-auth-client.test.js b/packages/backend/src/controllers/api/v1/app-auth-clients/get-app-auth-client.test.js index 6fcd494f..6eef721f 100644 --- a/packages/backend/src/controllers/api/v1/app-auth-clients/get-app-auth-client.test.js +++ b/packages/backend/src/controllers/api/v1/app-auth-clients/get-app-auth-client.test.js @@ -4,7 +4,7 @@ import Crypto from 'crypto'; import app from '../../../../app.js'; import createAuthTokenByUserId from '../../../../helpers/create-auth-token-by-user-id.js'; import { createUser } from '../../../../../test/factories/user.js'; -import getAppAuthClientMock from '../../../../../test/mocks/rest/api/v1/admin/get-app-auth-client.js'; +import getAppAuthClientMock from '../../../../../test/mocks/rest/api/v1/app-auth-clients/get-app-auth-client.js'; import { createAppAuthClient } from '../../../../../test/factories/app-auth-client.js'; import * as license from '../../../../helpers/license.ee.js'; diff --git a/packages/backend/src/routes/api/v1/admin/app-auth-clients.js b/packages/backend/src/routes/api/v1/admin/app-auth-clients.ee.js similarity index 64% rename from packages/backend/src/routes/api/v1/admin/app-auth-clients.js rename to packages/backend/src/routes/api/v1/admin/app-auth-clients.ee.js index 08b18bbb..cda5e2e0 100644 --- a/packages/backend/src/routes/api/v1/admin/app-auth-clients.js +++ b/packages/backend/src/routes/api/v1/admin/app-auth-clients.ee.js @@ -3,16 +3,25 @@ import asyncHandler from 'express-async-handler'; import { authenticateUser } from '../../../../helpers/authentication.js'; import { authorizeAdmin } from '../../../../helpers/authorization.js'; import { checkIsEnterprise } from '../../../../helpers/check-is-enterprise.js'; -import getAdminAppAuthClientsAction from '../../../../controllers/api/v1/admin/app-auth-clients/get-app-auth-client.js'; +import getAdminAppAuthClientsAction from '../../../../controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.js'; +import getAdminAppAuthClientAction from '../../../../controllers/api/v1/admin/app-auth-clients/get-app-auth-client.ee.js'; const router = Router(); router.get( - '/:appAuthClientId', + '/', authenticateUser, authorizeAdmin, checkIsEnterprise, asyncHandler(getAdminAppAuthClientsAction) ); +router.get( + '/:appAuthClientId', + authenticateUser, + authorizeAdmin, + checkIsEnterprise, + asyncHandler(getAdminAppAuthClientAction) +); + export default router; diff --git a/packages/backend/src/routes/index.js b/packages/backend/src/routes/index.js index ffe22cab..b0bc516d 100644 --- a/packages/backend/src/routes/index.js +++ b/packages/backend/src/routes/index.js @@ -18,7 +18,7 @@ import adminSamlAuthProvidersRouter from './api/v1/admin/saml-auth-providers.ee. import rolesRouter from './api/v1/admin/roles.ee.js'; import permissionsRouter from './api/v1/admin/permissions.ee.js'; import adminUsersRouter from './api/v1/admin/users.ee.js'; -import adminAppAuthClientsRouter from './api/v1/admin/app-auth-clients.js'; +import adminAppAuthClientsRouter from './api/v1/admin/app-auth-clients.ee.js'; const router = Router(); diff --git a/packages/backend/test/factories/app-config.js b/packages/backend/test/factories/app-config.js index 4d81cce6..d71ee998 100644 --- a/packages/backend/test/factories/app-config.js +++ b/packages/backend/test/factories/app-config.js @@ -1,7 +1,8 @@ import AppConfig from '../../src/models/app-config.js'; +import { faker } from '@faker-js/faker'; export const createAppConfig = async (params = {}) => { - params.key = params?.key || 'gitlab'; + params.key = params?.key || faker.lorem.word(); const appConfig = await AppConfig.query().insertAndFetch(params); diff --git a/packages/backend/test/mocks/rest/api/v1/admin/get-app-auth-client.js b/packages/backend/test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-client.js similarity index 100% rename from packages/backend/test/mocks/rest/api/v1/admin/get-app-auth-client.js rename to packages/backend/test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-client.js diff --git a/packages/backend/test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-clients.js b/packages/backend/test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-clients.js new file mode 100644 index 00000000..cb40da1a --- /dev/null +++ b/packages/backend/test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-clients.js @@ -0,0 +1,19 @@ +const getAdminAppAuthClientsMock = (appAuthClients) => { + return { + data: appAuthClients.map((appAuthClient) => ({ + appConfigId: appAuthClient.appConfigId, + name: appAuthClient.name, + id: appAuthClient.id, + active: appAuthClient.active, + })), + meta: { + count: appAuthClients.length, + currentPage: null, + isArray: true, + totalPages: null, + type: 'AppAuthClient', + }, + }; +}; + +export default getAdminAppAuthClientsMock; diff --git a/packages/backend/test/mocks/rest/api/v1/get-app-auth-client.js b/packages/backend/test/mocks/rest/api/v1/app-auth-clients/get-app-auth-client.js similarity index 100% rename from packages/backend/test/mocks/rest/api/v1/get-app-auth-client.js rename to packages/backend/test/mocks/rest/api/v1/app-auth-clients/get-app-auth-client.js