From c108df7024769476bd163484863ce11c838881e5 Mon Sep 17 00:00:00 2001 From: Alexandre COIN Date: Mon, 30 Dec 2024 16:21:18 +0100 Subject: [PATCH] feat(api): retrieve all competences --- .../repositories/certification-repository.js | 38 ++++++++++--------- .../application/certification-route_test.js | 14 ++++++- .../certification-repository_test.js | 14 ++++++- 3 files changed, 47 insertions(+), 19 deletions(-) diff --git a/api/src/parcoursup/infrastructure/repositories/certification-repository.js b/api/src/parcoursup/infrastructure/repositories/certification-repository.js index 57ea6a46458..17b09fb6dca 100644 --- a/api/src/parcoursup/infrastructure/repositories/certification-repository.js +++ b/api/src/parcoursup/infrastructure/repositories/certification-repository.js @@ -3,28 +3,32 @@ import { NotFoundError } from '../../../shared/domain/errors.js'; import { CertificationResult } from '../../domain/read-models/CertificationResult.js'; const get = async ({ ine }) => { - const certificationResultDto = await datamartKnex('data_export_parcoursup_certif_result') - .where({ national_student_id: ine }) - .limit(1) - .first(); - if (!certificationResultDto) { + const certificationResultDto = await datamartKnex('data_export_parcoursup_certif_result').where({ + national_student_id: ine, + }); + if (!certificationResultDto.length) { throw new NotFoundError('No certifications found for given INE'); } + + return _toDomain(certificationResultDto); +}; + +const _toDomain = (certificationResultDto) => { return new CertificationResult({ - ine: certificationResultDto.national_student_id, - organizationUai: certificationResultDto.organization_uai, - lastName: certificationResultDto.last_name, - firstName: certificationResultDto.first_name, - birthdate: certificationResultDto.birthdate, - status: certificationResultDto.status, - pixScore: certificationResultDto.pix_score, - certificationDate: certificationResultDto.certification_date, - competences: [ - { + ine: certificationResultDto[0].national_student_id, + organizationUai: certificationResultDto[0].organization_uai, + lastName: certificationResultDto[0].last_name, + firstName: certificationResultDto[0].first_name, + birthdate: certificationResultDto[0].birthdate, + status: certificationResultDto[0].status, + pixScore: certificationResultDto[0].pix_score, + certificationDate: certificationResultDto[0].certification_date, + competences: certificationResultDto.map((certificationResultDto) => { + return { id: certificationResultDto.competence_id, level: certificationResultDto.competence_level, - }, - ], + }; + }), }); }; diff --git a/api/tests/parcoursup/acceptance/application/certification-route_test.js b/api/tests/parcoursup/acceptance/application/certification-route_test.js index 061b7507535..54a091c01c6 100644 --- a/api/tests/parcoursup/acceptance/application/certification-route_test.js +++ b/api/tests/parcoursup/acceptance/application/certification-route_test.js @@ -21,7 +21,7 @@ describe('Parcoursup | Acceptance | Application | certification-route', function it('should return 200 HTTP status code and a certification for a given INE', async function () { // given const ine = '123456789OK'; - datamartBuilder.factory.buildCertificationResult({ + const certificationResultData = { nationalStudentId: ine, organizationUai: 'UAI ETAB ELEVE', lastName: 'NOM-ELEVE', @@ -30,9 +30,17 @@ describe('Parcoursup | Acceptance | Application | certification-route', function status: 'validated', pixScore: 327, certificationDate: '2024-11-22T09:39:54Z', + }; + datamartBuilder.factory.buildCertificationResult({ + ...certificationResultData, competenceId: 'xzef1223443', competenceLevel: 3, }); + datamartBuilder.factory.buildCertificationResult({ + ...certificationResultData, + competenceId: 'otherCompetenceId', + competenceLevel: 5, + }); await datamartBuilder.commit(); const options = { @@ -64,6 +72,10 @@ describe('Parcoursup | Acceptance | Application | certification-route', function id: 'xzef1223443', level: 3, }, + { + id: 'otherCompetenceId', + level: 5, + }, ], }; diff --git a/api/tests/parcoursup/integration/repositories/certification-repository_test.js b/api/tests/parcoursup/integration/repositories/certification-repository_test.js index 503225e1754..45e5779b046 100644 --- a/api/tests/parcoursup/integration/repositories/certification-repository_test.js +++ b/api/tests/parcoursup/integration/repositories/certification-repository_test.js @@ -8,7 +8,7 @@ describe('Parcoursup | Infrastructure | Integration | Repositories | certificati it('should return the certification', async function () { // given const ine = '1234'; - datamartBuilder.factory.buildCertificationResult({ + const certificationResultData = { nationalStudentId: ine, organizationUai: 'UAI ETAB ELEVE', lastName: 'NOM-ELEVE', @@ -17,9 +17,17 @@ describe('Parcoursup | Infrastructure | Integration | Repositories | certificati status: 'validated', pixScore: 327, certificationDate: '2024-11-22T09:39:54', + }; + datamartBuilder.factory.buildCertificationResult({ + ...certificationResultData, competenceId: 'xzef1223443', competenceLevel: 3, }); + datamartBuilder.factory.buildCertificationResult({ + ...certificationResultData, + competenceId: 'otherCompetenceId', + competenceLevel: 5, + }); await datamartBuilder.commit(); // when @@ -40,6 +48,10 @@ describe('Parcoursup | Infrastructure | Integration | Repositories | certificati id: 'xzef1223443', level: 3, }, + { + id: 'otherCompetenceId', + level: 5, + }, ], }); expect(result).to.deep.equal(expectedCertification);