Skip to content

Commit

Permalink
[BUGFIX] Ajouter les validations Joi sur les routes pour lesquelles i…
Browse files Browse the repository at this point in the history
…l en manquait

 #9466
  • Loading branch information
pix-service-auto-merge authored Jul 9, 2024
2 parents c8453d3 + de59774 commit 05a1047
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 8 deletions.
14 changes: 11 additions & 3 deletions api/lib/application/certification-centers/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +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 { identifiersType, optionalIdentifiersType } from '../../../src/shared/domain/types/identifiers-type.js';
import { certificationCenterController } from './certification-center-controller.js';

const register = async function (server) {
Expand Down Expand Up @@ -49,8 +49,16 @@ const register = async function (server) {
],
validate: {
query: Joi.object({
page: Joi.object().default({}),
filter: Joi.object().default({}),
page: Joi.object({
number: Joi.number().integer(),
size: Joi.number().integer(),
}).default({}),
filter: Joi.object({
id: optionalIdentifiersType.certificationCenterId,
name: Joi.string().trim().empty('').allow(null).optional(),
type: Joi.string().trim().empty('').allow(null).optional(),
externalId: Joi.string().trim().empty('').allow(null).optional(),
}).default({}),
}),
},
notes: [
Expand Down
14 changes: 12 additions & 2 deletions api/lib/application/organizations/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,12 @@ const register = async function (server) {
id: identifiersType.organizationId,
}),
query: Joi.object({
filter: Joi.object({}).default({}),
filter: Joi.object({
firstName: Joi.string().empty('').allow(null).optional(),
lastName: Joi.string().empty('').allow(null).optional(),
email: Joi.string().empty('').allow(null).optional(),
organizationRole: Joi.string().empty('').allow(null).optional(),
}).default({}),
page: Joi.object({
number: Joi.number().integer().empty('').allow(null).optional(),
size: Joi.number().integer().empty('').allow(null).optional(),
Expand Down Expand Up @@ -320,7 +325,12 @@ const register = async function (server) {
id: identifiersType.organizationId,
}),
query: Joi.object({
filter: Joi.object({}).default({}),
filter: Joi.object({
firstName: Joi.string().empty('').allow(null).optional(),
lastName: Joi.string().empty('').allow(null).optional(),
email: Joi.string().empty('').allow(null).optional(),
organizationRole: Joi.string().empty('').allow(null).optional(),
}).default({}),
page: Joi.object({
number: Joi.number().integer().empty('').allow(null).optional(),
size: Joi.number().integer().empty('').allow(null).optional(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ const register = async function (server) {
filter: Joi.object({
name: Joi.string().empty(''),
status: Joi.string().empty(''),
isOwnedByMe: Joi.boolean().empty(''),
isOwnedByMe: Joi.boolean().empty('').allow(null).optional(),
ownerName: Joi.string().empty('').allow(null).optional(),
}).default({}),
}),
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,28 @@ describe('Acceptance | Route | Certification Centers', function () {
server = await createServer();
});

describe('GET /api/admin/certification-centers', function () {
it('should return an HTTP code 200 and a list of certification centers', async function () {
// given
const adminMember = await insertUserWithRoleSuperAdmin();
databaseBuilder.factory.buildCertificationCenter();

await databaseBuilder.commit();

//when
const { result, statusCode } = await server.inject({
headers: {
authorization: generateValidRequestAuthorizationHeader(adminMember.id),
},
method: 'GET',
url: `/api/admin/certification-centers`,
});

expect(statusCode).to.equal(200);
expect(result.data.length).to.equal(1);
});
});

describe('PATCH /api/admin/certification-centers/{id}', function () {
context('when an admin member updates a certification center information', function () {
it('it should return an HTTP code 200 with the updated data', async function () {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,7 @@ describe('Acceptance | Application | organization-controller', function () {
// when
const response = await server.inject({
method: 'GET',
url: `/api/organizations/${organizationId}/memberships`,
url: `/api/organizations/${organizationId}/memberships/?filter[email]=&filter[firstName]=&filter[lastName]=&filter[organizationRole]=`,
headers: { authorization: generateValidRequestAuthorizationHeader(adminOfTheOrganization.id) },
});

Expand Down Expand Up @@ -674,7 +674,7 @@ describe('Acceptance | Application | organization-controller', function () {
// when
const response = await server.inject({
method: 'GET',
url: `/api/admin/organizations/${organization.id}/memberships`,
url: `/api/admin/organizations/${organization.id}/memberships?filter[email]=&filter[firstName]=&filter[lastName]=&filter[organizationRole]=`,
headers: { authorization: generateValidRequestAuthorizationHeader(userSuperAdmin.id) },
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -397,4 +397,49 @@ describe('Acceptance | API | campaign-detail-route', function () {
expect(response.statusCode).to.equal(400);
});
});

describe('GET /api/organizations/{organizationId}/campaigns', function () {
it('should return a list of my campaigns as JSONAPI', async function () {
const userId = databaseBuilder.factory.buildUser().id;
const organizationId = databaseBuilder.factory.buildOrganization().id;
databaseBuilder.factory.buildMembership({ organizationId, userId });

databaseBuilder.factory.buildCampaign({ organizationId, ownerId: userId });

await databaseBuilder.commit();

const options = {
method: 'GET',
url: `/api/organizations/${organizationId}/campaigns?filter[name]=&filter[status]=&filter[isOwnedByMe]=true&page[number]=1&page[size]=50`,
headers: { authorization: generateValidRequestAuthorizationHeader(userId) },
};

const response = await server.inject(options);

expect(response.statusCode).to.equal(200);
expect(response.result.data).to.have.lengthOf(1);
});

it('should return a list of all campaigns as JSONAPI', async function () {
const user = databaseBuilder.factory.buildUser();
const organizationId = databaseBuilder.factory.buildOrganization().id;
databaseBuilder.factory.buildMembership({ organizationId, userId: user.id });

databaseBuilder.factory.buildCampaign({ organizationId, ownerId: user.id });
databaseBuilder.factory.buildCampaign({ organizationId });

await databaseBuilder.commit();

const options = {
method: 'GET',
url: `/api/organizations/${organizationId}/campaigns?filter[name]=&filter[status]=&filter[ownerName]=&page[number]=1&page[size]=50`,
headers: { authorization: generateValidRequestAuthorizationHeader(user.id) },
};

const response = await server.inject(options);

expect(response.statusCode).to.equal(200);
expect(response.result.data).to.have.lengthOf(2);
});
});
});

0 comments on commit 05a1047

Please sign in to comment.