Skip to content

Commit

Permalink
refactor(api): move and rename get-user-details-for-admin controlelr
Browse files Browse the repository at this point in the history
  • Loading branch information
er-lim committed Nov 4, 2024
1 parent 564cbb8 commit b26b076
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 35 deletions.
7 changes: 0 additions & 7 deletions api/lib/application/users/user-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,6 @@ import * as participantResultSerializer from '../../infrastructure/serializers/j
import * as userAnonymizedDetailsForAdminSerializer from '../../infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer.js';
import * as userOrganizationForAdminSerializer from '../../infrastructure/serializers/jsonapi/user-organization-for-admin-serializer.js';

const getUserDetailsForAdmin = async function (request, h, dependencies = { userDetailsForAdminSerializer }) {
const userId = request.params.id;
const userDetailsForAdmin = await usecases.getUserDetailsForAdmin({ userId });
return dependencies.userDetailsForAdminSerializer.serialize(userDetailsForAdmin);
};

const rememberUserHasSeenAssessmentInstructions = async function (request, h, dependencies = { userSerializer }) {
const authenticatedUserId = request.auth.credentials.userId;

Expand Down Expand Up @@ -219,7 +213,6 @@ const userController = {
getCampaignParticipations,
getUserCampaignAssessmentResult,
getUserCampaignParticipationToCampaign,
getUserDetailsForAdmin,
reassignAuthenticationMethods,
rememberUserHasSeenAssessmentInstructions,
rememberUserHasSeenChallengeTooltip,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { usecases as libUsecases } from '../../../../lib/domain/usecases/index.js';
import { usecases } from '../../domain/usecases/index.js';
import * as userDetailsForAdminSerializer from '../../infrastructure/serializers/jsonapi/user-details-for-admin.serializer.js';
import * as userForAdminSerializer from '../../infrastructure/serializers/jsonapi/user-for-admin.serializer.js';
Expand Down Expand Up @@ -48,12 +49,32 @@ const updateUserDetailsByAdmin = async function (request, h, dependencies = { us
return dependencies.userDetailsForAdminSerializer.serializeForUpdate(updatedUser);
};

/**
*
* @param request
* @param h
* @param dependencies
* @param {UserDetailsForAdminSerializer} dependencies.userDetailsForAdminSerializer
* @returns {Promise<*>}
*/
const getUserDetails = async function (request, h, dependencies = { userDetailsForAdminSerializer }) {
const userId = request.params.id;
const userDetailsForAdmin = await libUsecases.getUserDetailsForAdmin({ userId });
return dependencies.userDetailsForAdminSerializer.serialize(userDetailsForAdmin);
};

/**
* @typedef {object} UserAdminController
* @property {function} findPaginatedFilteredUsers
* @property {function} getUserDetails
* @property {function} unblockUserAccount
* @property {function} updateUserDetailsByAdmin
*/
const userAdminController = { findPaginatedFilteredUsers, unblockUserAccount, updateUserDetailsByAdmin };
const userAdminController = {
findPaginatedFilteredUsers,
getUserDetails,
unblockUserAccount,
updateUserDetailsByAdmin,
};

export { userAdminController };
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import Joi from 'joi';

import { userController } from '../../../../lib/application/users/user-controller.js';
import { BadRequestError, sendJsonApiError } from '../../../shared/application/http-errors.js';
import { securityPreHandlers } from '../../../shared/application/security-pre-handlers.js';
import { SUPPORTED_LOCALES } from '../../../shared/domain/constants.js';
Expand Down Expand Up @@ -145,7 +144,7 @@ export const userAdminRoutes = [
])(request, h),
},
],
handler: (request, h) => userController.getUserDetailsForAdmin(request, h),
handler: (request, h) => userAdminController.getUserDetails(request, h),
notes: [
'- **Cette route est restreinte aux utilisateurs administrateurs**\n' +
"- Elle permet de récupérer le détail d'un utilisateur dans un contexte d'administration",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { usecases as libUsecases } from '../../../../../lib/domain/usecases/index.js';
import { userAdminController } from '../../../../../src/identity-access-management/application/user/user.admin.controller.js';
import { User } from '../../../../../src/identity-access-management/domain/models/User.js';
import { usecases } from '../../../../../src/identity-access-management/domain/usecases/index.js';
Expand Down Expand Up @@ -159,4 +160,29 @@ describe('Unit | Identity Access Management | Application | Controller | Admin |
expect(response).to.be.equal(newEmail);
});
});

describe('#getUserDetails', function () {
let request;
let dependencies;

beforeEach(function () {
request = { params: { id: 123 } };

sinon.stub(libUsecases, 'getUserDetailsForAdmin');
const userDetailsForAdminSerializer = { serialize: sinon.stub() };
dependencies = { userDetailsForAdminSerializer };
});

it('gets the specified user', async function () {
// given
libUsecases.getUserDetailsForAdmin.withArgs({ userId: 123 }).resolves('userDetail');
dependencies.userDetailsForAdminSerializer.serialize.withArgs('userDetail').returns('ok');

// when
const response = await userAdminController.getUserDetails(request, hFake, dependencies);

// then
expect(response).to.be.equal('ok');
});
});
});
25 changes: 0 additions & 25 deletions api/tests/unit/application/users/user-controller_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,31 +92,6 @@ describe('Unit | Controller | user-controller', function () {
});
});

describe('#getUserDetailsForAdmin', function () {
let request;
let dependencies;

beforeEach(function () {
request = { params: { id: 123 } };

sinon.stub(usecases, 'getUserDetailsForAdmin');
const userDetailsForAdminSerializer = { serialize: sinon.stub() };
dependencies = { userDetailsForAdminSerializer };
});

it('should get the specified user for admin context', async function () {
// given
usecases.getUserDetailsForAdmin.withArgs({ userId: 123 }).resolves('userDetail');
dependencies.userDetailsForAdminSerializer.serialize.withArgs('userDetail').returns('ok');

// when
const response = await userController.getUserDetailsForAdmin(request, hFake, dependencies);

// then
expect(response).to.be.equal('ok');
});
});

describe('#findPaginatedUserRecommendedTrainings', function () {
it('should call the appropriate use-case', async function () {
// given
Expand Down

0 comments on commit b26b076

Please sign in to comment.