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
71 lines
2.3 KiB
TypeScript
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);
|
|
});
|