Skip to content

Commit

Permalink
[TECH] renome le filtre badge en acquiredThematicResults (Pix-16349)
Browse files Browse the repository at this point in the history
  • Loading branch information
pix-service-auto-merge authored Feb 6, 2025
2 parents 0cb5fff + 4ec5926 commit 20b8146
Show file tree
Hide file tree
Showing 13 changed files with 61 additions and 35 deletions.
5 changes: 3 additions & 2 deletions api/db/seeds/data/team-prescription/build-target-profiles.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ async function _createTargetProfileWithBadgesStages(databaseBuilder) {
cappedTubesDTO,
badgeId: BADGES_TUBES_CAMP_ID,
altMessage: '1 RT double critère Campaign & Tubes',
imageUrl: 'some_image.svg',
imageUrl: 'https://images.pix.fr/badges/Badge_OLYMPIX.svg',
message: '1 RT double critère Campaign & Tubes',
title: '1 RT double critère Campaign & Tubes',
key: `SOME_KEY_FOR_RT_${BADGES_TUBES_CAMP_ID}`,
Expand All @@ -84,14 +84,15 @@ async function _createTargetProfileWithBadgesStages(databaseBuilder) {
cappedTubesDTO,
badgeId: BADGES_CAMP_ID,
altMessage: '1 RT simple critère Campaign',
imageUrl: 'some_other_image.svg',
imageUrl: 'https://images.pix.fr/badges/abcpix/Jevalue_des_informations.svg',
message: '1 RT simple critère Campaign',
title: '1 RT simple critère Campaign',
key: `SOME_KEY_FOR_RT_${BADGES_CAMP_ID}`,
isCertifiable: false,
isAlwaysVisible: true,
configBadge,
});

await createStages({
databaseBuilder,
targetProfileId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ const findAssessmentParticipationResults = async function (request) {
if (filters.groups && !Array.isArray(filters.groups)) {
filters.groups = [filters.groups];
}
if (filters.badges && !Array.isArray(filters.badges)) {
filters.badges = [filters.badges];
if (filters.acquiredThematicResults && !Array.isArray(filters.acquiredThematicResults)) {
filters.acquiredThematicResults = [filters.acquiredThematicResults];
}
if (filters.stages && !Array.isArray(filters.stages)) {
filters.stages = [filters.stages];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const register = async function (server) {
filter: Joi.object({
divisions: Joi.array().items(Joi.string()),
groups: Joi.array().items(Joi.string()),
badges: [Joi.number().integer(), Joi.array().items(Joi.number().integer())],
acquiredThematicResults: [Joi.number().integer(), Joi.array().items(Joi.number().integer())],
stages: [Joi.number().integer(), Joi.array().items(Joi.number().integer())],
search: Joi.string().empty(''),
}).default({}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ function _getParticipantsResultList(campaignId, stageCollection, filters) {
.with('campaign_participation_summaries', (qb) => _getParticipations(qb, campaignId, stageCollection, filters))
.select('*')
.from('campaign_participation_summaries')
.modify(_filterByBadgeAcquisitionsOut, filters)
.modify(_filterByThematicResultAcquisitionsOut, filters)
.orderByRaw('LOWER(??) ASC, LOWER(??) ASC', ['lastName', 'firstName']);
}

Expand Down Expand Up @@ -75,7 +75,7 @@ function _getParticipations(qb, campaignId, stageCollection, filters) {
.where('campaign-participations.deletedAt', 'IS', null)
.modify(_filterByDivisions, filters)
.modify(_filterByGroups, filters)
.modify(_addAcquiredBadgeIds, filters)
.modify(_addAcquiredThematicResultsIds, filters)
.modify(_filterByStage, stageCollection, filters)
.modify(_filterBySearch, filters)
.modify(_orderBy, filters);
Expand Down Expand Up @@ -115,8 +115,8 @@ function _filterBySearch(queryBuilder, filters) {
}
}

function _addAcquiredBadgeIds(queryBuilder, filters) {
if (filters.badges) {
function _addAcquiredThematicResultsIds(queryBuilder, filters) {
if (filters.acquiredThematicResults) {
queryBuilder
.select(knex.raw('ARRAY_AGG("badgeId") OVER (PARTITION BY "campaign-participations"."id") as badges_acquired'))
.join('badge-acquisitions', 'badge-acquisitions.campaignParticipationId', 'campaign-participations.id')
Expand All @@ -133,15 +133,15 @@ function _orderBy(queryBuilder, filters) {
nulls: 'last',
},
];
if (filters.badges) {
if (filters.acquiredThematicResults) {
orderByClauses.unshift({ column: 'campaign-participations.id' });
}
queryBuilder.orderBy(orderByClauses);
}

function _filterByBadgeAcquisitionsOut(queryBuilder, filters) {
if (filters.badges) {
queryBuilder.whereRaw(':badgeIds <@ "badges_acquired"', { badgeIds: filters.badges });
function _filterByThematicResultAcquisitionsOut(queryBuilder, filters) {
if (filters.acquiredThematicResults) {
queryBuilder.whereRaw(':badgeIds <@ "badges_acquired"', { badgeIds: filters.acquiredThematicResults });
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ describe('Acceptance | API | campaign-results-route', function () {

let campaign;
let userId;
let badge;
let assessment1;

beforeEach(async function () {
userId = databaseBuilder.factory.buildUser().id;
Expand Down Expand Up @@ -59,7 +61,9 @@ describe('Acceptance | API | campaign-results-route', function () {
campaignId: campaign.id,
};

databaseBuilder.factory.buildAssessmentFromParticipation(
badge = databaseBuilder.factory.buildBadge({ targetProfileId: campaign.targetProfileId });

assessment1 = databaseBuilder.factory.buildAssessmentFromParticipation(
campaignParticipation,
{
organizationId: organization.id,
Expand All @@ -80,6 +84,12 @@ describe('Acceptance | API | campaign-results-route', function () {
participant2,
);

databaseBuilder.factory.buildBadgeAcquisition({
badgeId: badge.id,
userId: assessment1.userId,
campaignParticipationId: assessment1.campaignParticipationId,
});

return databaseBuilder.commit();
});

Expand Down Expand Up @@ -112,6 +122,21 @@ describe('Acceptance | API | campaign-results-route', function () {
expect(response.result.data).to.have.lengthOf(1);
expect(participation['first-name']).to.equal(participant2.firstName);
});

it('should return the participation results for an assessment campaign filter by acquired thematic results', async function () {
const options = {
method: 'GET',
url: `/api/campaigns/${campaign.id}/assessment-results?page[number]=1&page[size]=10&filter[acquiredThematicResults][]=${badge.id}`,
headers: generateAuthenticatedUserRequestHeaders({ userId }),
};

const response = await server.inject(options);

expect(response.statusCode).to.equal(200);
const participation = response.result.data[0].attributes;
expect(response.result.data).to.have.lengthOf(1);
expect(participation['first-name']).to.equal(participant1.firstName);
});
});

describe('GET /api/campaigns/{campaignId}/profiles-collection-participations', function () {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -769,7 +769,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li
});
});

context('when there is a filter on badges', function () {
context('when there is a filter on acquired thematic results', function () {
let badge1;
let badge2;
let user1;
Expand Down Expand Up @@ -802,7 +802,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li
databaseBuilder.factory.learningContent.build(learningContentObjects);
await databaseBuilder.commit();
});
it('returns participants which have one badge', async function () {
it('returns participants which have one thematic result', async function () {
const campaignParticipation1 = databaseBuilder.factory.buildCampaignParticipation({
campaignId: campaign.id,
userId: user1.id,
Expand Down Expand Up @@ -837,7 +837,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li
// when
const { participations } = await campaignAssessmentParticipationResultListRepository.findPaginatedByCampaignId({
campaignId: campaign.id,
filters: { badges: [badge1.id] },
filters: { acquiredThematicResults: [badge1.id] },
});

const participantExternalIds = participations.map((result) => result.participantExternalId);
Expand All @@ -846,7 +846,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li
expect(participantExternalIds).to.exactlyContain(['The good']);
});

it('returns participants which have several badges', async function () {
it('returns participants which have several thematic results', async function () {
const campaignParticipation1 = databaseBuilder.factory.buildCampaignParticipation({
campaignId: campaign.id,
userId: user1.id,
Expand Down Expand Up @@ -879,7 +879,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li
// when
const { participations } = await campaignAssessmentParticipationResultListRepository.findPaginatedByCampaignId({
campaignId: campaign.id,
filters: { badges: [badge1.id, badge2.id] },
filters: { acquiredThematicResults: [badge1.id, badge2.id] },
});

const participantExternalIds = participations.map((result) => result.participantExternalId);
Expand Down
4 changes: 2 additions & 2 deletions orga/app/components/campaign/filter/participation-filters.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,8 @@ export default class ParticipationFilters extends Component {
}

@action
onSelectBadge(badges) {
this.args.onFilter('badges', badges);
onSelectBadge(acquiredThematicResults) {
this.args.onFilter('acquiredThematicResults', acquiredThematicResults);
}

@action
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export default class AssessmentResultsController extends Controller {
@tracked pageSize = 50;
@tracked divisions = [];
@tracked groups = [];
@tracked badges = [];
@tracked acquiredThematicResults = [];
@tracked stages = [];
@tracked search = null;

Expand Down Expand Up @@ -42,7 +42,7 @@ export default class AssessmentResultsController extends Controller {
this.pageNumber = null;
this.divisions = [];
this.groups = [];
this.badges = [];
this.acquiredThematicResults = [];
this.stages = [];
this.search = null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export default class AssessmentResultsRoute extends Route {
groups: {
refreshModel: true,
},
badges: {
acquiredThematicResults: {
refreshModel: true,
},
stages: {
Expand Down Expand Up @@ -54,7 +54,7 @@ export default class AssessmentResultsRoute extends Route {
filter: {
divisions: params.divisions,
groups: params.groups,
badges: params.badges,
acquiredThematicResults: params.acquiredThematicResults,
stages: params.stages,
search: params.search,
},
Expand All @@ -68,7 +68,7 @@ export default class AssessmentResultsRoute extends Route {
controller.pageSize = 50;
controller.divisions = [];
controller.groups = [];
controller.badges = [];
controller.acquiredThematicResults = [];
controller.stages = [];
controller.search = null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
@participations={{@model.participations}}
@selectedDivisions={{this.divisions}}
@selectedGroups={{this.groups}}
@selectedBadges={{this.badges}}
@selectedBadges={{this.acquiredThematicResults}}
@selectedStages={{this.stages}}
@searchFilter={{this.search}}
@onClickParticipant={{this.goToAssessmentPage}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ module('Integration | Component | Campaign::Filter::ParticipationFilters', funct
await click(await screen.findByRole('checkbox', { name: 'Les bases' }));

// then
assert.ok(triggerFiltering.calledWith('badges', ['badge1']));
assert.ok(triggerFiltering.calledWith('acquiredThematicResults', ['badge1']));
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ module('Unit | Controller | authenticated/campaigns/campaign/assessment-results'
controller.set('pageNumber', 1);
controller.set('divisions', ['3eme']);
controller.set('groups', ['L1']);
controller.set('badges', ['badge1']);
controller.set('acquiredThematicResult', ['thematic-result']);
controller.set('stages', ['stage1']);
controller.set('search', 'dam');

Expand All @@ -55,7 +55,7 @@ module('Unit | Controller | authenticated/campaigns/campaign/assessment-results'
assert.deepEqual(controller.search, null);
assert.deepEqual(controller.divisions, []);
assert.deepEqual(controller.groups, []);
assert.deepEqual(controller.badges, []);
assert.deepEqual(controller.acquiredThematicResults, []);
assert.deepEqual(controller.stages, []);
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ module('Unit | Route | authenticated/campaigns/campaign/assessment-results', fun
pageSize: 2,
divisions: ['4eme'],
groups: [],
badges: [],
acquiredThematicResults: [],
stages: [],
search: null,
campaignId: 3,
Expand All @@ -44,7 +44,7 @@ module('Unit | Route | authenticated/campaigns/campaign/assessment-results', fun
filter: {
divisions: params.divisions,
groups: params.groups,
badges: params.badges,
acquiredThematicResults: params.acquiredThematicResults,
stages: params.stages,
search: params.search,
},
Expand Down Expand Up @@ -84,10 +84,10 @@ module('Unit | Route | authenticated/campaigns/campaign/assessment-results', fun
assert.deepEqual(controller.groups, []);
});

test('it reset badges', function (assert) {
const controller = { badges: ['10'] };
test('it reset acquiredThematicResults', function (assert) {
const controller = { acquiredThematicResults: ['10'] };
route.resetController(controller, true);
assert.deepEqual(controller.badges, []);
assert.deepEqual(controller.acquiredThematicResults, []);
});

test('it reset stages', function (assert) {
Expand Down

0 comments on commit 20b8146

Please sign in to comment.