- 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.
85 lines
3.6 KiB
JavaScript
85 lines
3.6 KiB
JavaScript
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"]);
|
||
});
|