/ tests / signatures / partial.test.ts
partial.test.ts
  1  import { describe, expect, it } from "bun:test";
  2  import { Signatures } from "src/iut/signatures";
  3  import html from "./partial.html" with { type: "text" };
  4  
  5  describe("iut/signatures [partial]", () => {
  6    const report = Signatures.parse(html as unknown as string);
  7  
  8    it("should parse the report card", () => {
  9      expect(report.fullName).toBe("JOHN DOE");
 10      expect(report.promotion).toBe("Année 3");
 11      expect(report.semesters).toBeArrayOfSize(2);
 12    });
 13  
 14    it("should parse the 5th semester metadata", () => {
 15      const semester = report.semesters[0];
 16      expect(semester.name).toBe("Semestre 5");
 17      expect(semester.units).toBeArrayOfSize(3);
 18    });
 19  
 20    it("should parse the 5th semester's 1st unit", () => {
 21      const unit = report.semesters[0].units[0];
 22  
 23      expect(unit.average).toBe(13);
 24      expect(unit.code).toBe("UE 5.1");
 25      expect(unit.name).toBe("Réaliser un développement d'application");
 26      expect(unit.coefficient).toBe(10);
 27      expect(unit.modules).toBeArrayOfSize(11);
 28  
 29      {
 30        const module = unit.modules[0];
 31        expect(module.code).toBe("R5.A.02");
 32        expect(module.name).toBe("Projet personnel et professionnel");
 33        expect(module.coefficient).toBe(0.1);
 34        expect(module.average).toBeNull();
 35        expect(module.exams).toBeArrayOfSize(1);
 36  
 37        const exam = module.exams[0];
 38        expect(exam.date).toBeNull();
 39        expect(exam.average).toBeNull();
 40        expect(exam.globalAverage).toBeNull();
 41        expect(exam.coefficient).toBe(1.0);
 42        expect(exam.name).toBe("Moyenne");
 43      }
 44  
 45      {
 46        const module = unit.modules[1];
 47        expect(module.code).toBe("R5.A.04");
 48        expect(module.name).toBe("Qualité algorithmique");
 49        expect(module.coefficient).toBe(0.2);
 50        expect(module.average).toBeNull();
 51        expect(module.exams).toBeArrayOfSize(1);
 52  
 53        const exam = module.exams[0];
 54        expect(exam.date).toBeNull();
 55        expect(exam.average).toBeNull();
 56        expect(exam.globalAverage).toBeNull();
 57        expect(exam.coefficient).toBe(1.0);
 58        expect(exam.name).toBe("Moyenne");
 59      }
 60  
 61      {
 62        const module = unit.modules[2];
 63        expect(module.code).toBe("R5.A.05");
 64        expect(module.name).toBe("Programmation avancée");
 65        expect(module.coefficient).toBe(0.9);
 66        expect(module.average).toBeNull();
 67        expect(module.exams).toBeArrayOfSize(1);
 68  
 69        const exam = module.exams[0];
 70        expect(exam.date).toBeNull();
 71        expect(exam.average).toBeNull();
 72        expect(exam.globalAverage).toBeNull();
 73        expect(exam.coefficient).toBe(1.0);
 74        expect(exam.name).toBe("Moyenne");
 75      }
 76  
 77      {
 78        const module = unit.modules[3];
 79        expect(module.code).toBe("R5.A.06");
 80        expect(module.name).toBe("Sensibilisation à la programmation multimédia");
 81        expect(module.coefficient).toBe(0.2);
 82        expect(module.average).toBeNull();
 83        expect(module.exams).toBeArrayOfSize(1);
 84  
 85        const exam = module.exams[0];
 86        expect(exam.date).toBeNull();
 87        expect(exam.average).toBeNull();
 88        expect(exam.globalAverage).toBeNull();
 89        expect(exam.coefficient).toBe(1.0);
 90        expect(exam.name).toBe("Moyenne");
 91      }
 92  
 93      {
 94        const module = unit.modules[4];
 95        expect(module.code).toBe("R5.A.07");
 96        expect(module.name).toBe("Automatisation de la chaîne de production");
 97        expect(module.coefficient).toBe(0.6);
 98        expect(module.average).toBe(13);
 99        expect(module.exams).toBeArrayOfSize(1);
100  
101        const exam = module.exams[0];
102        expect(exam.date).toEqual(new Date("2025-11-20"));
103        expect(exam.average).toBe(13);
104        expect(exam.globalAverage).toBe(12.56);
105        expect(exam.coefficient).toBe(1.0);
106        expect(exam.name).toBe("Moyenne");
107      }
108  
109      {
110        const module = unit.modules[5];
111        expect(module.code).toBe("R5.A.08");
112        expect(module.name).toBe("Qualité de développement");
113        expect(module.coefficient).toBe(0.7);
114        expect(module.average).toBeNull();
115        expect(module.exams).toBeArrayOfSize(1);
116  
117        const exam = module.exams[0];
118        expect(exam.date).toBeNull();
119        expect(exam.average).toBeNull();
120        expect(exam.globalAverage).toBeNull();
121        expect(exam.coefficient).toBe(1.0);
122        expect(exam.name).toBe("Moyenne");
123      }
124  
125      {
126        const module = unit.modules[6];
127        expect(module.code).toBe("R5.A.09");
128        expect(module.name).toBe("Virtualisation avancée");
129        expect(module.coefficient).toBe(0.7);
130        expect(module.average).toBeNull();
131        expect(module.exams).toBeArrayOfSize(1);
132  
133        const exam = module.exams[0];
134        expect(exam.date).toBeNull();
135        expect(exam.average).toBeNull();
136        expect(exam.globalAverage).toBeNull();
137        expect(exam.coefficient).toBe(1.0);
138        expect(exam.name).toBe("Moyenne");
139      }
140  
141      {
142        const module = unit.modules[7];
143        expect(module.code).toBe("R5.A.10");
144        expect(module.name).toBe("Nouveaux paradigmes de base de données");
145        expect(module.coefficient).toBe(1.1);
146        expect(module.average).toBeNull();
147        expect(module.exams).toBeArrayOfSize(1);
148  
149        const exam = module.exams[0];
150        expect(exam.date).toBeNull();
151        expect(exam.average).toBeNull();
152        expect(exam.globalAverage).toBeNull();
153        expect(exam.coefficient).toBe(1.0);
154        expect(exam.name).toBe("Moyenne");
155      }
156  
157      {
158        const module = unit.modules[8];
159        expect(module.code).toBe("R5.A.13");
160        expect(module.name).toBe("Économie durable et numérique");
161        expect(module.coefficient).toBe(0.2);
162        expect(module.average).toBeNull();
163        expect(module.exams).toBeArrayOfSize(1);
164  
165        const exam = module.exams[0];
166        expect(exam.date).toBeNull();
167        expect(exam.average).toBeNull();
168        expect(exam.globalAverage).toBeNull();
169        expect(exam.coefficient).toBe(1.0);
170        expect(exam.name).toBe("Moyenne");
171      }
172  
173      {
174        const module = unit.modules[9];
175        expect(module.code).toBe("R5.A.14");
176        expect(module.name).toBe("Anglais");
177        expect(module.coefficient).toBe(0.3);
178        expect(module.average).toBeNull();
179        expect(module.exams).toBeArrayOfSize(1);
180  
181        const exam = module.exams[0];
182        expect(exam.date).toBeNull();
183        expect(exam.average).toBeNull();
184        expect(exam.globalAverage).toBeNull();
185        expect(exam.coefficient).toBe(1.0);
186        expect(exam.name).toBe("Moyenne");
187      }
188  
189      {
190        const module = unit.modules[10];
191        expect(module.code).toBe("S5.A.01");
192        expect(module.name).toBe("Développement avancé");
193        expect(module.coefficient).toBe(5.0);
194        expect(module.average).toBeNull();
195        expect(module.exams).toBeArrayOfSize(1);
196  
197        const exam = module.exams[0];
198        expect(exam.date).toBeNull();
199        expect(exam.average).toBeNull();
200        expect(exam.globalAverage).toBeNull();
201        expect(exam.coefficient).toBe(1.0);
202        expect(exam.name).toBe("Moyenne");
203      }
204    });
205  
206    it("should parse the 5th semester's 2nd unit", () => {
207      const unit = report.semesters[0].units[1];
208  
209      expect(unit.average).toBeNull();
210      expect(unit.code).toBe("UE 5.2");
211      expect(unit.name).toBe("Optimiser des applications");
212      expect(unit.coefficient).toBe(10);
213      expect(unit.modules).toBeArrayOfSize(11);
214  
215      {
216        const module = unit.modules[0];
217        expect(module.code).toBe("R5.A.02");
218        expect(module.name).toBe("Projet personnel et professionnel");
219        expect(module.coefficient).toBe(0.1);
220        expect(module.average).toBeNull();
221        expect(module.exams).toBeArrayOfSize(0);
222      }
223  
224      {
225        const module = unit.modules[1];
226        expect(module.code).toBe("R5.A.04");
227        expect(module.name).toBe("Qualité algorithmique");
228        expect(module.coefficient).toBe(0.6);
229        expect(module.average).toBeNull();
230        expect(module.exams).toBeArrayOfSize(0);
231      }
232  
233      {
234        const module = unit.modules[2];
235        expect(module.code).toBe("R5.A.05");
236        expect(module.name).toBe("Programmation avancée");
237        expect(module.coefficient).toBe(0.7);
238        expect(module.average).toBeNull();
239        expect(module.exams).toBeArrayOfSize(0);
240      }
241  
242      {
243        const module = unit.modules[3];
244        expect(module.code).toBe("R5.A.06");
245        expect(module.name).toBe("Sensibilisation à la programmation multimédia");
246        expect(module.coefficient).toBe(0.2);
247        expect(module.average).toBeNull();
248        expect(module.exams).toBeArrayOfSize(0);
249      }
250  
251      {
252        const module = unit.modules[4];
253        expect(module.code).toBe("R5.A.08");
254        expect(module.name).toBe("Qualité de développement");
255        expect(module.coefficient).toBe(0.5);
256        expect(module.average).toBeNull();
257        expect(module.exams).toBeArrayOfSize(0);
258      }
259  
260      {
261        const module = unit.modules[5];
262        expect(module.code).toBe("R5.A.09");
263        expect(module.name).toBe("Virtualisation avancée");
264        expect(module.coefficient).toBe(0.2);
265        expect(module.average).toBeNull();
266        expect(module.exams).toBeArrayOfSize(0);
267      }
268  
269      {
270        const module = unit.modules[6];
271        expect(module.code).toBe("R5.A.10");
272        expect(module.name).toBe("Nouveaux paradigmes de base de données");
273        expect(module.coefficient).toBe(0.4);
274        expect(module.average).toBeNull();
275        expect(module.exams).toBeArrayOfSize(0);
276      }
277  
278      {
279        const module = unit.modules[7];
280        expect(module.code).toBe("R5.A.11");
281        expect(module.name).toBe("Méthodes d'optimisation pour l'aide à la décision");
282        expect(module.coefficient).toBe(0.7);
283        expect(module.average).toBeNull();
284        expect(module.exams).toBeArrayOfSize(1);
285  
286        const exam = module.exams[0];
287        expect(exam.date).toBeNull();
288        expect(exam.average).toBeNull();
289        expect(exam.globalAverage).toBeNull();
290        expect(exam.coefficient).toBe(1.0);
291        expect(exam.name).toBe("Moyenne");
292      }
293  
294      {
295        const module = unit.modules[8];
296        expect(module.code).toBe("R5.A.12");
297        expect(module.name).toBe("Modélisations mathématiques");
298        expect(module.coefficient).toBe(1.2);
299        expect(module.average).toBeNull();
300        expect(module.exams).toBeArrayOfSize(1);
301  
302        const exam = module.exams[0];
303        expect(exam.date).toBeNull();
304        expect(exam.average).toBeNull();
305        expect(exam.globalAverage).toBeNull();
306        expect(exam.coefficient).toBe(1.0);
307        expect(exam.name).toBe("Moyenne");
308      }
309  
310      {
311        const module = unit.modules[9];
312        expect(module.code).toBe("R5.A.14");
313        expect(module.name).toBe("Anglais");
314        expect(module.coefficient).toBe(0.4);
315        expect(module.average).toBeNull();
316        expect(module.exams).toBeArrayOfSize(0);
317      }
318  
319      {
320        const module = unit.modules[10];
321        expect(module.code).toBe("S5.A.01");
322        expect(module.name).toBe("Développement avancé");
323        expect(module.coefficient).toBe(5.0);
324        expect(module.average).toBeNull();
325        expect(module.exams).toBeArrayOfSize(0);
326      }
327    });
328  
329    it("should parse the 6th semester metadata", () => {
330      const semester = report.semesters[1];
331      expect(semester.name).toBe("Semestre 6");
332      expect(semester.units).toBeArrayOfSize(3);
333    });
334  });