Skip to content

Commit 5f29d98

Browse files
committed
feat(api): added a test for simple status candidacy counters
1 parent fca61c3 commit 5f29d98

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
/**
2+
* @jest-environment ./test/fastify-test-env.ts
3+
*/
4+
5+
import { CandidacyStatusStep } from "@prisma/client";
6+
import { authorizationHeaderForUser } from "../../test/helpers/authorization-helper";
7+
import { createCandidacyHelper } from "../../test/helpers/entities/create-candidacy-helper";
8+
import { injectGraphql } from "../../test/helpers/graphql-helper";
9+
import { clearDatabase } from "../../test/jestClearDatabaseBeforeEachTestFile";
10+
import { CandidacyStatusFilter } from "./candidacy.types";
11+
12+
afterEach(async () => {
13+
await clearDatabase();
14+
});
15+
16+
const createCandidacies = async (
17+
statusAndCounts: {
18+
status: CandidacyStatusStep;
19+
count: number;
20+
}[],
21+
) => {
22+
for (const { status, count } of statusAndCounts) {
23+
for (let i = 0; i < count; i++) {
24+
await createCandidacyHelper({
25+
candidacyActiveStatus: status,
26+
});
27+
}
28+
}
29+
};
30+
31+
describe("Simple candidacy status counters", () => {
32+
const testData: [
33+
CandidacyStatusStep,
34+
CandidacyStatusFilter,
35+
"ACTIVE" | "INACTIVE",
36+
][] = [
37+
[CandidacyStatusStep.PROJET, "PROJET_HORS_ABANDON", "INACTIVE"],
38+
[CandidacyStatusStep.VALIDATION, "VALIDATION_HORS_ABANDON", "ACTIVE"],
39+
[
40+
CandidacyStatusStep.PRISE_EN_CHARGE,
41+
"PRISE_EN_CHARGE_HORS_ABANDON",
42+
"ACTIVE",
43+
],
44+
[
45+
CandidacyStatusStep.PARCOURS_ENVOYE,
46+
"PARCOURS_ENVOYE_HORS_ABANDON",
47+
"ACTIVE",
48+
],
49+
[
50+
CandidacyStatusStep.PARCOURS_CONFIRME,
51+
"PARCOURS_CONFIRME_HORS_ABANDON",
52+
"ACTIVE",
53+
],
54+
[
55+
CandidacyStatusStep.DOSSIER_FAISABILITE_ENVOYE,
56+
"DOSSIER_FAISABILITE_ENVOYE_HORS_ABANDON",
57+
"ACTIVE",
58+
],
59+
[
60+
CandidacyStatusStep.DOSSIER_FAISABILITE_INCOMPLET,
61+
"DOSSIER_FAISABILITE_INCOMPLET_HORS_ABANDON",
62+
"ACTIVE",
63+
],
64+
[
65+
CandidacyStatusStep.DOSSIER_FAISABILITE_COMPLET,
66+
"DOSSIER_FAISABILITE_ENVOYE_HORS_ABANDON",
67+
"ACTIVE",
68+
],
69+
[
70+
CandidacyStatusStep.DOSSIER_FAISABILITE_RECEVABLE,
71+
"DOSSIER_FAISABILITE_RECEVABLE_HORS_ABANDON",
72+
"ACTIVE",
73+
],
74+
[
75+
CandidacyStatusStep.DOSSIER_FAISABILITE_NON_RECEVABLE,
76+
"DOSSIER_FAISABILITE_NON_RECEVABLE_HORS_ABANDON",
77+
"INACTIVE",
78+
],
79+
[
80+
CandidacyStatusStep.DOSSIER_DE_VALIDATION_ENVOYE,
81+
"DOSSIER_DE_VALIDATION_ENVOYE_HORS_ABANDON",
82+
"ACTIVE",
83+
],
84+
[
85+
CandidacyStatusStep.DOSSIER_DE_VALIDATION_SIGNALE,
86+
"DOSSIER_DE_VALIDATION_SIGNALE_HORS_ABANDON",
87+
"ACTIVE",
88+
],
89+
[
90+
CandidacyStatusStep.DEMANDE_PAIEMENT_ENVOYEE,
91+
"DEMANDE_PAIEMENT_ENVOYEE_HORS_ABANDON",
92+
"ACTIVE",
93+
],
94+
];
95+
test.each(testData)(
96+
"should count 5 candidacies with status %s and status filter %s as %s for admin",
97+
async (
98+
status: CandidacyStatusStep,
99+
statusFilter: CandidacyStatusFilter,
100+
activeOrInactive: "ACTIVE" | "INACTIVE",
101+
) => {
102+
await createCandidacies([
103+
{
104+
status,
105+
count: 5,
106+
},
107+
]);
108+
const resp = await injectGraphql({
109+
fastify: (global as any).fastify,
110+
authorization: authorizationHeaderForUser({
111+
role: "admin",
112+
keycloakId: "whatever",
113+
}),
114+
payload: {
115+
requestType: "query",
116+
endpoint: "candidacy_candidacyCountByStatus",
117+
returnFields:
118+
"{ACTIVE_HORS_ABANDON, ABANDON, REORIENTEE, ARCHIVE_HORS_ABANDON_HORS_REORIENTATION, PARCOURS_CONFIRME_HORS_ABANDON, PRISE_EN_CHARGE_HORS_ABANDON, PARCOURS_ENVOYE_HORS_ABANDON, DOSSIER_FAISABILITE_ENVOYE_HORS_ABANDON, DOSSIER_FAISABILITE_RECEVABLE_HORS_ABANDON, DOSSIER_FAISABILITE_INCOMPLET_HORS_ABANDON, DOSSIER_FAISABILITE_NON_RECEVABLE_HORS_ABANDON, DOSSIER_DE_VALIDATION_ENVOYE_HORS_ABANDON, DOSSIER_DE_VALIDATION_SIGNALE_HORS_ABANDON, JURY_HORS_ABANDON, JURY_PROGRAMME_HORS_ABANDON, JURY_PASSE_HORS_ABANDON, DEMANDE_FINANCEMENT_ENVOYE_HORS_ABANDON, DEMANDE_PAIEMENT_ENVOYEE_HORS_ABANDON, VALIDATION_HORS_ABANDON, PROJET_HORS_ABANDON}",
119+
},
120+
});
121+
expect(resp.statusCode).toEqual(200);
122+
const obj = resp.json();
123+
expect(obj.data.candidacy_candidacyCountByStatus).toMatchObject({
124+
ACTIVE_HORS_ABANDON: activeOrInactive === "ACTIVE" ? 5 : 0,
125+
ABANDON: 0,
126+
REORIENTEE: 0,
127+
ARCHIVE_HORS_ABANDON_HORS_REORIENTATION: 0,
128+
PARCOURS_CONFIRME_HORS_ABANDON: 0,
129+
PRISE_EN_CHARGE_HORS_ABANDON: 0,
130+
PARCOURS_ENVOYE_HORS_ABANDON: 0,
131+
DOSSIER_FAISABILITE_ENVOYE_HORS_ABANDON: 0,
132+
DOSSIER_FAISABILITE_RECEVABLE_HORS_ABANDON: 0,
133+
DOSSIER_FAISABILITE_INCOMPLET_HORS_ABANDON: 0,
134+
DOSSIER_FAISABILITE_NON_RECEVABLE_HORS_ABANDON: 0,
135+
DOSSIER_DE_VALIDATION_ENVOYE_HORS_ABANDON: 0,
136+
DOSSIER_DE_VALIDATION_SIGNALE_HORS_ABANDON: 0,
137+
JURY_HORS_ABANDON: 0,
138+
JURY_PROGRAMME_HORS_ABANDON: 0,
139+
JURY_PASSE_HORS_ABANDON: 0,
140+
DEMANDE_FINANCEMENT_ENVOYE_HORS_ABANDON: 0,
141+
DEMANDE_PAIEMENT_ENVOYEE_HORS_ABANDON: 0,
142+
VALIDATION_HORS_ABANDON: 0,
143+
PROJET_HORS_ABANDON: 0,
144+
[statusFilter]: 5,
145+
});
146+
},
147+
);
148+
});

0 commit comments

Comments
 (0)