From b3883439009b3582adac125e9637e3f773c7554c Mon Sep 17 00:00:00 2001 From: Laura Bergoens Date: Thu, 8 Aug 2024 16:40:13 +0200 Subject: [PATCH] compatibility core/complementary for ods enrolment --- .../enrolment/domain/models/Subscription.js | 4 + .../certification-candidates-ods-service.js | 118 +++-- .../certification-candidates-errors.js | 5 + ...y_certifications_compatibility_ko_test.ods | Bin 0 -> 28100 bytes ...y_certifications_compatibility_ok_test.ods | Bin 0 -> 28150 bytes ...rtification-candidates-ods-service_test.js | 424 ++++++++++++++---- .../unit/domain/models/Subscription_test.js | 36 ++ 7 files changed, 464 insertions(+), 123 deletions(-) create mode 100644 api/tests/certification/enrolment/integration/domain/services/certification-candidates-ods-service/attendance_sheet_extract_with_complementary_certifications_compatibility_ko_test.ods create mode 100644 api/tests/certification/enrolment/integration/domain/services/certification-candidates-ods-service/attendance_sheet_extract_with_complementary_certifications_compatibility_ok_test.ods diff --git a/api/src/certification/enrolment/domain/models/Subscription.js b/api/src/certification/enrolment/domain/models/Subscription.js index efb02d2ab45..7cef04c6073 100644 --- a/api/src/certification/enrolment/domain/models/Subscription.js +++ b/api/src/certification/enrolment/domain/models/Subscription.js @@ -48,6 +48,10 @@ class Subscription { return this.type === SUBSCRIPTION_TYPES.COMPLEMENTARY; } + isCore() { + return this.type === SUBSCRIPTION_TYPES.CORE; + } + get id() { return `${this.certificationCandidateId}-${this.complementaryCertificationId ?? 'CORE'}`; } diff --git a/api/src/certification/enrolment/domain/services/certification-candidates-ods-service.js b/api/src/certification/enrolment/domain/services/certification-candidates-ods-service.js index 5359a0e06fa..d760d0858c2 100644 --- a/api/src/certification/enrolment/domain/services/certification-candidates-ods-service.js +++ b/api/src/certification/enrolment/domain/services/certification-candidates-ods-service.js @@ -1,6 +1,7 @@ import bluebird from 'bluebird'; import _ from 'lodash'; +import { config } from '../../../../shared/config.js'; import { CertificationCandidatesError } from '../../../../shared/domain/errors.js'; import * as mailCheckImplementation from '../../../../shared/mail/infrastructure/services/mail-check.js'; import { CERTIFICATION_CANDIDATES_ERRORS } from '../../../shared/domain/constants/certification-candidates-errors.js'; @@ -72,23 +73,36 @@ async function extractCertificationCandidatesFromCandidatesImportSheet({ certificationCpfCountryRepository, }); - const subscriptions = await _buildSubscriptions({ + const complementaryCertificationsInDB = await complementaryCertificationRepository.findAll(); + const subscriptions = _buildSubscriptions({ hasCleaNumerique, hasPixPlusDroit, hasPixPlusEdu1erDegre, hasPixPlusEdu2ndDegre, hasPixPlusProSante, - complementaryCertificationRepository, + complementaryCertificationsInDB, }); - if (_hasMoreThanOneComplementarySubscription(subscriptions)) { - line = parseInt(line) + 1; + if (!config.featureToggles.isCoreComplementaryCompatibilityEnabled) { + if (_hasMoreThanOneComplementarySubscription(subscriptions)) { + line = parseInt(line) + 1; - throw new CertificationCandidatesError({ - code: CERTIFICATION_CANDIDATES_ERRORS.CANDIDATE_MAX_ONE_COMPLEMENTARY_CERTIFICATION.code, - message: 'A candidate cannot have more than one complementary certification', - meta: { line }, - }); + throw new CertificationCandidatesError({ + code: CERTIFICATION_CANDIDATES_ERRORS.CANDIDATE_MAX_ONE_COMPLEMENTARY_CERTIFICATION.code, + message: 'A candidate cannot have more than one complementary certification', + meta: { line }, + }); + } + } else { + if (!_areSubscriptionsValid(subscriptions, complementaryCertificationsInDB)) { + line = parseInt(line) + 1; + + throw new CertificationCandidatesError({ + code: CERTIFICATION_CANDIDATES_ERRORS.CANDIDATE_WRONG_SUBSCRIPTIONS_COMPATIBILITY.code, + message: 'A candidate cannot have more than one subscription to a certification', + meta: { line }, + }); + } } if (cpfBirthInformation.hasFailed()) { @@ -162,6 +176,21 @@ function _hasMoreThanOneComplementarySubscription(subscriptions) { return subscriptions.filter((subscription) => subscription.isComplementary()).length > 1; } +function _areSubscriptionsValid(subscriptions, complementaryCertificationsInDB) { + if (subscriptions.length === 1) return true; + if (subscriptions.length === 2) { + const cleaComplementaryCertification = complementaryCertificationsInDB.find( + (cc) => cc.key === ComplementaryCertificationKeys.CLEA, + ); + const hasCore = subscriptions.some((subscription) => subscription.isCore); + const hasClea = subscriptions.some( + (subscription) => subscription.complementaryCertificationId === cleaComplementaryCertification.id, + ); + return hasCore && hasClea; + } + return false; +} + function _filterOutEmptyCandidateData(certificationCandidatesData) { return _(certificationCandidatesData) .mapValues(_nullifyObjectWithOnlyNilValues) @@ -212,34 +241,65 @@ function _handleDuplicateCandidate() { }; } -async function _buildSubscriptions({ +function _buildComplementaryCertification(complementaryCertificationId) { + return Subscription.buildComplementary({ + certificationCandidateId: null, + complementaryCertificationId, + }); +} + +function _buildSubscriptions({ hasCleaNumerique, hasPixPlusDroit, hasPixPlusEdu1erDegre, hasPixPlusEdu2ndDegre, hasPixPlusProSante, - complementaryCertificationRepository, + complementaryCertificationsInDB, }) { - const subscriptions = [Subscription.buildCore({ certificationCandidateId: null })]; - const complementaryCertificationsInDB = await complementaryCertificationRepository.findAll(); + const subscriptions = []; const complementaryCertificationsByKey = _.keyBy(complementaryCertificationsInDB, 'key'); - const hasComplementaryMap = { - [ComplementaryCertificationKeys.CLEA]: Boolean(hasCleaNumerique), - [ComplementaryCertificationKeys.PIX_PLUS_DROIT]: Boolean(hasPixPlusDroit), - [ComplementaryCertificationKeys.PIX_PLUS_EDU_1ER_DEGRE]: Boolean(hasPixPlusEdu1erDegre), - [ComplementaryCertificationKeys.PIX_PLUS_EDU_2ND_DEGRE]: Boolean(hasPixPlusEdu2ndDegre), - [ComplementaryCertificationKeys.PIX_PLUS_PRO_SANTE]: Boolean(hasPixPlusProSante), - }; - - for (const [complementaryKey, hasComplementary] of Object.entries(hasComplementaryMap)) { - if (hasComplementary) { - subscriptions.push( - Subscription.buildComplementary({ - certificationCandidateId: null, - complementaryCertificationId: complementaryCertificationsByKey[complementaryKey].id, - }), - ); + const isCompatibilityEnabled = config.featureToggles.isCoreComplementaryCompatibilityEnabled; + if (!isCompatibilityEnabled) { + subscriptions.push(Subscription.buildCore({ certificationCandidateId: null })); + } + if (hasCleaNumerique) { + if (isCompatibilityEnabled) { + subscriptions.push(Subscription.buildCore({ certificationCandidateId: null })); } + subscriptions.push( + _buildComplementaryCertification(complementaryCertificationsByKey[ComplementaryCertificationKeys.CLEA].id), + ); + } + if (hasPixPlusDroit) { + subscriptions.push( + _buildComplementaryCertification( + complementaryCertificationsByKey[ComplementaryCertificationKeys.PIX_PLUS_DROIT].id, + ), + ); + } + if (hasPixPlusEdu1erDegre) { + subscriptions.push( + _buildComplementaryCertification( + complementaryCertificationsByKey[ComplementaryCertificationKeys.PIX_PLUS_EDU_1ER_DEGRE].id, + ), + ); + } + if (hasPixPlusEdu2ndDegre) { + subscriptions.push( + _buildComplementaryCertification( + complementaryCertificationsByKey[ComplementaryCertificationKeys.PIX_PLUS_EDU_2ND_DEGRE].id, + ), + ); + } + if (hasPixPlusProSante) { + subscriptions.push( + _buildComplementaryCertification( + complementaryCertificationsByKey[ComplementaryCertificationKeys.PIX_PLUS_PRO_SANTE].id, + ), + ); + } + if (subscriptions.length === 0) { + subscriptions.push(Subscription.buildCore({ certificationCandidateId: null })); } return subscriptions; diff --git a/api/src/certification/shared/domain/constants/certification-candidates-errors.js b/api/src/certification/shared/domain/constants/certification-candidates-errors.js index e676fad8311..b90bab8b24d 100644 --- a/api/src/certification/shared/domain/constants/certification-candidates-errors.js +++ b/api/src/certification/shared/domain/constants/certification-candidates-errors.js @@ -112,6 +112,11 @@ const CERTIFICATION_CANDIDATES_ERRORS = { code: 'CANDIDATE_MAX_ONE_COMPLEMENTARY_CERTIFICATION', getMessage: () => '', }, + CANDIDATE_WRONG_SUBSCRIPTIONS_COMPATIBILITY: { + code: 'CANDIDATE_WRONG_SUBSCRIPTIONS_COMPATIBILITY', + getMessage: () => + "Le candidat ne peut être inscrit qu'à une seule certification à la fois, ou bien à la Certification Pix ou bien à une certification complémentaire", + }, CANDIDATE_NO_SUBSCRIPTION: { code: 'CANDIDATE_NO_SUBSCRIPTION', getMessage: () => 'Le candidat doit être inscrit à au moins une certification', diff --git a/api/tests/certification/enrolment/integration/domain/services/certification-candidates-ods-service/attendance_sheet_extract_with_complementary_certifications_compatibility_ko_test.ods b/api/tests/certification/enrolment/integration/domain/services/certification-candidates-ods-service/attendance_sheet_extract_with_complementary_certifications_compatibility_ko_test.ods new file mode 100644 index 0000000000000000000000000000000000000000..2b244faec63a7c9c19af51d306e0c30e6cb39849 GIT binary patch literal 28100 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 0) { - firstCandidate.subscriptions.push( - domainBuilder.buildComplementarySubscription({ - certificationCandidateId: null, - complementaryCertificationId: complementaryCertifications[0].id, - }), - ); - firstCandidate.billingMode = BILLING_MODES.FREE; - secondCandidate.subscriptions.push( - domainBuilder.buildComplementarySubscription({ - certificationCandidateId: null, - complementaryCertificationId: complementaryCertifications[1].id, - }), - ); - secondCandidate.billingMode = BILLING_MODES.FREE; - thirdCandidate.subscriptions.push( - domainBuilder.buildComplementarySubscription({ - certificationCandidateId: null, - complementaryCertificationId: complementaryCertifications[2].id, - }), - ); - thirdCandidate.billingMode = BILLING_MODES.FREE; - fourthCandidate.subscriptions.push( - domainBuilder.buildComplementarySubscription({ - certificationCandidateId: null, - complementaryCertificationId: complementaryCertifications[3].id, - }), - ); - fourthCandidate.billingMode = BILLING_MODES.FREE; const seventhCandidate = { sessionId, id: null, @@ -607,15 +778,80 @@ function _buildCandidateList({ hasBillingMode = false, sessionId, complementaryC organizationLearnerId: null, userId: null, billingMode: BILLING_MODES.FREE, - subscriptions: [ - domainBuilder.buildCoreSubscription({ certificationCandidateId: null }), + subscriptions: [domainBuilder.buildCoreSubscription({ certificationCandidateId: null })], + prepaymentCode: null, + }; + if (ftEnabled) { + firstCandidate.subscriptions = [ + domainBuilder.buildComplementarySubscription({ + certificationCandidateId: null, + complementaryCertificationId: complementaryCertifications[0].id, + }), + ]; + secondCandidate.subscriptions = [ + domainBuilder.buildComplementarySubscription({ + certificationCandidateId: null, + complementaryCertificationId: complementaryCertifications[1].id, + }), + ]; + // CLEA + thirdCandidate.subscriptions.push( + domainBuilder.buildComplementarySubscription({ + certificationCandidateId: null, + complementaryCertificationId: complementaryCertifications[2].id, + }), + ); + fourthCandidate.subscriptions = [ + domainBuilder.buildComplementarySubscription({ + certificationCandidateId: null, + complementaryCertificationId: complementaryCertifications[3].id, + }), + ]; + seventhCandidate.subscriptions = [ domainBuilder.buildComplementarySubscription({ certificationCandidateId: null, complementaryCertificationId: complementaryCertifications[4].id, }), - ], - prepaymentCode: null, - }; + ]; + } else { + firstCandidate.subscriptions.push( + domainBuilder.buildComplementarySubscription({ + certificationCandidateId: null, + complementaryCertificationId: complementaryCertifications[0].id, + }), + ); + secondCandidate.subscriptions.push( + domainBuilder.buildComplementarySubscription({ + certificationCandidateId: null, + complementaryCertificationId: complementaryCertifications[1].id, + }), + ); + thirdCandidate.subscriptions.push( + domainBuilder.buildComplementarySubscription({ + certificationCandidateId: null, + complementaryCertificationId: complementaryCertifications[2].id, + }), + ); + fourthCandidate.subscriptions.push( + domainBuilder.buildComplementarySubscription({ + certificationCandidateId: null, + complementaryCertificationId: complementaryCertifications[3].id, + }), + ); + seventhCandidate.subscriptions.push( + domainBuilder.buildComplementarySubscription({ + certificationCandidateId: null, + complementaryCertificationId: complementaryCertifications[4].id, + }), + ); + } + firstCandidate.billingMode = BILLING_MODES.FREE; + secondCandidate.billingMode = BILLING_MODES.FREE; + thirdCandidate.billingMode = BILLING_MODES.FREE; + fourthCandidate.billingMode = BILLING_MODES.FREE; + fifthCandidate.billingMode = BILLING_MODES.FREE; + if (ftEnabled) + return [firstCandidate, secondCandidate, thirdCandidate, fourthCandidate, seventhCandidate, fifthCandidate]; return [firstCandidate, secondCandidate, thirdCandidate, fourthCandidate, seventhCandidate]; } return [firstCandidate, secondCandidate, thirdCandidate, fourthCandidate, fifthCandidate, sixthCandidate]; diff --git a/api/tests/certification/enrolment/unit/domain/models/Subscription_test.js b/api/tests/certification/enrolment/unit/domain/models/Subscription_test.js index b0e254b30df..8621c0de8b2 100644 --- a/api/tests/certification/enrolment/unit/domain/models/Subscription_test.js +++ b/api/tests/certification/enrolment/unit/domain/models/Subscription_test.js @@ -106,4 +106,40 @@ describe('Unit | Certification | Enrolment | Domain | Models | Subscription', fu }); }); }); + + describe('#isCore', function () { + it('should return true when subscription type is CORE', function () { + // given + const subscription = domainBuilder.certification.enrolment.buildSubscription({ + type: SUBSCRIPTION_TYPES.CORE, + complementaryCertificationId: null, + }); + + // when + const isCore = subscription.isCore(); + + // then + expect(isCore).to.be.true; + }); + + // Rule disabled to allow dynamic generated tests. See https://github.com/lo1tuma/eslint-plugin-mocha/blob/master/docs/rules/no-setup-in-describe.md#disallow-setup-in-describe-blocks-mochano-setup-in-describe + // eslint-disable-next-line mocha/no-setup-in-describe + Object.keys(SUBSCRIPTION_TYPES) + .filter((typeKey) => typeKey !== SUBSCRIPTION_TYPES.CORE) + .forEach((typeKey) => { + it(`should return false when type is ${SUBSCRIPTION_TYPES[typeKey]}`, function () { + // given + const subscription = domainBuilder.certification.enrolment.buildSubscription({ + type: SUBSCRIPTION_TYPES[typeKey], + complementaryCertificationId: 123, + }); + + // when + const isCore = subscription.isCore(); + + // then + expect(isCore).to.be.false; + }); + }); + }); });