Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TECH] Migration de la route GET /api/admin/certification-centers/{certificationCenterId}/certification-center-memberships (PIX-16758) #11529

Open
wants to merge 1 commit into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,20 +1,5 @@
import * as certificationCenterMembershipSerializer from '../../../src/shared/infrastructure/serializers/jsonapi/certification-center-membership.serializer.js';
import { usecases as teamUsecases } from '../../../src/team/domain/usecases/index.js';
import { usecases } from '../../domain/usecases/index.js';

const findCertificationCenterMembershipsByCertificationCenter = async function (
request,
h,
dependencies = { certificationCenterMembershipSerializer },
) {
const certificationCenterId = request.params.certificationCenterId;
const certificationCenterMemberships = await teamUsecases.findCertificationCenterMembershipsByCertificationCenter({
certificationCenterId,
});

return dependencies.certificationCenterMembershipSerializer.serialize(certificationCenterMemberships);
};

const updateReferer = async function (request, h) {
const certificationCenterId = request.params.certificationCenterId;
const { userId, isReferer } = request.payload.data.attributes;
Expand All @@ -28,7 +13,6 @@ const updateReferer = async function (request, h) {
};

const certificationCenterController = {
findCertificationCenterMembershipsByCertificationCenter,
updateReferer,
};

Expand Down
36 changes: 1 addition & 35 deletions api/lib/application/certification-centers/index.js
Original file line number Diff line number Diff line change
@@ -1,41 +1,7 @@
import Joi from 'joi';

import { securityPreHandlers } from '../../../src/shared/application/security-pre-handlers.js';
import { identifiersType } from '../../../src/shared/domain/types/identifiers-type.js';
import { certificationCenterController } from './certification-center-controller.js';

const register = async function (server) {
const adminRoutes = [
{
method: 'GET',
path: '/api/admin/certification-centers/{certificationCenterId}/certification-center-memberships',
config: {
pre: [
{
method: (request, h) =>
securityPreHandlers.hasAtLeastOneAccessOf([
securityPreHandlers.checkAdminMemberHasRoleSuperAdmin,
securityPreHandlers.checkAdminMemberHasRoleCertif,
securityPreHandlers.checkAdminMemberHasRoleSupport,
securityPreHandlers.checkAdminMemberHasRoleMetier,
])(request, h),
assign: 'hasAuthorizationToAccessAdminScope',
},
],
validate: {
params: Joi.object({
certificationCenterId: identifiersType.certificationCenterId,
}),
},
handler: certificationCenterController.findCertificationCenterMembershipsByCertificationCenter,
notes: [
"- **Cette route est restreinte aux utilisateurs ayant les droits d'accès**\n" +
"- Récupération de tous les membres d'un centre de certification.\n",
],
tags: ['api', 'admin', 'certification-center-membership'],
},
},
];
const certifRoutes = [
{
method: 'POST',
Expand All @@ -57,7 +23,7 @@ const register = async function (server) {
},
];

server.route([...adminRoutes, ...certifRoutes]);
server.route([...certifRoutes]);
};

const name = 'certification-centers-api';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,19 @@ import * as certificationCenterMembershipSerializer from '../../../shared/infras
import { requestResponseUtils } from '../../../shared/infrastructure/utils/request-response-utils.js';
import { usecases } from '../../domain/usecases/index.js';

const findCertificationCenterMembershipsByCertificationCenter = async function (
request,
h,
dependencies = { certificationCenterMembershipSerializer },
) {
const certificationCenterId = request.params.certificationCenterId;
const certificationCenterMemberships = await usecases.findCertificationCenterMembershipsByCertificationCenter({
certificationCenterId,
});

return dependencies.certificationCenterMembershipSerializer.serialize(certificationCenterMemberships);
};

const updateRole = async function (
request,
h,
Expand Down Expand Up @@ -72,6 +85,7 @@ const findCertificationCenterMembershipsByUser = async function (
};

const certificationCenterMembershipAdminController = {
findCertificationCenterMembershipsByCertificationCenter,
updateRole,
disableFromPixAdmin,
createCertificationCenterMembershipByEmail,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,35 @@ export const certificationCenterMembershipAdminRoutes = [
tags: ['api', 'certification-center-membership'],
},
},
{
method: 'GET',
path: '/api/admin/certification-centers/{certificationCenterId}/certification-center-memberships',
config: {
pre: [
{
method: (request, h) =>
securityPreHandlers.hasAtLeastOneAccessOf([
securityPreHandlers.checkAdminMemberHasRoleSuperAdmin,
securityPreHandlers.checkAdminMemberHasRoleCertif,
securityPreHandlers.checkAdminMemberHasRoleSupport,
securityPreHandlers.checkAdminMemberHasRoleMetier,
])(request, h),
assign: 'hasAuthorizationToAccessAdminScope',
},
],
validate: {
params: Joi.object({
certificationCenterId: identifiersType.certificationCenterId,
}),
},
handler: certificationCenterMembershipAdminController.findCertificationCenterMembershipsByCertificationCenter,
notes: [
"- **Cette route est restreinte aux utilisateurs ayant les droits d'accès**\n" +
"- Récupération de tous les membres d'un centre de certification.\n",
],
tags: ['api', 'admin', 'certification-center-membership'],
},
},
{
method: 'POST',
path: '/api/admin/certification-centers/{certificationCenterId}/certification-center-memberships',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -415,4 +415,63 @@ describe('Acceptance | Team | Application | Admin | Routes | certification-cente
});
});
});

describe('GET /api/admin/certification-centers/{certificationCenterId}/certification-center-memberships', function () {
let certificationCenterId;
let email;
let request;

beforeEach(async function () {
email = '[email protected]';
const user = databaseBuilder.factory.buildUser({ email });
certificationCenterId = databaseBuilder.factory.buildCertificationCenter().id;
databaseBuilder.factory.buildCertificationCenterMembership({
certificationCenterId,
userId: user.id,
});
const adminId = databaseBuilder.factory.buildUser.withRole().id;

request = {
headers: generateAuthenticatedUserRequestHeaders({ userId: adminId }),
method: 'GET',
url: `/api/admin/certification-centers/${certificationCenterId}/certification-center-memberships`,
};

await databaseBuilder.commit();
});

it('should return 200 HTTP status', async function () {
// when
const response = await server.inject(request);

// then
expect(response.statusCode).to.equal(200);
});

context('when user is not SuperAdmin', function () {
it('should return 403 HTTP status code ', async function () {
// given
request.headers = generateAuthenticatedUserRequestHeaders({ userId: 1111 });

// when
const response = await server.inject(request);

// then
expect(response.statusCode).to.equal(403);
});
});

context('when user is not authenticated', function () {
it('should return 401 HTTP status code', async function () {
// given
request.headers.authorization = 'invalid.access.token';

// when
const response = await server.inject(request);

// then
expect(response.statusCode).to.equal(401);
});
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,45 @@ import { usecases } from '../../../../../src/team/domain/usecases/index.js';
import { domainBuilder, expect, hFake, sinon } from '../../../../test-helper.js';

describe('Unit | Team | Application | Controller | CertificationCenterMembershipAdminController', function () {
describe('#findCertificationCenterMembershipsByCertificationCenter', function () {
const certificationCenterId = 1;

const request = {
params: {
certificationCenterId,
},
};
let certificationCenterMembershipSerializerStub;

beforeEach(function () {
sinon.stub(usecases, 'findCertificationCenterMembershipsByCertificationCenter');
certificationCenterMembershipSerializerStub = {
serialize: sinon.stub(),
};
});

it('should call usecase and serializer and return ok', async function () {
// given
usecases.findCertificationCenterMembershipsByCertificationCenter
.withArgs({
certificationCenterId,
})
.resolves({});
certificationCenterMembershipSerializerStub.serialize.withArgs({}).returns('ok');

// when
const response =
await certificationCenterMembershipAdminController.findCertificationCenterMembershipsByCertificationCenter(
request,
hFake,
{ certificationCenterMembershipSerializer: certificationCenterMembershipSerializerStub },
);

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

describe('#createCertificationCenterMembershipByEmail', function () {
const certificationCenterId = 1;
const email = '[email protected]';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,8 @@
import { certificationCenterController } from '../../../../lib/application/certification-centers/certification-center-controller.js';
import { usecases } from '../../../../lib/domain/usecases/index.js';
import { usecases as teamUsecases } from '../../../../src/team/domain/usecases/index.js';
import { expect, hFake, sinon } from '../../../test-helper.js';

describe('Unit | Controller | certifications-center-controller', function () {
describe('#findCertificationCenterMembershipsByCertificationCenter', function () {
const certificationCenterId = 1;

const request = {
params: {
certificationCenterId,
},
};
let certificationCenterMembershipSerializerStub;

beforeEach(function () {
sinon.stub(teamUsecases, 'findCertificationCenterMembershipsByCertificationCenter');
certificationCenterMembershipSerializerStub = {
serialize: sinon.stub(),
};
});

it('should call usecase and serializer and return ok', async function () {
// given
teamUsecases.findCertificationCenterMembershipsByCertificationCenter
.withArgs({
certificationCenterId,
})
.resolves({});
certificationCenterMembershipSerializerStub.serialize.withArgs({}).returns('ok');

// when
const response = await certificationCenterController.findCertificationCenterMembershipsByCertificationCenter(
request,
hFake,
{ certificationCenterMembershipSerializer: certificationCenterMembershipSerializerStub },
);

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

describe('#updateReferer', function () {
it('should call updateCertificationCenterReferer usecase and return 204', async function () {
// given
Expand Down
41 changes: 0 additions & 41 deletions api/tests/unit/application/certification-centers/index_test.js

This file was deleted.