Files
PolyMPR/tests/unit/grades_test.ts
djalim 951c9c1fea
Check Deno code / Check Deno code (pull_request) Has been cancelled
Tests / Unit tests (pull_request) Has been cancelled
Tests / Integration tests (pull_request) Has been cancelled
Check Deno code / Check Deno code (push) Has been cancelled
Tests / Unit tests (push) Has been cancelled
Tests / Integration tests (push) Has been cancelled
test : changed test format + added playwright support
2026-05-03 21:52:02 +02:00

71 lines
2.3 KiB
TypeScript

import { assertEquals } from "@std/assert";
import {
calculateWeightedAverage,
getEffectiveNote,
applyAjustement,
Note,
UEModule,
Ajustement
} from "../../logic/grades.ts";
Deno.test("grades logic: getEffectiveNote uses session 2 if present", () => {
const note: Note = { note: 12, noteSession2: 15 };
assertEquals(getEffectiveNote(note), 15);
});
Deno.test("grades logic: getEffectiveNote uses session 1 if session 2 is null", () => {
const note: Note = { note: 12, noteSession2: null };
assertEquals(getEffectiveNote(note), 12);
});
Deno.test("grades logic: calculateWeightedAverage computes correctly", () => {
const ueModules: UEModule[] = [
{ idModule: "M1", coeff: 2 },
{ idModule: "M2", coeff: 3 },
];
const notesMap: Record<string, Note> = {
"M1": { note: 10, noteSession2: null },
"M2": { note: 15, noteSession2: null },
};
// (10*2 + 15*3) / 5 = (20 + 45) / 5 = 65 / 5 = 13
assertEquals(calculateWeightedAverage(ueModules, notesMap), 13);
});
Deno.test("grades logic: calculateWeightedAverage handles missing notes", () => {
const ueModules: UEModule[] = [
{ idModule: "M1", coeff: 2 },
{ idModule: "M2", coeff: 3 },
];
const notesMap: Record<string, Note> = {
"M1": { note: 10, noteSession2: null },
// M2 manquante
};
// (10*2) / 2 = 10
assertEquals(calculateWeightedAverage(ueModules, notesMap), 10);
});
Deno.test("grades logic: calculateWeightedAverage returns null if no notes", () => {
const ueModules: UEModule[] = [
{ idModule: "M1", coeff: 2 },
];
const notesMap: Record<string, Note> = {};
assertEquals(calculateWeightedAverage(ueModules, notesMap), null);
});
Deno.test("grades logic: applyAjustement replaces calculated average", () => {
const calculatedAvg = 12;
const ajustement: Ajustement = { valeur: 14, malus: 0 };
assertEquals(applyAjustement(calculatedAvg, ajustement), 14);
});
Deno.test("grades logic: applyAjustement subtracts malus", () => {
const calculatedAvg = 12;
const ajustement: Ajustement = { valeur: 14, malus: 2 };
assertEquals(applyAjustement(calculatedAvg, ajustement), 12);
});
Deno.test("grades logic: applyAjustement returns calculated average if no ajustement", () => {
const calculatedAvg = 12;
assertEquals(applyAjustement(calculatedAvg, null), 12);
});