Files
magistr/frontend/tests/academic-year-builder.test.mjs

65 lines
3.0 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 assert from 'node:assert/strict';
import test from 'node:test';
import { readFile } from 'node:fs/promises';
import {
academicYearDefaults,
activityColorClass,
activityColorCode,
validateAcademicYearSemesters
} from '../admin/js/views/academic-calendar.js';
test('окончание, название и границы семестров рассчитываются по году начала', () => {
assert.deepEqual(academicYearDefaults('2026'), {
startYear: 2026,
endYear: 2027,
title: '2026-2027',
startDate: '2026-09-01',
endDate: '2027-06-30',
semesters: [
{ semesterType: 'autumn', startDate: '2026-09-01', endDate: '2027-01-31' },
{ semesterType: 'spring', startDate: '2027-02-01', endDate: '2027-06-30' }
]
});
});
test('год начала должен состоять ровно из четырёх цифр', () => {
assert.throws(() => academicYearDefaults('26'), /четырёх цифр/);
assert.throws(() => academicYearDefaults('202A'), /четырёх цифр/);
assert.throws(() => academicYearDefaults('9999'), /диапазоне/);
});
test('учебный год нельзя подготовить без семестров', () => {
assert.throws(
() => validateAcademicYearSemesters([], '2026-09-01', '2027-06-30'),
/Учебный год нельзя создать без семестров/
);
});
test('пересекающиеся семестры отклоняются до отправки формы', () => {
assert.throws(
() => validateAcademicYearSemesters([
{ semesterType: 'autumn', startDate: '2026-09-01', endDate: '2027-02-10' },
{ semesterType: 'spring', startDate: '2027-02-01', endDate: '2027-06-30' }
], '2026-09-01', '2027-06-30'),
/Периоды семестров не должны пересекаться/
);
});
test('цвет обозначения берётся из справочника и имеет безопасный запасной вариант', () => {
assert.equal(activityColorCode({ colorCode: '#f59e0b' }), '#f59e0b');
assert.equal(activityColorClass({ colorCode: '#f59e0b' }), 'calendar-activity-color-f59e0b');
assert.equal(activityColorCode({ colorCode: 'red; background: black' }), '#64748b');
});
test('форма создания не содержит поля названия и включает оба семестра', async () => {
const view = await readFile(new URL('../admin/views/academic-calendar.html', import.meta.url), 'utf8');
assert.doesNotMatch(view, /id="academic-year-title"/);
assert.match(view, /id="academic-year-start"[^>]+maxlength="4"[^>]+pattern="\[0-9\]\{4\}"/);
assert.match(view, /id="academic-year-end"[^>]+maxlength="4"[^>]+readonly/);
assert.match(view, /id="academic-year-autumn-start"/);
assert.match(view, /id="academic-year-spring-start"/);
assert.match(view, /Сохранить учебный год и семестры/);
});