65 lines
3.0 KiB
JavaScript
65 lines
3.0 KiB
JavaScript
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, /Сохранить учебный год и семестры/);
|
||
});
|