Skip to content

Commit fe6aae2

Browse files
tech(orga): campaign assessment participation repository
1 parent d6a8192 commit fe6aae2

File tree

2 files changed

+56
-32
lines changed

2 files changed

+56
-32
lines changed

api/src/prescription/campaign-participation/infrastructure/repositories/campaign-assessment-participation-repository.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,13 @@ async function _setSkillsCount(result) {
8080
if (result.assessmentState !== Assessment.states.COMPLETED) {
8181
const operativeSkillIds = await campaignRepository.findSkillIds({ campaignId: result.campaignId });
8282

83-
const knowledgeElementsByUser = await knowledgeElementRepository.findSnapshotForUsers({
84-
[result.userId]: result.sharedAt,
83+
const knowledgeElementsByUser = await knowledgeElementRepository.findAssessedByUserIdAndLimitDateQuery({
84+
userId: result.userId,
85+
limitDate: result.sharedAt,
8586
});
86-
const knowledgeElements = knowledgeElementsByUser[result.userId];
8787

8888
targetedSkillsCount = operativeSkillIds.length;
89-
testedSkillsCount = _getTestedSkillsCount(operativeSkillIds, knowledgeElements);
89+
testedSkillsCount = _getTestedSkillsCount(operativeSkillIds, knowledgeElementsByUser);
9090
}
9191

9292
return { targetedSkillsCount, testedSkillsCount };

api/tests/prescription/campaign-participation/integration/infrastructure/repositories/campaign-assessment-participation-repository_test.js

+52-28
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Assessment } from '../../../../../../src/shared/domain/models/Assessmen
66
import { KnowledgeElement } from '../../../../../../src/shared/domain/models/KnowledgeElement.js';
77
import { catchErr, databaseBuilder, expect, mockLearningContent } from '../../../../../test-helper.js';
88

9-
const { STARTED } = CampaignParticipationStatuses;
9+
const { STARTED, SHARED } = CampaignParticipationStatuses;
1010

1111
describe('Integration | Repository | Campaign Assessment Participation', function () {
1212
describe('#getByCampaignIdAndCampaignParticipationId', function () {
@@ -128,20 +128,31 @@ describe('Integration | Repository | Campaign Assessment Participation', functio
128128
});
129129

130130
context('When campaign participation is not shared', function () {
131+
let campaignParticipation, skill1;
131132
beforeEach(async function () {
132-
const skill1 = { id: 'skill1', status: 'actif' };
133-
await mockLearningContent({ skills: [skill1] });
134-
campaignId = databaseBuilder.factory.buildAssessmentCampaign({}, [skill1]).id;
135-
campaignParticipationId = databaseBuilder.factory.buildAssessmentFromParticipation({
133+
skill1 = { id: 'skill1', status: 'actif' };
134+
const skill2 = { id: 'skill2', status: 'actif' };
135+
await mockLearningContent({ skills: [skill1, skill2] });
136+
campaignId = databaseBuilder.factory.buildAssessmentCampaign({}, [skill1, skill2]).id;
137+
138+
campaignParticipation = databaseBuilder.factory.buildCampaignParticipation({
136139
status: STARTED,
137140
sharedAt: null,
138141
campaignId,
139-
}).campaignParticipationId;
140-
142+
});
143+
campaignParticipationId = campaignParticipation.id;
141144
await databaseBuilder.commit();
142145
});
143146

144147
it('create CampaignAssessmentParticipation with empty results', async function () {
148+
//given
149+
databaseBuilder.factory.buildAssessment({
150+
userId: campaignParticipation.userId,
151+
campaignParticipationId,
152+
state: Assessment.states.COMPLETED,
153+
});
154+
await databaseBuilder.commit();
155+
145156
const campaignAssessmentParticipation =
146157
await campaignAssessmentParticipationRepository.getByCampaignIdAndCampaignParticipationId({
147158
campaignId,
@@ -151,6 +162,32 @@ describe('Integration | Repository | Campaign Assessment Participation', functio
151162
expect(campaignAssessmentParticipation.masteryRate).to.equal(null);
152163
expect(campaignAssessmentParticipation.progression).to.equal(1);
153164
});
165+
166+
context('when assessment is started', function () {
167+
it('computes the progression', async function () {
168+
//given
169+
databaseBuilder.factory.buildAssessment({
170+
userId: campaignParticipation.userId,
171+
campaignParticipationId,
172+
state: Assessment.states.STARTED,
173+
});
174+
databaseBuilder.factory.buildKnowledgeElement({
175+
status: KnowledgeElement.StatusType.VALIDATED,
176+
userId: campaignParticipation.userId,
177+
skillId: skill1.id,
178+
createdAt: new Date('2020-01-01'),
179+
});
180+
await databaseBuilder.commit();
181+
// then
182+
const campaignAssessmentParticipation =
183+
await campaignAssessmentParticipationRepository.getByCampaignIdAndCampaignParticipationId({
184+
campaignId,
185+
campaignParticipationId,
186+
});
187+
188+
expect(campaignAssessmentParticipation.progression).to.equal(0.5);
189+
});
190+
});
154191
});
155192

156193
context('When campaign participation is shared', function () {
@@ -168,8 +205,8 @@ describe('Integration | Repository | Campaign Assessment Participation', functio
168205
campaignParticipationId = databaseBuilder.factory.buildCampaignParticipation({
169206
campaignId,
170207
userId,
171-
status: STARTED,
172-
sharedAt: null,
208+
status: SHARED,
209+
sharedAt: new Date('2020-01-02'),
173210
}).id;
174211

175212
databaseBuilder.factory.buildKnowledgeElement({
@@ -184,6 +221,12 @@ describe('Integration | Repository | Campaign Assessment Participation', functio
184221
skillId: skill2.id,
185222
createdAt: new Date('2020-01-01'),
186223
});
224+
databaseBuilder.factory.buildKnowledgeElement({
225+
status: KnowledgeElement.StatusType.INVALIDATED,
226+
userId,
227+
skillId: skill3.id,
228+
createdAt: new Date('2020-01-04'),
229+
});
187230
await databaseBuilder.commit();
188231
});
189232

@@ -205,25 +248,6 @@ describe('Integration | Repository | Campaign Assessment Participation', functio
205248
expect(campaignAssessmentParticipation.progression).to.equal(1);
206249
});
207250
});
208-
209-
context('when assessment is started', function () {
210-
it('computes the progression', async function () {
211-
databaseBuilder.factory.buildAssessment({
212-
campaignParticipationId,
213-
userId,
214-
state: Assessment.states.STARTED,
215-
});
216-
await databaseBuilder.commit();
217-
218-
const campaignAssessmentParticipation =
219-
await campaignAssessmentParticipationRepository.getByCampaignIdAndCampaignParticipationId({
220-
campaignId,
221-
campaignParticipationId,
222-
});
223-
224-
expect(campaignAssessmentParticipation.progression).to.equal(0.5);
225-
});
226-
});
227251
});
228252
});
229253

0 commit comments

Comments
 (0)