Files
psu-schedule/test/diagnostics.test.js
Zakhar Timoshenko e38c388462 Add course schedules for ISF and ITZS programs for 2026 and 2024 sessions
- Created new snapshot files for ISF credits and daily schedules for the 26-АРХ and 26-ПГС programs.
- Added summer 2026 and winter 2024 exam schedules for the 23-ИТзс program, detailing lectures, labs, and consultations.
2026-10-19 22:55:28 +03:00

85 lines
3.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { test } from "node:test";
import assert from "node:assert/strict";
import { diagnose, catalogDiagnostics } from "../server/diagnostics.js";
const lesson = (raw, fields = {}) => ({
day: 1,
start: "09:00",
end: "10:20",
subject: raw,
condition: "",
weekRanges: null,
dates: [],
date: null,
groups: ["25-АРХ"],
subgroups: [],
raw,
...fields,
});
const codes = (...lessons) =>
diagnose({ academicYear: "2026", groups: ["25-АРХ"], lessons }).map((p) => p.code);
test("Диагностика: обычные занятия без замечаний", () => {
assert.deepEqual(
codes(
lesson("Химия (л.) Иванов И.И. 101", { subject: "Химия" }),
lesson("1-8н. Физика", { subject: "Физика", condition: "1-8н.", weekRanges: [[1, 8]] }),
lesson("Единый день 07.09;14.09", { subject: "Единый день", dates: ["2026-09-07", "2026-09-14"] }),
),
[],
);
});
test("Диагностика: пометка недель прочитана не целиком", () => {
assert.deepEqual(
codes(lesson("1-4н.;6-12н. Политэкономия", { subject: "6-12н. Политэкономия", condition: "1-4н.", weekRanges: [[1, 4]] })),
["weeks_partly"],
);
});
test("Диагностика: дата и время в начале ячейки", () => {
assert.deepEqual(codes(lesson("24.11. Компьютерная графика")), ["date_in_subject"]);
assert.deepEqual(codes(lesson("3.12 Микроконтроллеры")), ["date_in_subject"]);
assert.deepEqual(codes(lesson("9.00 Информационный час")), ["time_in_subject"]);
assert.deepEqual(codes(lesson("11:10-11:30 – информационный час")), ["time_in_subject"]);
});
test("Диагностика: опечатка в дате, нечитаемые недели, даты не того дня", () => {
assert.deepEqual(
codes(lesson("19,11, 03.12, 17.12 Микроконтроллеры", { subject: "Микроконтроллеры", condition: "19,11,", weekRanges: null })),
["weeks_like_date"],
);
assert.deepEqual(
codes(lesson("2,6-12-16н Управление проектами", { subject: "Управление проектами", condition: "2,6-12-16н" })),
["weeks_unreadable"],
);
// 2026-10-13 is a Tuesday, the row is Monday's.
assert.deepEqual(codes(lesson("13.10 Информационный час", { subject: "Информационный час", date: "2026-10-13" })), [
"date_weekday",
]);
assert.deepEqual(codes(lesson("15 октября Экскурсия", { subject: "Экскурсия" })), ["dates_unread"]);
});
test("Диагностика каталога: фильтры по группе и коду", () => {
const doc = (id, groups, lessons) => ({
id,
file: { name: `${id}.docx`, faculty: "ИСФ" },
schedule: { academicYear: "2026", groups, lessons, source: {} },
});
const idx = {
builtAt: "2026-10-19T00:00:00Z",
failed: [],
docs: [
doc("a", ["25-АРХ"], [lesson("9.00 Информационный час")]),
doc("b", ["24-ДС"], [lesson("3.12 Химия", { groups: ["24-ДС"] })]),
doc("c", ["23-ИТ"], [lesson("Химия", { groups: ["23-ИТ"] })]),
],
};
const all = catalogDiagnostics(idx);
assert.equal(all.documents, 3);
assert.equal(all.problems, 2);
assert.deepEqual(all.counts, { time_in_subject: 1, date_in_subject: 1 });
assert.deepEqual(catalogDiagnostics(idx, { group: "24-дс" }).items.map((i) => i.doc.id), ["b"]);
assert.deepEqual(catalogDiagnostics(idx, { code: "time_in_subject" }).items.map((i) => i.doc.id), ["a"]);
});