diff --git a/api/src/certification/results/domain/models/ShareableCertificate.js b/api/src/certification/results/domain/models/ShareableCertificate.js index 4a357fcdb7b..7cf1ae1e87f 100644 --- a/api/src/certification/results/domain/models/ShareableCertificate.js +++ b/api/src/certification/results/domain/models/ShareableCertificate.js @@ -14,6 +14,7 @@ class ShareableCertificate { certifiedBadgeImages, resultCompetenceTree = null, maxReachableLevelOnCertificationDate, + version, } = {}) { this.id = id; this.firstName = firstName; @@ -29,6 +30,7 @@ class ShareableCertificate { this.certifiedBadgeImages = certifiedBadgeImages; this.resultCompetenceTree = resultCompetenceTree; this.maxReachableLevelOnCertificationDate = maxReachableLevelOnCertificationDate; + this.version = version; } setResultCompetenceTree(resultCompetenceTree) { diff --git a/api/src/certification/results/infrastructure/repositories/certificate-repository.js b/api/src/certification/results/infrastructure/repositories/certificate-repository.js index c506642240c..c56d51c9d0d 100644 --- a/api/src/certification/results/infrastructure/repositories/certificate-repository.js +++ b/api/src/certification/results/infrastructure/repositories/certificate-repository.js @@ -201,6 +201,7 @@ function _selectShareableCertificates() { maxReachableLevelOnCertificationDate: 'certification-courses.maxReachableLevelOnCertificationDate', pixScore: 'assessment-results.pixScore', assessmentResultId: 'assessment-results.id', + version: 'sessions.version', competenceMarks: knex.raw(` json_agg( json_build_object('score', "competence-marks".score, 'level', "competence-marks".level, 'competence_code', "competence-marks"."competence_code") diff --git a/api/src/certification/results/infrastructure/serializers/shareable-certificate-serializer.js b/api/src/certification/results/infrastructure/serializers/shareable-certificate-serializer.js index 282fdc321e1..46a3143baa5 100644 --- a/api/src/certification/results/infrastructure/serializers/shareable-certificate-serializer.js +++ b/api/src/certification/results/infrastructure/serializers/shareable-certificate-serializer.js @@ -44,6 +44,7 @@ const attributes = [ 'resultCompetenceTree', 'certifiedBadgeImages', 'maxReachableLevelOnCertificationDate', + 'version', ]; const serialize = function (certificate) { diff --git a/api/tests/certification/results/acceptance/application/certification-route_test.js b/api/tests/certification/results/acceptance/application/certification-route_test.js index 29f51fe45a5..10bece3ec28 100644 --- a/api/tests/certification/results/acceptance/application/certification-route_test.js +++ b/api/tests/certification/results/acceptance/application/certification-route_test.js @@ -1,5 +1,6 @@ import { generateCertificateVerificationCode } from '../../../../../lib/domain/services/verify-certificate-code-service.js'; import { AutoJuryCommentKeys } from '../../../../../src/certification/shared/domain/models/JuryComment.js'; +import { SESSIONS_VERSIONS } from '../../../../../src/certification/shared/domain/models/SessionVersion.js'; import { Assessment } from '../../../../../src/shared/domain/models/Assessment.js'; import { createServer, @@ -428,7 +429,7 @@ describe('Certification | Results | Acceptance | Application | Certification', f userId = databaseBuilder.factory.buildUser().id; session = databaseBuilder.factory.buildSession({ publishedAt: new Date('2018-12-01T01:02:03Z'), - version: 3, + version: SESSIONS_VERSIONS.V3, }); certificationCourse = databaseBuilder.factory.buildCertificationCourse({ sessionId: session.id, @@ -436,7 +437,7 @@ describe('Certification | Results | Acceptance | Application | Certification', f isPublished: true, maxReachableLevelOnCertificationDate: 3, verificationCode: await generateCertificateVerificationCode(), - version: 3, + version: SESSIONS_VERSIONS.V3, }); assessment = databaseBuilder.factory.buildAssessment({ @@ -638,6 +639,7 @@ describe('Certification | Results | Acceptance | Application | Certification', f }, ], 'max-reachable-level-on-certification-date': certificationCourse.maxReachableLevelOnCertificationDate, + version: session.version, }, id: `${certificationCourse.id}`, relationships: { @@ -770,7 +772,10 @@ describe('Certification | Results | Acceptance | Application | Certification', f async function _buildDatabaseForV2Certification() { const userId = databaseBuilder.factory.buildUser().id; - const session = databaseBuilder.factory.buildSession({ publishedAt: new Date('2018-12-01T01:02:03Z') }); + const session = databaseBuilder.factory.buildSession({ + version: SESSIONS_VERSIONS.V2, + publishedAt: new Date('2018-12-01T01:02:03Z'), + }); const badge = databaseBuilder.factory.buildBadge({ key: 'charlotte_aux_fraises' }); const cc = databaseBuilder.factory.buildComplementaryCertification({ key: 'A' }); const ccBadge = databaseBuilder.factory.buildComplementaryCertificationBadge({ diff --git a/api/tests/certification/results/integration/infrastructure/repositories/certificate-repository_test.js b/api/tests/certification/results/integration/infrastructure/repositories/certificate-repository_test.js index 0ed111c21e6..16a1113f5ea 100644 --- a/api/tests/certification/results/integration/infrastructure/repositories/certificate-repository_test.js +++ b/api/tests/certification/results/integration/infrastructure/repositories/certificate-repository_test.js @@ -1,5 +1,7 @@ import * as certificateRepository from '../../../../../../src/certification/results/infrastructure/repositories/certificate-repository.js'; +import { AlgorithmEngineVersion } from '../../../../../../src/certification/shared/domain/models/AlgorithmEngineVersion.js'; import { AutoJuryCommentKeys } from '../../../../../../src/certification/shared/domain/models/JuryComment.js'; +import { SESSIONS_VERSIONS } from '../../../../../../src/certification/shared/domain/models/SessionVersion.js'; import { NotFoundError } from '../../../../../../src/shared/domain/errors.js'; import { status } from '../../../../../../src/shared/domain/models/AssessmentResult.js'; import { @@ -2347,6 +2349,7 @@ describe('Integration | Infrastructure | Repository | Certification', function ( deliveredAt: new Date('2021-05-05'), certificationCenter: 'Centre des poules bien dodues', pixScore: 51, + version: SESSIONS_VERSIONS.V3, }; const { certificationCourseId, assessmentResultId } = await _buildValidShareableCertificate( @@ -2459,6 +2462,7 @@ describe('Integration | Infrastructure | Repository | Certification', function ( deliveredAt: new Date('2021-05-05'), certificationCenter: 'Centre des poules bien dodues', pixScore: 51, + version: SESSIONS_VERSIONS.V3, }; const { certificationCourseId, assessmentResultId } = await _buildValidShareableCertificate( @@ -2595,6 +2599,7 @@ describe('Integration | Infrastructure | Repository | Certification', function ( deliveredAt: new Date('2021-05-05'), certificationCenter: 'Centre des poules bien dodues', pixScore: 51, + version: SESSIONS_VERSIONS.V3, certifiedBadgeImages: [ { imageUrl: 'https://images.pix.fr/badge1.svg', @@ -2969,6 +2974,7 @@ async function _buildValidPrivateCertificateWithAcquiredAndNotAcquiredBadges({ async function _buildValidShareableCertificate(shareableCertificateData, buildCompetenceMark = true) { const certificationCenterId = databaseBuilder.factory.buildCertificationCenter().id; const sessionId = databaseBuilder.factory.buildSession({ + version: shareableCertificateData.version, id: shareableCertificateData.sessionId, publishedAt: shareableCertificateData.deliveredAt, certificationCenter: shareableCertificateData.certificationCenter, @@ -2987,6 +2993,7 @@ async function _buildValidShareableCertificate(shareableCertificateData, buildCo maxReachableLevelOnCertificationDate: shareableCertificateData.maxReachableLevelOnCertificationDate, sessionId, userId: shareableCertificateData.userId, + version: shareableCertificateData.version, }).id; const assessmentResultId = databaseBuilder.factory.buildAssessmentResult.last({ @@ -3010,6 +3017,7 @@ async function _buildValidShareableCertificate(shareableCertificateData, buildCo async function _buildValidShareableCertificateWithAcquiredBadges({ shareableCertificateData, acquiredBadges }) { const certificationCenterId = databaseBuilder.factory.buildCertificationCenter().id; const sessionId = databaseBuilder.factory.buildSession({ + version: shareableCertificateData.version, publishedAt: shareableCertificateData.deliveredAt, certificationCenter: shareableCertificateData.certificationCenter, certificationCenterId, @@ -3027,6 +3035,7 @@ async function _buildValidShareableCertificateWithAcquiredBadges({ shareableCert maxReachableLevelOnCertificationDate: shareableCertificateData.maxReachableLevelOnCertificationDate, sessionId, userId: shareableCertificateData.userId, + version: AlgorithmEngineVersion.V2, }).id; const assessmentResultId = databaseBuilder.factory.buildAssessmentResult.last({ certificationCourseId, diff --git a/api/tests/certification/results/unit/application/certification-controller_test.js b/api/tests/certification/results/unit/application/certification-controller_test.js index 4b8bd507a54..413ee5fc0ce 100644 --- a/api/tests/certification/results/unit/application/certification-controller_test.js +++ b/api/tests/certification/results/unit/application/certification-controller_test.js @@ -1,5 +1,6 @@ import { certificationController } from '../../../../../src/certification/results/application/certification-controller.js'; import { usecases } from '../../../../../src/certification/results/domain/usecases/index.js'; +import { SESSIONS_VERSIONS } from '../../../../../src/certification/shared/domain/models/SessionVersion.js'; import { domainBuilder, expect, hFake, sinon } from '../../../../test-helper.js'; import { getI18n } from '../../../../tooling/i18n/i18n.js'; @@ -23,6 +24,7 @@ describe('Certification | Results | Unit | Application | certifications-controll pixScore: 456, certifiedBadgeImages: ['/img/1'], maxReachableLevelOnCertificationDate: 6, + version: SESSIONS_VERSIONS.V3, }); sinon.stub(usecases, 'getShareableCertificate'); usecases.getShareableCertificate @@ -52,6 +54,7 @@ describe('Certification | Results | Unit | Application | certifications-controll 'pix-score': 456, 'certified-badge-images': ['/img/1'], 'max-reachable-level-on-certification-date': 6, + version: SESSIONS_VERSIONS.V3, }, relationships: { 'result-competence-tree': { diff --git a/api/tests/certification/results/unit/infrastructure/serializers/shareable-certificate-serializer_test.js b/api/tests/certification/results/unit/infrastructure/serializers/shareable-certificate-serializer_test.js index 8f6fd076ca6..d8abd0d1d78 100644 --- a/api/tests/certification/results/unit/infrastructure/serializers/shareable-certificate-serializer_test.js +++ b/api/tests/certification/results/unit/infrastructure/serializers/shareable-certificate-serializer_test.js @@ -1,6 +1,7 @@ import { ResultCompetence } from '../../../../../../src/certification/results/domain/models/ResultCompetence.js'; import { ResultCompetenceTree } from '../../../../../../src/certification/results/domain/models/ResultCompetenceTree.js'; import * as serializer from '../../../../../../src/certification/results/infrastructure/serializers/shareable-certificate-serializer.js'; +import { SESSIONS_VERSIONS } from '../../../../../../src/certification/shared/domain/models/SessionVersion.js'; import { domainBuilder, expect } from '../../../../../test-helper.js'; describe('Unit | Serializer | JSONAPI | shareable-certificate-serializer', function () { @@ -47,6 +48,7 @@ describe('Unit | Serializer | JSONAPI | shareable-certificate-serializer', funct certifiedBadgeImages: ['/img/1', '/img/2'], resultCompetenceTree, maxReachableLevelOnCertificationDate: 6, + version: SESSIONS_VERSIONS.V3, }); // when @@ -68,6 +70,7 @@ describe('Unit | Serializer | JSONAPI | shareable-certificate-serializer', funct 'pix-score': 456, 'certified-badge-images': ['/img/1', '/img/2'], 'max-reachable-level-on-certification-date': 6, + version: SESSIONS_VERSIONS.V3, }, relationships: { 'result-competence-tree': { diff --git a/api/tests/tooling/domain-builder/factory/build-shareable-certificate.js b/api/tests/tooling/domain-builder/factory/build-shareable-certificate.js index 75a85453be6..0cf73fd419c 100644 --- a/api/tests/tooling/domain-builder/factory/build-shareable-certificate.js +++ b/api/tests/tooling/domain-builder/factory/build-shareable-certificate.js @@ -15,6 +15,7 @@ const buildShareableCertificate = function ({ maxReachableLevelOnCertificationDate = 5, certifiedBadgeImages = [], resultCompetenceTree = null, + version = 3, } = {}) { return new ShareableCertificate({ id, @@ -31,6 +32,7 @@ const buildShareableCertificate = function ({ maxReachableLevelOnCertificationDate, resultCompetenceTree, certifiedBadgeImages, + version, }); };