1
0

test: Added xlsx parsing tests
Remote Deploy / deploy (push) Successful in 1m25s

This commit is contained in:
2026-06-04 11:52:41 +02:00
parent 1c6023beab
commit e94c43ca6e
9 changed files with 1724 additions and 367 deletions
+353
View File
@@ -0,0 +1,353 @@
import { describe, it, expect } from "vitest";
import fs from "fs";
import parseAbsence from "../scrape/utils/parseAbsence.js";
const teachermap: Record<string, string> = JSON.parse(
fs.readFileSync("./tests/content/teachermap.json", "utf8"),
);
const cases: [string, any[]][] = [
[
"Me",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "wholeDay",
hours: null,
},
],
],
[
"ad",
[
{
teacher: "Bc. Daniel Adámek",
teacherCode: "ad",
type: "wholeDay",
hours: null,
},
],
],
[
"me ad",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "wholeDay",
hours: null,
},
{
teacher: "Bc. Daniel Adámek",
teacherCode: "ad",
type: "wholeDay",
hours: null,
},
],
],
[
"me 3",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "single",
hours: 3,
},
],
],
[
"ad 1",
[
{
teacher: "Bc. Daniel Adámek",
teacherCode: "ad",
type: "single",
hours: 1,
},
],
],
[
"me 2-4",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "range",
hours: { from: 2, to: 4 },
},
],
],
[
"ad 5,6",
[
{
teacher: "Bc. Daniel Adámek",
teacherCode: "ad",
type: "range",
hours: { from: 5, to: 6 },
},
],
],
[
"me 7+",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "range",
hours: { from: 7, to: 10 },
},
],
],
[
"me,ad 3-5",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "range",
hours: { from: 3, to: 5 },
},
{
teacher: "Bc. Daniel Adámek",
teacherCode: "ad",
type: "range",
hours: { from: 3, to: 5 },
},
],
],
[
"me;ad 4",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "wholeDay",
hours: null,
},
{
teacher: "Bc. Daniel Adámek",
teacherCode: "ad",
type: "single",
hours: 4,
},
],
],
[
"me;ad;bo 2-3",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "wholeDay",
hours: null,
},
{
teacher: "Bc. Daniel Adámek",
teacherCode: "ad",
type: "wholeDay",
hours: null,
},
{
teacher: "Ing. Anna Bodnárová",
teacherCode: "bo",
type: "range",
hours: { from: 2, to: 3 },
},
],
],
[
"me 2 ad 4-5",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "single",
hours: 2,
},
{
teacher: "Bc. Daniel Adámek",
teacherCode: "ad",
type: "range",
hours: { from: 4, to: 5 },
},
],
],
[
"3",
[
{
type: "invalid",
teacher: null,
teacherCode: null,
hours: null,
original: "3",
},
],
],
[
"2-4",
[
{
type: "invalid",
teacher: null,
teacherCode: null,
hours: null,
original: "2-4",
},
],
],
[
"me Xx 3",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "wholeDay",
hours: null,
},
{
teacher: null,
teacherCode: "xx",
type: "single",
hours: 3,
},
],
],
[
"me,ad;bo 1-2 ad 5+",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "wholeDay",
hours: null,
},
{
teacher: "Bc. Daniel Adámek",
teacherCode: "ad",
type: "wholeDay",
hours: null,
},
{
teacher: "Ing. Anna Bodnárová",
teacherCode: "bo",
type: "range",
hours: { from: 1, to: 2 },
},
{
teacher: "Bc. Daniel Adámek",
teacherCode: "ad",
type: "range",
hours: { from: 5, to: 10 },
},
],
],
[
"Me-exk",
[
{
teacher: "Michaela Meitnerová",
teacherCode: "me",
type: "exkurze",
hours: null,
},
],
],
[
"za Vn zastupuje Jk",
[
{
teacher: "Ing. Zdeněk Vondra",
teacherCode: "vn",
type: "zastoupen",
hours: null,
zastupuje: {
teacher: "David Janoušek",
teacherCode: "jk",
},
},
],
],
[
"Vc 1. h",
[
{
teacher: "Ing. Antonín Vobecký",
teacherCode: "vc",
type: "single",
hours: 1,
},
],
],
[
"Sv-5-exk",
[
{
teacher: "Ing. Jan Šváb",
teacherCode: "sv",
type: "exkurze",
hours: { from: 5, to: 10 },
},
],
],
[
"Ex-exk. 3+",
[
{
teacher: "Ing. Jana Exnerová",
teacherCode: "ex",
type: "exkurze",
hours: { from: 3, to: 10 },
},
],
],
[
"Ex-exk.3+",
[
{
teacher: "Ing. Jana Exnerová",
teacherCode: "ex",
type: "exkurze",
hours: { from: 3, to: 10 },
},
],
],
[
"Ex-exk. 3",
[
{
teacher: "Ing. Jana Exnerová",
teacherCode: "ex",
type: "exkurze",
hours: 3,
},
],
],
[
"Su 4 - 6",
[
{
teacher: "MUDr. Kristina Studénková",
teacherCode: "su",
type: "range",
hours: { from: 4, to: 6 },
},
],
],
];
function expectSameItems(actual: any[], expected: any[]) {
expect(actual).toHaveLength(expected.length);
for (const item of expected) {
expect(actual).toContainEqual(item);
}
}
describe("parseAbsence", () => {
it.each(cases)("parseAbsence(%s) → %j", (input, expected) => {
expectSameItems(parseAbsence(input, teachermap), expected);
});
});