Skip to content

Commit

Permalink
test: ajout de tests sur les nouvelles routes
Browse files Browse the repository at this point in the history
  • Loading branch information
totakoko committed Oct 5, 2023
1 parent d79c1e7 commit 3f11986
Show file tree
Hide file tree
Showing 4 changed files with 188 additions and 3 deletions.
7 changes: 7 additions & 0 deletions server/src/common/actions/indicateurs/indicateurs.actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,13 @@ export async function getOrganismeIndicateursEffectifsParFormation(
localField: "rncp_code",
foreignField: "rncp",
as: "rncp",
pipeline: [
{
$project: {
_id: 0,
},
},
],
},
},
{
Expand Down
3 changes: 2 additions & 1 deletion server/tests/integration/http/indicateurs.route.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { AxiosInstance } from "axiosist";

import { IndicateursEffectifsAvecOrganisme } from "@/common/actions/indicateurs/indicateurs";
import { Effectif } from "@/common/model/@types";
import { effectifsDb, organismesDb } from "@/common/model/collections";
import { historySequenceApprentiToAbandon, historySequenceInscritToApprenti } from "@tests/data/historySequenceSamples";
Expand Down Expand Up @@ -225,7 +226,7 @@ describe("Route indicateurs", () => {
inscritsSansContrat: 0,
rupturants: 0,
abandons: 0,
},
} satisfies IndicateursEffectifsAvecOrganisme,
]
: []
);
Expand Down
101 changes: 99 additions & 2 deletions server/tests/integration/http/organisme.routes.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,18 @@ import { AxiosInstance } from "axiosist";
import { ObjectId, WithId } from "mongodb";

import { PermissionsOrganisme } from "@/common/actions/helpers/permissions-organisme";
import { IndicateursEffectifsAvecFormation } from "@/common/actions/indicateurs/indicateurs";
import { Organisme } from "@/common/model/@types";
import { effectifsDb, organisationsDb, organismesDb, usersMigrationDb } from "@/common/model/collections";
import { Rncp } from "@/common/model/@types/Rncp";
import { effectifsDb, organisationsDb, organismesDb, rncpDb, usersMigrationDb } from "@/common/model/collections";
import { MapObjectIdToString } from "@/common/utils/mongoUtils";
import { getCurrentTime } from "@/common/utils/timeUtils";
import {
historySequenceApprenti,
historySequenceApprentiToAbandon,
historySequenceApprentiToInscrit,
historySequenceInscrit,
historySequenceInscritToApprenti,
} from "@tests/data/historySequenceSamples";
import { createSampleEffectif } from "@tests/data/randomizedSample";
import { useMongo } from "@tests/jest/setupMongo";
Expand Down Expand Up @@ -623,7 +626,101 @@ describe("Routes /organismes/:id", () => {
});
});

describe("PUT /organismes/:id/configure-erp - configuration de l'ERP d'un organisme", () => {
describe("GET /organismes/:id/indicateurs/effectifs/par-formation - indicateurs effectifs d'un organisme par formation", () => {
const date = "2022-10-10T00:00:00.000Z";
const anneeScolaire = "2022-2023";

const ficheRNCP: Rncp = {
rncp: "RNCP34956",
actif: true,
etat_fiche: "Publiée",
intitule: "Arts de la cuisine",
niveau: 4,
romes: ["G1602"],
};

beforeEach(async () => {
await Promise.all([
effectifsDb().insertOne(
createSampleEffectif({
...commonEffectifsAttributes,
annee_scolaire: anneeScolaire,
apprenant: {
historique_statut: historySequenceInscritToApprenti,
},
formation: {
rncp: ficheRNCP.rncp,
},
})
),
rncpDb().insertOne({ ...ficheRNCP }), // la copie par destructuring évite à insertOne d'ajouter _id à l'objet
]);
});

it("Vérifie qu'on ne peut pas accéder à la route sans être authentifié", async () => {
const response = await httpClient.get(
`/api/v1/organismes/${id(1)}/indicateurs/effectifs/par-formation?date=${date}`
);

expectUnauthorizedError(response);
});

describe("Permissions", () => {
testPermissions(
{
"OF cible": true,
"OF responsable": true,
"OF formateur": false,
"OF non lié": false,
"Tête de réseau même réseau": true,
"Tête de réseau autre réseau": false,
"DREETS même région": true,
"DREETS autre région": false,
"DRAAF même région": true,
"DRAAF autre région": false,
"Conseil Régional même région": true,
"Conseil Régional autre région": false,
"CARIF OREF régional même région": true,
"CARIF OREF régional autre région": false,
"DDETS même département": true,
"DDETS autre département": false,
"Académie même académie": true,
"Académie autre académie": false,
"Opérateur public national": true,
"CARIF OREF national": true,
Administrateur: true,
},
async (organisation, allowed) => {
const response = await requestAsOrganisation(
organisation,
"get",
`/api/v1/organismes/${id(1)}/indicateurs/effectifs/par-formation?date=${date}`
);

if (allowed) {
expect(response.status).toStrictEqual(200);
expect(response.data).toStrictEqual([
{
rncp_code: ficheRNCP.rncp,
rncp: ficheRNCP,
apprenants: 1,
apprentis: 1,
inscritsSansContrat: 0,
rupturants: 0,
abandons: 0,
} satisfies IndicateursEffectifsAvecFormation,
]);
} else {
expectForbiddenError(response);
}
}
);
});

// TODO vérifier chaque filtre
});

describe("PUT /organismes/:id/configure-erp - configuration du mode de transmission d'un organisme", () => {
it("Erreur si non authentifié", async () => {
const response = await httpClient.put(`/api/v1/organismes/${id(1)}/configure-erp`, {
mode_de_transmission: "MANUEL",
Expand Down
80 changes: 80 additions & 0 deletions server/tests/integration/http/rncp.routes.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import { AxiosInstance } from "axiosist";

import { Rncp } from "@/common/model/@types/Rncp";
import { organismesDb, rncpDb } from "@/common/model/collections";
import { useMongo } from "@tests/jest/setupMongo";
import { organismes, testPermissions } from "@tests/utils/permissions";
import { RequestAsOrganisationFunc, expectUnauthorizedError, initTestApp } from "@tests/utils/testUtils";

// FIXME route authentifiée

let app: Awaited<ReturnType<typeof initTestApp>>;
let httpClient: AxiosInstance;
let requestAsOrganisation: RequestAsOrganisationFunc;

describe("GET /api/v1/rncp/:code_rncp - retourne une fiche RNCP", () => {
useMongo();

const ficheRNCP: Rncp = {
rncp: "RNCP34956",
actif: true,
etat_fiche: "Publiée",
intitule: "Arts de la cuisine",
niveau: 4,
romes: ["G1602"],
};

beforeEach(async () => {
app = await initTestApp();
httpClient = app.httpClient;
requestAsOrganisation = app.requestAsOrganisation;
});
beforeEach(async () => {
await Promise.all([
organismesDb().insertMany(organismes),
rncpDb().insertOne({ ...ficheRNCP }), // la copie par destructuring évite à insertOne d'ajouter _id à l'objet
]);
});

it("Vérifie qu'on ne peut pas accéder à la route sans être authentifié", async () => {
const response = await httpClient.get(`/api/v1/rncp/${ficheRNCP.rncp}`);
expectUnauthorizedError(response);
});

describe("Permissions", () => {
testPermissions(
{
"OF cible": true,
"OF non lié": true,
"OF formateur": true,
"OF responsable": true,
"Tête de réseau même réseau": true,
"Tête de réseau autre réseau": true,
"DREETS même région": true,
"DREETS autre région": true,
"DRAAF même région": true,
"DRAAF autre région": true,
"Conseil Régional même région": true,
"Conseil Régional autre région": true,
"CARIF OREF régional même région": true,
"CARIF OREF régional autre région": true,
"DDETS même département": true,
"DDETS autre département": true,
"Académie même académie": true,
"Académie autre académie": true,
"Opérateur public national": true,
"CARIF OREF national": true,
Administrateur: true,
},
async (organisation, allowed) => {
const response = await requestAsOrganisation(organisation, "get", `/api/v1/rncp/${ficheRNCP.rncp}`);

expect(response.status).toStrictEqual(allowed ? 200 : 403);
expect(response.data).toStrictEqual({
_id: expect.any(String),
...ficheRNCP,
});
}
);
});
});

0 comments on commit 3f11986

Please sign in to comment.