Skip to content

Commit 48c3e9b

Browse files
[TECH] Migration de la route GET /api/admin/certification-centers/{certificationCenterId}/certification-center-memberships (PIX-16758)
#11529
2 parents cc28c26 + 018f6e1 commit 48c3e9b

File tree

8 files changed

+142
-131
lines changed

8 files changed

+142
-131
lines changed

api/lib/application/certification-centers/certification-center-controller.js

-16
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,5 @@
1-
import * as certificationCenterMembershipSerializer from '../../../src/shared/infrastructure/serializers/jsonapi/certification-center-membership.serializer.js';
2-
import { usecases as teamUsecases } from '../../../src/team/domain/usecases/index.js';
31
import { usecases } from '../../domain/usecases/index.js';
42

5-
const findCertificationCenterMembershipsByCertificationCenter = async function (
6-
request,
7-
h,
8-
dependencies = { certificationCenterMembershipSerializer },
9-
) {
10-
const certificationCenterId = request.params.certificationCenterId;
11-
const certificationCenterMemberships = await teamUsecases.findCertificationCenterMembershipsByCertificationCenter({
12-
certificationCenterId,
13-
});
14-
15-
return dependencies.certificationCenterMembershipSerializer.serialize(certificationCenterMemberships);
16-
};
17-
183
const updateReferer = async function (request, h) {
194
const certificationCenterId = request.params.certificationCenterId;
205
const { userId, isReferer } = request.payload.data.attributes;
@@ -28,7 +13,6 @@ const updateReferer = async function (request, h) {
2813
};
2914

3015
const certificationCenterController = {
31-
findCertificationCenterMembershipsByCertificationCenter,
3216
updateReferer,
3317
};
3418

api/lib/application/certification-centers/index.js

+1-35
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,7 @@
1-
import Joi from 'joi';
2-
31
import { securityPreHandlers } from '../../../src/shared/application/security-pre-handlers.js';
4-
import { identifiersType } from '../../../src/shared/domain/types/identifiers-type.js';
52
import { certificationCenterController } from './certification-center-controller.js';
63

74
const register = async function (server) {
8-
const adminRoutes = [
9-
{
10-
method: 'GET',
11-
path: '/api/admin/certification-centers/{certificationCenterId}/certification-center-memberships',
12-
config: {
13-
pre: [
14-
{
15-
method: (request, h) =>
16-
securityPreHandlers.hasAtLeastOneAccessOf([
17-
securityPreHandlers.checkAdminMemberHasRoleSuperAdmin,
18-
securityPreHandlers.checkAdminMemberHasRoleCertif,
19-
securityPreHandlers.checkAdminMemberHasRoleSupport,
20-
securityPreHandlers.checkAdminMemberHasRoleMetier,
21-
])(request, h),
22-
assign: 'hasAuthorizationToAccessAdminScope',
23-
},
24-
],
25-
validate: {
26-
params: Joi.object({
27-
certificationCenterId: identifiersType.certificationCenterId,
28-
}),
29-
},
30-
handler: certificationCenterController.findCertificationCenterMembershipsByCertificationCenter,
31-
notes: [
32-
"- **Cette route est restreinte aux utilisateurs ayant les droits d'accès**\n" +
33-
"- Récupération de tous les membres d'un centre de certification.\n",
34-
],
35-
tags: ['api', 'admin', 'certification-center-membership'],
36-
},
37-
},
38-
];
395
const certifRoutes = [
406
{
417
method: 'POST',
@@ -57,7 +23,7 @@ const register = async function (server) {
5723
},
5824
];
5925

60-
server.route([...adminRoutes, ...certifRoutes]);
26+
server.route([...certifRoutes]);
6127
};
6228

6329
const name = 'certification-centers-api';

api/src/team/application/certification-center-membership/certification-center-membership.admin.controller.js

+14
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,19 @@ import * as certificationCenterMembershipSerializer from '../../../shared/infras
33
import { requestResponseUtils } from '../../../shared/infrastructure/utils/request-response-utils.js';
44
import { usecases } from '../../domain/usecases/index.js';
55

6+
const findCertificationCenterMembershipsByCertificationCenter = async function (
7+
request,
8+
h,
9+
dependencies = { certificationCenterMembershipSerializer },
10+
) {
11+
const certificationCenterId = request.params.certificationCenterId;
12+
const certificationCenterMemberships = await usecases.findCertificationCenterMembershipsByCertificationCenter({
13+
certificationCenterId,
14+
});
15+
16+
return dependencies.certificationCenterMembershipSerializer.serialize(certificationCenterMemberships);
17+
};
18+
619
const updateRole = async function (
720
request,
821
h,
@@ -72,6 +85,7 @@ const findCertificationCenterMembershipsByUser = async function (
7285
};
7386

7487
const certificationCenterMembershipAdminController = {
88+
findCertificationCenterMembershipsByCertificationCenter,
7589
updateRole,
7690
disableFromPixAdmin,
7791
createCertificationCenterMembershipByEmail,

api/src/team/application/certification-center-membership/certification-center-membership.admin.route.js

+29
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,35 @@ export const certificationCenterMembershipAdminRoutes = [
8181
tags: ['api', 'certification-center-membership'],
8282
},
8383
},
84+
{
85+
method: 'GET',
86+
path: '/api/admin/certification-centers/{certificationCenterId}/certification-center-memberships',
87+
config: {
88+
pre: [
89+
{
90+
method: (request, h) =>
91+
securityPreHandlers.hasAtLeastOneAccessOf([
92+
securityPreHandlers.checkAdminMemberHasRoleSuperAdmin,
93+
securityPreHandlers.checkAdminMemberHasRoleCertif,
94+
securityPreHandlers.checkAdminMemberHasRoleSupport,
95+
securityPreHandlers.checkAdminMemberHasRoleMetier,
96+
])(request, h),
97+
assign: 'hasAuthorizationToAccessAdminScope',
98+
},
99+
],
100+
validate: {
101+
params: Joi.object({
102+
certificationCenterId: identifiersType.certificationCenterId,
103+
}),
104+
},
105+
handler: certificationCenterMembershipAdminController.findCertificationCenterMembershipsByCertificationCenter,
106+
notes: [
107+
"- **Cette route est restreinte aux utilisateurs ayant les droits d'accès**\n" +
108+
"- Récupération de tous les membres d'un centre de certification.\n",
109+
],
110+
tags: ['api', 'admin', 'certification-center-membership'],
111+
},
112+
},
84113
{
85114
method: 'POST',
86115
path: '/api/admin/certification-centers/{certificationCenterId}/certification-center-memberships',

api/tests/team/acceptance/application/certification-center-membership/certification-center-membership.admin.route.test.js

+59
Original file line numberDiff line numberDiff line change
@@ -415,4 +415,63 @@ describe('Acceptance | Team | Application | Admin | Routes | certification-cente
415415
});
416416
});
417417
});
418+
419+
describe('GET /api/admin/certification-centers/{certificationCenterId}/certification-center-memberships', function () {
420+
let certificationCenterId;
421+
let email;
422+
let request;
423+
424+
beforeEach(async function () {
425+
email = '[email protected]';
426+
const user = databaseBuilder.factory.buildUser({ email });
427+
certificationCenterId = databaseBuilder.factory.buildCertificationCenter().id;
428+
databaseBuilder.factory.buildCertificationCenterMembership({
429+
certificationCenterId,
430+
userId: user.id,
431+
});
432+
const adminId = databaseBuilder.factory.buildUser.withRole().id;
433+
434+
request = {
435+
headers: generateAuthenticatedUserRequestHeaders({ userId: adminId }),
436+
method: 'GET',
437+
url: `/api/admin/certification-centers/${certificationCenterId}/certification-center-memberships`,
438+
};
439+
440+
await databaseBuilder.commit();
441+
});
442+
443+
it('should return 200 HTTP status', async function () {
444+
// when
445+
const response = await server.inject(request);
446+
447+
// then
448+
expect(response.statusCode).to.equal(200);
449+
});
450+
451+
context('when user is not SuperAdmin', function () {
452+
it('should return 403 HTTP status code ', async function () {
453+
// given
454+
request.headers = generateAuthenticatedUserRequestHeaders({ userId: 1111 });
455+
456+
// when
457+
const response = await server.inject(request);
458+
459+
// then
460+
expect(response.statusCode).to.equal(403);
461+
});
462+
});
463+
464+
context('when user is not authenticated', function () {
465+
it('should return 401 HTTP status code', async function () {
466+
// given
467+
request.headers.authorization = 'invalid.access.token';
468+
469+
// when
470+
const response = await server.inject(request);
471+
472+
// then
473+
expect(response.statusCode).to.equal(401);
474+
});
475+
});
476+
});
418477
});

api/tests/team/unit/application/certification-center-membership/certification-center-membership.admin.controller.test.js

+39
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,45 @@ import { usecases } from '../../../../../src/team/domain/usecases/index.js';
33
import { domainBuilder, expect, hFake, sinon } from '../../../../test-helper.js';
44

55
describe('Unit | Team | Application | Controller | CertificationCenterMembershipAdminController', function () {
6+
describe('#findCertificationCenterMembershipsByCertificationCenter', function () {
7+
const certificationCenterId = 1;
8+
9+
const request = {
10+
params: {
11+
certificationCenterId,
12+
},
13+
};
14+
let certificationCenterMembershipSerializerStub;
15+
16+
beforeEach(function () {
17+
sinon.stub(usecases, 'findCertificationCenterMembershipsByCertificationCenter');
18+
certificationCenterMembershipSerializerStub = {
19+
serialize: sinon.stub(),
20+
};
21+
});
22+
23+
it('should call usecase and serializer and return ok', async function () {
24+
// given
25+
usecases.findCertificationCenterMembershipsByCertificationCenter
26+
.withArgs({
27+
certificationCenterId,
28+
})
29+
.resolves({});
30+
certificationCenterMembershipSerializerStub.serialize.withArgs({}).returns('ok');
31+
32+
// when
33+
const response =
34+
await certificationCenterMembershipAdminController.findCertificationCenterMembershipsByCertificationCenter(
35+
request,
36+
hFake,
37+
{ certificationCenterMembershipSerializer: certificationCenterMembershipSerializerStub },
38+
);
39+
40+
// then
41+
expect(response).to.equal('ok');
42+
});
43+
});
44+
645
describe('#createCertificationCenterMembershipByEmail', function () {
746
const certificationCenterId = 1;
847
const email = '[email protected]';

api/tests/unit/application/certification-centers/certification-center-controller_test.js

-39
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,8 @@
11
import { certificationCenterController } from '../../../../lib/application/certification-centers/certification-center-controller.js';
22
import { usecases } from '../../../../lib/domain/usecases/index.js';
3-
import { usecases as teamUsecases } from '../../../../src/team/domain/usecases/index.js';
43
import { expect, hFake, sinon } from '../../../test-helper.js';
54

65
describe('Unit | Controller | certifications-center-controller', function () {
7-
describe('#findCertificationCenterMembershipsByCertificationCenter', function () {
8-
const certificationCenterId = 1;
9-
10-
const request = {
11-
params: {
12-
certificationCenterId,
13-
},
14-
};
15-
let certificationCenterMembershipSerializerStub;
16-
17-
beforeEach(function () {
18-
sinon.stub(teamUsecases, 'findCertificationCenterMembershipsByCertificationCenter');
19-
certificationCenterMembershipSerializerStub = {
20-
serialize: sinon.stub(),
21-
};
22-
});
23-
24-
it('should call usecase and serializer and return ok', async function () {
25-
// given
26-
teamUsecases.findCertificationCenterMembershipsByCertificationCenter
27-
.withArgs({
28-
certificationCenterId,
29-
})
30-
.resolves({});
31-
certificationCenterMembershipSerializerStub.serialize.withArgs({}).returns('ok');
32-
33-
// when
34-
const response = await certificationCenterController.findCertificationCenterMembershipsByCertificationCenter(
35-
request,
36-
hFake,
37-
{ certificationCenterMembershipSerializer: certificationCenterMembershipSerializerStub },
38-
);
39-
40-
// then
41-
expect(response).to.equal('ok');
42-
});
43-
});
44-
456
describe('#updateReferer', function () {
467
it('should call updateCertificationCenterReferer usecase and return 204', async function () {
478
// given

api/tests/unit/application/certification-centers/index_test.js

-41
This file was deleted.

0 commit comments

Comments
 (0)