Skip to content

Commit 0e8e2c3

Browse files
E2E Test - Assessment workers (#2423)
Created a simple E2E test for - saveAssessmentData. - updateNOAStatus. - workflowWrapUp.
1 parent aeab96c commit 0e8e2c3

6 files changed

+270
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import {
2+
createE2EDataSources,
3+
E2EDataSources,
4+
saveFakeApplication,
5+
} from "@sims/test-utils";
6+
import {
7+
FAKE_WORKER_JOB_RESULT_PROPERTY,
8+
MockedZeebeJobResult,
9+
} from "../../../../../test/utils/worker-job-mock";
10+
import { createTestingAppModule } from "../../../../../test/helpers";
11+
import { AssessmentController } from "../../assessment.controller";
12+
import { createFakeSaveAssessmentDataPayload } from "./save-assessment-data-factory";
13+
14+
describe("AssessmentController(e2e)-saveAssessmentData", () => {
15+
let db: E2EDataSources;
16+
let assessmentController: AssessmentController;
17+
18+
beforeAll(async () => {
19+
const { nestApplication, dataSource } = await createTestingAppModule();
20+
db = createE2EDataSources(dataSource);
21+
assessmentController = nestApplication.get(AssessmentController);
22+
});
23+
24+
it("Should save student assessment data when it had not been updated yet.", async () => {
25+
// Arrange
26+
const savedApplication = await saveFakeApplication(db.dataSource);
27+
savedApplication.currentAssessment.assessmentData = null;
28+
await db.studentAssessment.save(savedApplication.currentAssessment);
29+
const assessmentData = { totalAssessmentNeed: 1111 };
30+
31+
// Act
32+
const result = await assessmentController.saveAssessmentData(
33+
createFakeSaveAssessmentDataPayload(
34+
savedApplication.currentAssessment.id,
35+
assessmentData,
36+
),
37+
);
38+
39+
// Asserts
40+
expect(result).toHaveProperty(
41+
FAKE_WORKER_JOB_RESULT_PROPERTY,
42+
MockedZeebeJobResult.Complete,
43+
);
44+
45+
// Asserts that the assessment data is saved.
46+
const expectedAssessment = await db.studentAssessment.findOne({
47+
select: {
48+
assessmentData: true as unknown,
49+
assessmentDate: true,
50+
},
51+
where: { id: savedApplication.currentAssessment.id },
52+
});
53+
expect(expectedAssessment.assessmentData).toEqual(assessmentData);
54+
expect(expectedAssessment.assessmentDate).toBeInstanceOf(Date);
55+
});
56+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import {
2+
createE2EDataSources,
3+
E2EDataSources,
4+
saveFakeApplication,
5+
} from "@sims/test-utils";
6+
import {
7+
FAKE_WORKER_JOB_RESULT_PROPERTY,
8+
MockedZeebeJobResult,
9+
} from "../../../../../test/utils/worker-job-mock";
10+
import { createTestingAppModule } from "../../../../../test/helpers";
11+
import { AssessmentController } from "../../assessment.controller";
12+
import {} from "../../assessment.dto";
13+
import { AssessmentStatus } from "@sims/sims-db";
14+
import { createFakeUpdateNOAStatusPayload } from "./update-noa-status-factory";
15+
import { SystemUsersService } from "@sims/services";
16+
17+
describe("AssessmentController(e2e)-updateNOAStatus", () => {
18+
let db: E2EDataSources;
19+
let assessmentController: AssessmentController;
20+
let systemUsersService: SystemUsersService;
21+
22+
beforeAll(async () => {
23+
const { nestApplication, dataSource } = await createTestingAppModule();
24+
db = createE2EDataSources(dataSource);
25+
assessmentController = nestApplication.get(AssessmentController);
26+
systemUsersService = nestApplication.get(SystemUsersService);
27+
});
28+
29+
it("Should update NOA status when noa approval status is null.", async () => {
30+
// Arrange
31+
const savedApplication = await saveFakeApplication(db.dataSource);
32+
33+
// Act
34+
const result = await assessmentController.updateNOAStatus(
35+
createFakeUpdateNOAStatusPayload(savedApplication.currentAssessment.id),
36+
);
37+
38+
// Asserts
39+
expect(result).toHaveProperty(
40+
FAKE_WORKER_JOB_RESULT_PROPERTY,
41+
MockedZeebeJobResult.Complete,
42+
);
43+
44+
// Asserts that the NOA approval status has changed to completed.
45+
const expectedAssessment = await db.studentAssessment.findOne({
46+
select: {
47+
id: true,
48+
noaApprovalStatus: true,
49+
modifier: { id: true },
50+
},
51+
relations: { modifier: true },
52+
where: { id: savedApplication.currentAssessment.id },
53+
});
54+
expect(expectedAssessment.noaApprovalStatus).toBe(
55+
AssessmentStatus.completed,
56+
);
57+
const auditUser = await systemUsersService.systemUser();
58+
expect(expectedAssessment.modifier).toEqual(auditUser);
59+
});
60+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import {
2+
createE2EDataSources,
3+
E2EDataSources,
4+
saveFakeApplication,
5+
} from "@sims/test-utils";
6+
import {
7+
FAKE_WORKER_JOB_RESULT_PROPERTY,
8+
MockedZeebeJobResult,
9+
} from "../../../../../test/utils/worker-job-mock";
10+
import { createTestingAppModule } from "../../../../../test/helpers";
11+
import { createFakeWorkflowWrapUpPayload } from "./workflow-wrap-up-factory";
12+
import { AssessmentController } from "../../assessment.controller";
13+
import { StudentAssessmentStatus, WorkflowData } from "@sims/sims-db";
14+
import { SystemUsersService } from "@sims/services";
15+
16+
describe("AssessmentController(e2e)-workflowWrapUp", () => {
17+
let db: E2EDataSources;
18+
let assessmentController: AssessmentController;
19+
let systemUsersService: SystemUsersService;
20+
21+
beforeAll(async () => {
22+
const { nestApplication, dataSource } = await createTestingAppModule();
23+
db = createE2EDataSources(dataSource);
24+
assessmentController = nestApplication.get(AssessmentController);
25+
systemUsersService = nestApplication.get(SystemUsersService);
26+
});
27+
28+
it(`Should update assessment status to completed when it does not have a status ${StudentAssessmentStatus.InProgress}.`, async () => {
29+
// Arrange
30+
const savedApplication = await saveFakeApplication(db.dataSource);
31+
const workflowData = {
32+
studentData: {
33+
dependantStatus: "independant",
34+
},
35+
} as WorkflowData;
36+
savedApplication.currentAssessment.studentAssessmentStatus =
37+
StudentAssessmentStatus.InProgress;
38+
await db.studentAssessment.save(savedApplication.currentAssessment);
39+
40+
// Act
41+
const result = await assessmentController.workflowWrapUp(
42+
createFakeWorkflowWrapUpPayload(
43+
savedApplication.currentAssessment.id,
44+
workflowData,
45+
),
46+
);
47+
48+
// Asserts
49+
expect(result).toHaveProperty(
50+
FAKE_WORKER_JOB_RESULT_PROPERTY,
51+
MockedZeebeJobResult.Complete,
52+
);
53+
54+
// Asserts that the student assessment status has changed to completed.
55+
const expectedAssessment = await db.studentAssessment.findOne({
56+
select: {
57+
id: true,
58+
studentAssessmentStatus: true,
59+
workflowData: true as unknown,
60+
studentAssessmentStatusUpdatedOn: true,
61+
modifier: { id: true },
62+
updatedAt: true,
63+
},
64+
relations: { modifier: true },
65+
where: { id: savedApplication.currentAssessment.id },
66+
});
67+
expect(expectedAssessment.studentAssessmentStatus).toBe(
68+
StudentAssessmentStatus.Completed,
69+
);
70+
expect(expectedAssessment.workflowData).toEqual(workflowData);
71+
expect(expectedAssessment.studentAssessmentStatusUpdatedOn).toBeInstanceOf(
72+
Date,
73+
);
74+
const auditUser = await systemUsersService.systemUser();
75+
expect(expectedAssessment.modifier).toEqual(auditUser);
76+
expect(expectedAssessment.updatedAt).toBeInstanceOf(Date);
77+
});
78+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { createFakeWorkerJob } from "../../../../../test/utils/worker-job-mock";
2+
import { ICustomHeaders, IOutputVariables, ZeebeJob } from "zeebe-node";
3+
import { SaveAssessmentDataJobInDTO } from "../../assessment.dto";
4+
5+
/**
6+
* Creates a fake save assessment data payload.
7+
* @param assessmentId assessment id.
8+
* @param assessmentData assessment data.
9+
* @returns fake save assessment data payload.
10+
*/
11+
export function createFakeSaveAssessmentDataPayload(
12+
assessmentId: number,
13+
assessmentData: unknown,
14+
): Readonly<
15+
ZeebeJob<SaveAssessmentDataJobInDTO, ICustomHeaders, IOutputVariables>
16+
> {
17+
return createFakeWorkerJob<
18+
SaveAssessmentDataJobInDTO,
19+
ICustomHeaders,
20+
IOutputVariables
21+
>({
22+
variables: { assessmentId, assessmentData },
23+
});
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { createFakeWorkerJob } from "../../../../../test/utils/worker-job-mock";
2+
import { IOutputVariables, ZeebeJob } from "zeebe-node";
3+
import {
4+
UpdateNOAStatusHeaderDTO,
5+
UpdateNOAStatusJobInDTO,
6+
} from "../../assessment.dto";
7+
import { AssessmentStatus } from "@sims/sims-db";
8+
9+
/**
10+
* Creates a fake update NOA status payload.
11+
* @param assessmentId assessment id.
12+
* @returns fake update NOA status payload.
13+
*/
14+
export function createFakeUpdateNOAStatusPayload(
15+
assessmentId: number,
16+
): Readonly<
17+
ZeebeJob<UpdateNOAStatusJobInDTO, UpdateNOAStatusHeaderDTO, IOutputVariables>
18+
> {
19+
return createFakeWorkerJob<
20+
UpdateNOAStatusJobInDTO,
21+
UpdateNOAStatusHeaderDTO,
22+
IOutputVariables
23+
>({
24+
variables: { assessmentId },
25+
customHeaders: { status: AssessmentStatus.completed },
26+
});
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { WorkflowData } from "@sims/sims-db";
2+
import { createFakeWorkerJob } from "../../../../../test/utils/worker-job-mock";
3+
import { ICustomHeaders, IOutputVariables, ZeebeJob } from "zeebe-node";
4+
import { WorkflowWrapUpJobInDTO } from "../../assessment.dto";
5+
6+
/**
7+
* Creates a fake workflow wrap up payload.
8+
* @param assessmentId assessment id.
9+
* @param workflowData workflow data.
10+
* @returns fake workflow wrap up payload.
11+
*/
12+
export function createFakeWorkflowWrapUpPayload(
13+
assessmentId: number,
14+
workflowData: WorkflowData,
15+
): Readonly<
16+
ZeebeJob<WorkflowWrapUpJobInDTO, ICustomHeaders, IOutputVariables>
17+
> {
18+
return createFakeWorkerJob<
19+
WorkflowWrapUpJobInDTO,
20+
ICustomHeaders,
21+
IOutputVariables
22+
>({
23+
variables: { assessmentId, workflowData },
24+
});
25+
}

0 commit comments

Comments
 (0)