diff --git a/api/src/devcomp/infrastructure/repositories/training-repository.js b/api/src/devcomp/infrastructure/repositories/training-repository.js index 3799616f956..cf6c863916c 100644 --- a/api/src/devcomp/infrastructure/repositories/training-repository.js +++ b/api/src/devcomp/infrastructure/repositories/training-repository.js @@ -133,6 +133,9 @@ async function findWithTriggersByCampaignParticipationIdAndLocale({ campaignPart async function create({ training }) { const knexConn = DomainTransaction.getConnection(); + if (typeof training.duration !== 'string') { + training.duration = _transformDurationFormat(training.duration); + } const pickedAttributes = pick(training, [ 'title', 'internalTitle', @@ -186,6 +189,10 @@ async function findPaginatedByUserId({ userId, locale, page }) { return { userRecommendedTrainings, pagination }; } +function _transformDurationFormat(durationObject) { + return `${durationObject.days ?? 0}d${durationObject.hours ?? 0}h${durationObject.minutes ?? 0}m${durationObject.seconds ?? 0}s`; +} + export { create, findPaginatedByUserId, diff --git a/api/tests/devcomp/integration/infrastructure/repositories/training-repository_test.js b/api/tests/devcomp/integration/infrastructure/repositories/training-repository_test.js index 5e58fa0086a..cd847d22b3e 100644 --- a/api/tests/devcomp/integration/infrastructure/repositories/training-repository_test.js +++ b/api/tests/devcomp/integration/infrastructure/repositories/training-repository_test.js @@ -616,6 +616,33 @@ describe('Integration | Repository | training-repository', function () { expect(createdTraining.id).to.exist; expect(createdTraining).to.deep.include({ ...training, duration: { hours: 6 } }); }); + + it('should handle other duration‘s format', async function () { + // given + const training = { + title: 'Titre du training', + internalTitle: 'Titre interne du training', + link: 'https://training-link.org', + type: 'webinaire', + duration: { + hours: 5, + minutes: 30, + }, + locale: 'fr', + editorName: 'Un ministère', + editorLogoUrl: 'https://mon-logo.svg', + }; + + // when + const createdTraining = await trainingRepository.create({ + training, + }); + + // then + expect(createdTraining).to.be.instanceOf(TrainingForAdmin); + expect(createdTraining.id).to.exist; + expect(createdTraining).to.deep.include({ ...training, duration: { hours: 5, minutes: 30 } }); + }); }); describe('#update', function () {