Skip to content

Commit adc6b2c

Browse files
laura-bergoensxav-car
authored andcommitted
tech(api): simplifies checking if participation contributing to quest
1 parent e8ed3dc commit adc6b2c

File tree

3 files changed

+15
-112
lines changed

3 files changed

+15
-112
lines changed

api/src/quest/domain/models/Quest.js

+11-37
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ import {
44
ComposedRequirement,
55
TYPES as _REQUIREMENT_TYPES,
66
} from './Requirement.js';
7+
/**
8+
* @typedef {import ('./Eligibility.js').Eligibility} Eligibility
9+
* @typedef {import ('./Success.js').Success} Success
10+
*/
711

8-
// warning, manque d'homogénéité sur les fonctions de comparaison, fixme !
912
export const REQUIREMENT_COMPARISONS = _REQUIREMENT_COMPARISONS;
1013
export const CRITERION_COMPARISONS = _CRITERION_COMPARISONS;
1114
export const REQUIREMENT_TYPES = _REQUIREMENT_TYPES;
@@ -52,25 +55,16 @@ class Quest {
5255
this.#eligibilityRequirements.data,
5356
REQUIREMENT_TYPES.OBJECT.CAMPAIGN_PARTICIPATIONS,
5457
);
55-
const otherRequirements = this.#omitRequirementsByType(
56-
this.#eligibilityRequirements.data,
57-
REQUIREMENT_TYPES.OBJECT.CAMPAIGN_PARTICIPATIONS,
58-
);
5958

60-
const eligibilityRequirements = otherRequirements;
6159
if (campaignParticipationRequirements.length > 0) {
62-
eligibilityRequirements.push(
63-
new ComposedRequirement({
64-
data: campaignParticipationRequirements,
65-
comparison: REQUIREMENT_COMPARISONS.ONE_OF,
66-
}),
67-
);
60+
const a = new ComposedRequirement({
61+
data: campaignParticipationRequirements,
62+
comparison: REQUIREMENT_COMPARISONS.ONE_OF,
63+
});
64+
return a.isFulfilled(scopedEligibility);
6865
}
69-
const scopedEligibilityRequirements = new ComposedRequirement({
70-
data: eligibilityRequirements,
71-
comparison: REQUIREMENT_COMPARISONS.ALL,
72-
});
73-
return scopedEligibilityRequirements.isFulfilled(scopedEligibility);
66+
67+
return false;
7468
}
7569

7670
/**
@@ -99,26 +93,6 @@ class Quest {
9993
};
10094
}
10195

102-
#omitRequirementsByType(requirements, type) {
103-
const result = [];
104-
for (const requirement of requirements) {
105-
if (requirement.requirement_type === REQUIREMENT_TYPES.COMPOSE) {
106-
const subRequirements = this.#omitRequirementsByType(requirement.data, type);
107-
if (subRequirements.length > 0) {
108-
result.push(
109-
new ComposedRequirement({
110-
data: subRequirements,
111-
comparison: requirement.comparison,
112-
}),
113-
);
114-
}
115-
} else if (requirement.requirement_type !== type) {
116-
result.push(requirement);
117-
}
118-
}
119-
return result;
120-
}
121-
12296
#flattenRequirementsByType(requirements, type) {
12397
let result = [];
12498
const filteredRequirements = requirements.filter((requirement) =>

api/tests/quest/integration/domain/usecases/get-quest-results-for-campaign-participation_test.js

+2-5
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ describe('Quest | Integration | Domain | Usecases | getQuestResultsForCampaignPa
207207
userId,
208208
});
209209
const rewardId = databaseBuilder.factory.buildAttestation().id;
210-
const questId = databaseBuilder.factory.buildQuest({
210+
databaseBuilder.factory.buildQuest({
211211
rewardType: 'attestations',
212212
rewardId,
213213
eligibilityRequirements: [
@@ -229,10 +229,7 @@ describe('Quest | Integration | Domain | Usecases | getQuestResultsForCampaignPa
229229

230230
const result = await usecases.getQuestResultsForCampaignParticipation({ userId, campaignParticipationId });
231231

232-
expect(result[0]).to.be.instanceOf(QuestResult);
233-
expect(result[0].id).to.equal(questId);
234-
expect(result[0].obtained).to.equal(false);
235-
expect(result[0].reward.id).to.equal(rewardId);
232+
expect(result.length).to.equal(0);
236233
});
237234

238235
it('should not return quest results for other campaign participation', async function () {

api/tests/quest/unit/domain/models/Quest_test.js

+2-70
Original file line numberDiff line numberDiff line change
@@ -286,75 +286,7 @@ describe('Quest | Unit | Domain | Models | Quest ', function () {
286286
});
287287

288288
context('eligibilityRequirement without campaignParticipation type', function () {
289-
it('return false when none of eligiblityRequirement is eligible', function () {
290-
// given
291-
const eligibilityRequirements = [
292-
{
293-
requirement_type: REQUIREMENT_TYPES.OBJECT.ORGANIZATION,
294-
data: {
295-
type: {
296-
data: 'PRO',
297-
comparison: CRITERION_COMPARISONS.EQUAL,
298-
},
299-
},
300-
comparison: REQUIREMENT_COMPARISONS.ALL,
301-
},
302-
];
303-
const quest = new Quest({ eligibilityRequirements, successRequirements: [] });
304-
const campaignParticipations = [{ id: 10 }, { id: 11 }];
305-
const eligibilityData = new Eligibility({ organization, organizationLearner, campaignParticipations });
306-
const campaignParticipationIdToCheck = 11;
307-
308-
// when
309-
const isContributing = quest.isCampaignParticipationContributingToQuest({
310-
eligibility: eligibilityData,
311-
campaignParticipationId: campaignParticipationIdToCheck,
312-
});
313-
314-
// then
315-
expect(isContributing).to.be.false;
316-
});
317-
318-
it('return false when eligibilityRequirement is partially eligible', function () {
319-
// given
320-
const eligibilityRequirements = [
321-
{
322-
requirement_type: REQUIREMENT_TYPES.OBJECT.ORGANIZATION,
323-
data: {
324-
type: {
325-
data: 'SCO',
326-
comparison: CRITERION_COMPARISONS.EQUAL,
327-
},
328-
},
329-
comparison: REQUIREMENT_COMPARISONS.ALL,
330-
},
331-
{
332-
requirement_type: REQUIREMENT_TYPES.OBJECT.ORGANIZATION_LEARNER,
333-
data: {
334-
id: {
335-
data: 456,
336-
comparison: CRITERION_COMPARISONS.EQUAL,
337-
},
338-
},
339-
comparison: REQUIREMENT_COMPARISONS.ALL,
340-
},
341-
];
342-
const quest = new Quest({ eligibilityRequirements, successRequirements: [] });
343-
const campaignParticipations = [{ id: 10 }, { id: 11 }];
344-
const eligibilityData = new Eligibility({ organization, organizationLearner, campaignParticipations });
345-
const campaignParticipationIdToCheck = 11;
346-
347-
// when
348-
const isContributing = quest.isCampaignParticipationContributingToQuest({
349-
eligibility: eligibilityData,
350-
campaignParticipationId: campaignParticipationIdToCheck,
351-
});
352-
353-
// then
354-
expect(isContributing).to.be.false;
355-
});
356-
357-
it('return true if all eligibilityRequirement is valid', function () {
289+
it('return false', function () {
358290
// given
359291
const eligibilityRequirements = [
360292
{
@@ -390,7 +322,7 @@ describe('Quest | Unit | Domain | Models | Quest ', function () {
390322
});
391323

392324
// then
393-
expect(isContributing).to.be.true;
325+
expect(isContributing).to.be.false;
394326
});
395327
});
396328
});

0 commit comments

Comments
 (0)