|
1 | 1 | import { AssessmentEndedError } from '../../../../../src/shared/domain/errors.js';
|
| 2 | +import { Statuses } from '../../../../../src/shared/domain/models/Challenge.js'; |
2 | 3 | import { Assessment } from '../../../../../src/shared/domain/models/index.js';
|
3 | 4 | import { getNextChallenge } from '../../../../../src/shared/domain/usecases/get-next-challenge.js';
|
4 | 5 | import { catchErr, domainBuilder, expect, preventStubsToBeCalledUnexpectedly, sinon } from '../../../../test-helper.js';
|
@@ -157,27 +158,56 @@ describe('Shared | Unit | Domain | Use Cases | get-next-challenge', function ()
|
157 | 158 | });
|
158 | 159 |
|
159 | 160 | context('when the latest challenge asked has not been answered yet', function () {
|
160 |
| - it('should return latest challenge', async function () { |
161 |
| - const assessment = domainBuilder.buildAssessment({ |
162 |
| - state: Assessment.states.STARTED, |
163 |
| - type: Assessment.types.PREVIEW, |
164 |
| - lastChallengeId: 'previousChallengeId', |
| 161 | + context('when challenge is operative', function () { |
| 162 | + it('should return latest challenge', async function () { |
| 163 | + const assessment = domainBuilder.buildAssessment({ |
| 164 | + state: Assessment.states.STARTED, |
| 165 | + type: Assessment.types.PREVIEW, |
| 166 | + lastChallengeId: 'previousChallengeId', |
| 167 | + }); |
| 168 | + assessmentRepository_getStub.withArgs(assessmentId).resolves(assessment); |
| 169 | + assessmentRepository_updateLastQuestionDateStub.resolves(); |
| 170 | + assessmentRepository_updateWhenNewChallengeIsAskedStub.resolves(); |
| 171 | + const previousChallenge = domainBuilder.buildChallenge({ |
| 172 | + id: 'previousChallengeId', |
| 173 | + status: Statuses.VALIDATED, |
| 174 | + }); |
| 175 | + answerRepository_findByAssessmentStub |
| 176 | + .withArgs(assessment.id) |
| 177 | + .resolves([ |
| 178 | + domainBuilder.buildAnswer({ challengeId: 'someChallengeId' }), |
| 179 | + domainBuilder.buildAnswer({ challengeId: 'someOtherChallengeId' }), |
| 180 | + ]); |
| 181 | + challengeRepository_getStub.withArgs('previousChallengeId').resolves(previousChallenge); |
| 182 | + |
| 183 | + const actualNextChallenge = await getNextChallenge(dependencies); |
| 184 | + |
| 185 | + expect(actualNextChallenge).to.deepEqualInstance(previousChallenge); |
165 | 186 | });
|
166 |
| - assessmentRepository_getStub.withArgs(assessmentId).resolves(assessment); |
167 |
| - assessmentRepository_updateLastQuestionDateStub.resolves(); |
168 |
| - assessmentRepository_updateWhenNewChallengeIsAskedStub.resolves(); |
169 |
| - const previousChallenge = domainBuilder.buildChallenge({ id: 'previousChallengeId' }); |
170 |
| - answerRepository_findByAssessmentStub |
171 |
| - .withArgs(assessment.id) |
172 |
| - .resolves([ |
173 |
| - domainBuilder.buildAnswer({ challengeId: 'someChallengeId' }), |
174 |
| - domainBuilder.buildAnswer({ challengeId: 'someOtherChallengeId' }), |
175 |
| - ]); |
176 |
| - challengeRepository_getStub.withArgs('previousChallengeId').resolves(previousChallenge); |
| 187 | + }); |
| 188 | + context('when challenge is not operative', function () { |
| 189 | + it('should compute next challenge', async function () { |
| 190 | + const assessment = domainBuilder.buildAssessment({ |
| 191 | + state: Assessment.states.STARTED, |
| 192 | + type: Assessment.types.PREVIEW, |
| 193 | + lastChallengeId: 'previousChallengeId', |
| 194 | + }); |
| 195 | + assessmentRepository_getStub.withArgs(assessmentId).resolves(assessment); |
| 196 | + assessmentRepository_updateLastQuestionDateStub.resolves(); |
| 197 | + assessmentRepository_updateWhenNewChallengeIsAskedStub.resolves(); |
| 198 | + const challenge = domainBuilder.buildChallenge({ id: 'nextChallengeForPreview' }); |
| 199 | + const previousChallenge = domainBuilder.buildChallenge({ |
| 200 | + id: 'previousChallengeId', |
| 201 | + status: Statuses.OBSOLETE, |
| 202 | + }); |
| 203 | + evaluationUsecases_getNextChallengeForPreviewStub.withArgs({}).resolves(challenge); |
| 204 | + answerRepository_findByAssessmentStub.withArgs(assessment.id).resolves([]); |
| 205 | + challengeRepository_getStub.withArgs('previousChallengeId').resolves(previousChallenge); |
177 | 206 |
|
178 |
| - const actualNextChallenge = await getNextChallenge(dependencies); |
| 207 | + const actualNextChallenge = await getNextChallenge(dependencies); |
179 | 208 |
|
180 |
| - expect(actualNextChallenge).to.deepEqualInstance(previousChallenge); |
| 209 | + expect(actualNextChallenge).to.deepEqualInstance(challenge); |
| 210 | + }); |
181 | 211 | });
|
182 | 212 | });
|
183 | 213 | });
|
|
0 commit comments