diff --git a/high-level-tests/e2e/cypress/integration/pix-app/campaign-assessment.feature b/high-level-tests/e2e/cypress/integration/pix-app/campaign-assessment.feature index 1d3eebd037a..f4e3a276d91 100644 --- a/high-level-tests/e2e/cypress/integration/pix-app/campaign-assessment.feature +++ b/high-level-tests/e2e/cypress/integration/pix-app/campaign-assessment.feature @@ -24,6 +24,9 @@ Fonctionnalité: Campagne d'évaluation Alors je vois l'épreuve "Qui a dit « Toute méchanceté a sa source dans la faiblesse » ?" Lorsque je clique sur "Je passe" Et je clique sur "Voir mes résultats" + Alors je vois la page de "chargement-resultats" de la campagne + Lorsque j'attends 3200 ms + Et je clique sur "Continuer" Alors je vois un résultat global à 50% Alors je vois 2 résultats pour la compétence Lorsque je clique sur "J'envoie mes résultats" diff --git a/mon-pix/app/components/pages/campaigns/results-loader.gjs b/mon-pix/app/components/pages/campaigns/results-loader.gjs new file mode 100644 index 00000000000..b4b556124f9 --- /dev/null +++ b/mon-pix/app/components/pages/campaigns/results-loader.gjs @@ -0,0 +1,20 @@ +import { on } from '@ember/modifier'; +import { action } from '@ember/object'; +import { service } from '@ember/service'; +import Component from '@glimmer/component'; + +export default class ResultsLoader extends Component { + @service router; + + @action + onClick() { + this.router.replaceWith('campaigns.assessment.skill-review', this.args.code); + } + + +} diff --git a/mon-pix/app/router.js b/mon-pix/app/router.js index 25f76bb8ce8..23e12b7ca41 100644 --- a/mon-pix/app/router.js +++ b/mon-pix/app/router.js @@ -91,6 +91,7 @@ Router.map(function () { this.route('fill-in-participant-external-id', { path: '/identifiant' }); }); this.route('entrance', { path: '/entree' }); + this.route('results-loader', { path: '/chargement-resultats' }); this.route('profiles-collection', { path: '/collecte' }, function () { this.route('start-or-resume', { path: '/' }); this.route('send-profile', { path: '/envoi-profil' }); diff --git a/mon-pix/app/routes/assessments/resume.js b/mon-pix/app/routes/assessments/resume.js index c6210e0f19e..94e8ec78aae 100644 --- a/mon-pix/app/routes/assessments/resume.js +++ b/mon-pix/app/routes/assessments/resume.js @@ -109,7 +109,7 @@ export default class ResumeRoute extends Route { if (assessment.isCertification) { this.router.replaceWith('authenticated.certifications.results', assessment.certificationNumber); } else if (assessment.isForCampaign) { - this.router.replaceWith('campaigns.assessment.skill-review', assessment.codeCampaign); + this.router.replaceWith('campaigns.results-loader', assessment.codeCampaign); } else if (assessment.isCompetenceEvaluation) { this.router.replaceWith('authenticated.competences.results', assessment.competenceId, assessment.id); } else { diff --git a/mon-pix/app/routes/campaigns/results-loader.js b/mon-pix/app/routes/campaigns/results-loader.js new file mode 100644 index 00000000000..090e3ac544d --- /dev/null +++ b/mon-pix/app/routes/campaigns/results-loader.js @@ -0,0 +1,38 @@ +import Route from '@ember/routing/route'; +import { service } from '@ember/service'; + +export default class ResultsLoaderRoute extends Route { + @service currentUser; + @service session; + @service router; + @service store; + + beforeModel(transition) { + this.session.requireAuthenticationAndApprovedTermsOfService(transition); + } + + async model() { + const campaign = this.modelFor('campaigns'); + const campaignParticipation = await this.store.queryRecord('campaignParticipation', { + campaignId: campaign.id, + userId: this.currentUser.user.id, + }); + return { + campaign, + campaignParticipation, + }; + } + + async afterModel({ campaign, campaignParticipation }) { + if (!campaignParticipation) { + this.router.replaceWith('campaigns.campaign-landing-page', campaign.code); + } + if (campaignParticipation.sharedAt !== null) { + this.router.replaceWith('campaigns.assessment.skill-review', campaign.code); + } + const assessment = await campaignParticipation.assessment; + if (campaignParticipation && !assessment.isCompleted) { + this.router.replaceWith('campaigns.assessment.start-or-resume', campaign.code); + } + } +} diff --git a/mon-pix/app/templates/campaigns/results-loader.hbs b/mon-pix/app/templates/campaigns/results-loader.hbs new file mode 100644 index 00000000000..1846674e7a3 --- /dev/null +++ b/mon-pix/app/templates/campaigns/results-loader.hbs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/mon-pix/tests/unit/routes/assessments/resume-test.js b/mon-pix/tests/unit/routes/assessments/resume-test.js index 538f88689ab..5ffe8595e15 100644 --- a/mon-pix/tests/unit/routes/assessments/resume-test.js +++ b/mon-pix/tests/unit/routes/assessments/resume-test.js @@ -159,7 +159,7 @@ module('Unit | Route | Assessments | Resume', function (hooks) { // then return promise.then(() => { - sinon.assert.calledWith(route.router.replaceWith, 'campaigns.assessment.skill-review', 'konami'); + sinon.assert.calledWith(route.router.replaceWith, 'campaigns.results-loader', 'konami'); assert.ok(true); }); }); @@ -197,7 +197,7 @@ module('Unit | Route | Assessments | Resume', function (hooks) { route.redirect(assessment); // then - sinon.assert.calledWith(route.router.replaceWith, 'campaigns.assessment.skill-review', 'konami'); + sinon.assert.calledWith(route.router.replaceWith, 'campaigns.results-loader', 'konami'); assert.ok(true); }); });