Skip to content

Commit b114426

Browse files
committed
wip
1 parent 33accdc commit b114426

File tree

3 files changed

+127
-9
lines changed

3 files changed

+127
-9
lines changed

api/scripts/certification/fix-competence-marks.js

-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,3 @@
1-
import 'dotenv/config';
2-
3-
import { knex } from '../../db/knex-database-connection.js';
4-
import { SESSIONS_VERSIONS } from '../../src/certification/shared/domain/models/SessionVersion.js';
5-
import { Script } from '../../src/shared/application/scripts/script.js';
6-
import { ScriptRunner } from '../../src/shared/application/scripts/script-runner.js';
7-
import { PIX_ORIGIN } from '../../src/shared/domain/constants.js';
8-
import { Assessment } from '../../src/shared/domain/models/Assessment.js';
9-
101
export class FixCompetenceMarksScript extends Script {
112
constructor() {
123
super({
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import 'dotenv/config';
2+
3+
import { usecases } from '../../src/certification/session-management/domain/usecases/index.js';
4+
import * as sessionRepository from '../../src/certification/session-management/infrastructure/repositories/session-repository.js';
5+
import * as certificationReportRepository from '../../src/certification/shared/infrastructure/repositories/certification-report-repository.js';
6+
import { Script } from '../../src/shared/application/scripts/script.js';
7+
import { ScriptRunner } from '../../src/shared/application/scripts/script-runner.js';
8+
9+
export class FixNotFullyFinalizedSession extends Script {
10+
constructor() {
11+
super({
12+
description: 'Re-finalize session without finalized-session entry',
13+
permanent: false,
14+
options: {
15+
sessionId: {
16+
type: 'integer',
17+
describe: 'Id of the session to be finalized',
18+
demandOption: true,
19+
},
20+
},
21+
});
22+
}
23+
24+
async handle({
25+
options,
26+
logger,
27+
finalizeSession = usecases.finalizeSession,
28+
unfinalizeSession = usecases.unfinalizeSession,
29+
processAutoJury = usecases.processAutoJury,
30+
registerPublishableSession = usecases.registerPublishableSession,
31+
} = {}) {
32+
try {
33+
const { sessionId } = options;
34+
this.logger = logger;
35+
36+
await unfinalizeSession({ sessionId });
37+
38+
const { examinerGlobalComment, hasIncident, hasJoiningIssue } = await sessionRepository.get({ id: sessionId });
39+
const certificationReports = await certificationReportRepository.findBySessionId({ sessionId });
40+
41+
const sessionFinalized = await finalizeSession({
42+
sessionId,
43+
certificationReports,
44+
examinerGlobalComment,
45+
hasIncident,
46+
hasJoiningIssue,
47+
});
48+
49+
const autoJuryDone = await processAutoJury({ sessionFinalized });
50+
51+
await registerPublishableSession({ autoJuryDone });
52+
53+
this.logger.info(`Controller finalized`);
54+
55+
return 0;
56+
} catch (e) {
57+
throw new Error(e);
58+
}
59+
}
60+
}
61+
62+
await ScriptRunner.execute(import.meta.url, FixNotFullyFinalizedSession);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { session } from '../../../../db/seeds/data/common/tooling/index.js';
2+
import { FixNotFullyFinalizedSession } from '../../../../scripts/certification/fix-not-fully-finalized-session.js';
3+
import { databaseBuilder, expect, knex, sinon } from '../../../test-helper.js';
4+
5+
describe('Integration | Scripts | Certification | fix not fully finalized session', function () {
6+
let assessment, certificationCourse, session, fixNotFullyFinalizedSessionScript, logger;
7+
8+
beforeEach(async function () {
9+
session = databaseBuilder.factory.buildSession({
10+
version: 2,
11+
finalizedAt: new Date('2024-01-02T00:00:00Z'),
12+
});
13+
const user = databaseBuilder.factory.buildUser();
14+
databaseBuilder.factory.buildCertificationCandidate({
15+
sessionId: session.id,
16+
userId: user.id,
17+
});
18+
certificationCourse = databaseBuilder.factory.buildCertificationCourse({
19+
createdAt: new Date('2024-02-01T00:00:00Z'),
20+
sessionId: session.id,
21+
userId: user.id,
22+
completedAt: new Date('2024-02-01T08:00:00Z'),
23+
isPublished: false,
24+
isCancelled: false,
25+
abortReason: null,
26+
version: 2,
27+
isRejectedForFraud: false,
28+
endedAt: null,
29+
});
30+
assessment = databaseBuilder.factory.buildAssessment({
31+
certificationCourseId: certificationCourse.id,
32+
userId: user.id,
33+
type: 'CERTIFICATION',
34+
state: 'completed',
35+
method: 'CERTIFICATION_DETERMINED',
36+
});
37+
databaseBuilder.factory.buildAssessmentResult({
38+
assessmentId: assessment.id,
39+
userId: user.id,
40+
type: 'CERTIFICATION',
41+
status: 'validated',
42+
});
43+
44+
await databaseBuilder.commit();
45+
46+
logger = { info: sinon.stub() };
47+
fixNotFullyFinalizedSessionScript = new FixNotFullyFinalizedSession();
48+
});
49+
50+
it('creates a finalized session', async function () {
51+
// when
52+
await fixNotFullyFinalizedSessionScript.handle({
53+
options: { sessionId: session.id },
54+
logger,
55+
});
56+
57+
// then
58+
const { count: finalizedSessionCount } = await knex('finalized-sessions')
59+
.where({ sessionId: session.id })
60+
.count()
61+
.first();
62+
63+
expect(finalizedSessionCount).to.equal(1);
64+
});
65+
});

0 commit comments

Comments
 (0)