diff --git a/packages/backend/src/controllers/api/v1/users/get-user.js b/packages/backend/src/controllers/api/v1/admin/users/get-user.ee.js similarity index 70% rename from packages/backend/src/controllers/api/v1/users/get-user.js rename to packages/backend/src/controllers/api/v1/admin/users/get-user.ee.js index 3ff17303..33507d69 100644 --- a/packages/backend/src/controllers/api/v1/users/get-user.js +++ b/packages/backend/src/controllers/api/v1/admin/users/get-user.ee.js @@ -1,5 +1,5 @@ -import { renderObject } from '../../../../helpers/renderer.js'; -import User from '../../../../models/user.js'; +import { renderObject } from '../../../../../helpers/renderer.js'; +import User from '../../../../../models/user.js'; export default async (request, response) => { const user = await User.query() diff --git a/packages/backend/src/controllers/api/v1/admin/users/get-user.ee.test.js b/packages/backend/src/controllers/api/v1/admin/users/get-user.ee.test.js new file mode 100644 index 00000000..918a9499 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/admin/users/get-user.ee.test.js @@ -0,0 +1,34 @@ +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'; +import { createUser } from '../../../../../../test/factories/user'; +import { createRole } from '../../../../../../test/factories/role'; +import getUserMock from '../../../../../../test/mocks/rest/api/v1/admin/users/get-user.js'; +import * as license from '../../../../../helpers/license.ee.js'; + +describe('GET /api/v1/admin/users/:userId', () => { + let currentUser, currentUserRole, anotherUser, anotherUserRole, token; + + beforeEach(async () => { + currentUserRole = await createRole({ key: 'admin' }); + currentUser = await createUser({ roleId: currentUserRole.id }); + + anotherUser = await createUser(); + anotherUserRole = await anotherUser.$relatedQuery('role'); + + token = createAuthTokenByUserId(currentUser.id); + }); + + it('should return specified user info', async () => { + vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); + + const response = await request(app) + .get(`/api/v1/admin/users/${anotherUser.id}`) + .set('Authorization', token) + .expect(200); + + const expectedPayload = getUserMock(anotherUser, anotherUserRole); + expect(response.body).toEqual(expectedPayload); + }); +}); diff --git a/packages/backend/src/controllers/api/v1/users/get-user.test.js b/packages/backend/src/controllers/api/v1/users/get-user.test.js deleted file mode 100644 index 4ce64f82..00000000 --- a/packages/backend/src/controllers/api/v1/users/get-user.test.js +++ /dev/null @@ -1,36 +0,0 @@ -import { 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'; -import { createUser } from '../../../../../test/factories/user'; -import { createPermission } from '../../../../../test/factories/permission'; -import getUserMock from '../../../../../test/mocks/rest/api/v1/users/get-user'; - -describe('GET /api/v1/users/:userId', () => { - let currentUser, currentUserRole, anotherUser, anotherUserRole, token; - - beforeEach(async () => { - currentUser = await createUser(); - anotherUser = await createUser(); - currentUserRole = await currentUser.$relatedQuery('role'); - anotherUserRole = await anotherUser.$relatedQuery('role'); - - await createPermission({ - roleId: currentUserRole.id, - action: 'read', - subject: 'User', - }); - - token = createAuthTokenByUserId(currentUser.id); - }); - - it('should return specified user info', async () => { - const response = await request(app) - .get(`/api/v1/users/${anotherUser.id}`) - .set('Authorization', token) - .expect(200); - - const expectedPayload = getUserMock(anotherUser, anotherUserRole); - expect(response.body).toEqual(expectedPayload); - }); -}); diff --git a/packages/backend/src/routes/api/v1/admin/users.ee.js b/packages/backend/src/routes/api/v1/admin/users.ee.js index c3b18341..324b3ac1 100644 --- a/packages/backend/src/routes/api/v1/admin/users.ee.js +++ b/packages/backend/src/routes/api/v1/admin/users.ee.js @@ -3,6 +3,7 @@ import { authenticateUser } from '../../../../helpers/authentication.js'; import { authorizeAdmin } from '../../../../helpers/authorization.js'; import { checkIsEnterprise } from '../../../../helpers/check-is-enterprise.js'; import getUsersAction from '../../../../controllers/api/v1/admin/users/get-users.ee.js'; +import getUserAction from '../../../../controllers/api/v1/admin/users/get-user.ee.js'; const router = Router(); @@ -14,4 +15,12 @@ router.get( getUsersAction ); +router.get( + '/:userId', + authenticateUser, + authorizeAdmin, + checkIsEnterprise, + getUserAction +); + export default router; diff --git a/packages/backend/src/routes/api/v1/users.js b/packages/backend/src/routes/api/v1/users.js index 6d2d9e00..d3c1f5e2 100644 --- a/packages/backend/src/routes/api/v1/users.js +++ b/packages/backend/src/routes/api/v1/users.js @@ -1,15 +1,13 @@ import { Router } from 'express'; import { authenticateUser } from '../../../helpers/authentication.js'; -import { authorizeUser } from '../../../helpers/authorization.js'; import checkIsCloud from '../../../helpers/check-is-cloud.js'; import getCurrentUserAction from '../../../controllers/api/v1/users/get-current-user.js'; -import getUserAction from '../../../controllers/api/v1/users/get-user.js'; import getUserTrialAction from '../../../controllers/api/v1/users/get-user-trial.ee.js'; const router = Router(); router.get('/me', authenticateUser, getCurrentUserAction); -router.get('/:userId', authenticateUser, authorizeUser, getUserAction); + router.get( '/:userId/trial', authenticateUser, diff --git a/packages/backend/test/mocks/rest/api/v1/users/get-user.js b/packages/backend/test/mocks/rest/api/v1/admin/users/get-user.js similarity index 100% rename from packages/backend/test/mocks/rest/api/v1/users/get-user.js rename to packages/backend/test/mocks/rest/api/v1/admin/users/get-user.js