import assert from 'node:assert/strict'; import test from 'node:test'; import { allowedGroupIdsForScheduleTarget, findSemesterForDate, scheduleRangeForSemester, semesterOptionLabel } from '../admin/js/views/schedule-view.js'; import { defaultSchedulePeriod, preferredScheduleSemester } from '../admin/js/schedule-period.js'; const autumnSemester = { id: 11, academicYearTitle: '2025/2026', semesterType: 'autumn', startDate: '2025-09-01', endDate: '2026-01-31' }; const springSemester = { id: 12, academicYearTitle: '2025/2026', semesterType: 'spring', startDate: '2026-02-09', endDate: '2026-06-30' }; test('семестр определяется по выбранной дате включительно с границами', () => { const semesters = [autumnSemester, springSemester]; assert.equal(findSemesterForDate(semesters, '2025-09-01')?.id, 11); assert.equal(findSemesterForDate(semesters, '2026-06-30')?.id, 12); assert.equal(findSemesterForDate(semesters, '2026-07-01'), null); }); test('при выборе другого семестра диапазон начинается с его первой учебной недели', () => { assert.deepEqual(scheduleRangeForSemester('2026-07-21', autumnSemester), { startDate: '2025-09-01', endDate: '2025-09-14' }); }); test('внутри выбранного семестра сохраняется текущая двухнедельная точка просмотра', () => { assert.deepEqual(scheduleRangeForSemester('2026-03-18', springSemester), { startDate: '2026-03-16', endDate: '2026-03-29' }); }); test('название семестра содержит учебный год, тип и границы', () => { assert.equal( semesterOptionLabel(springSemester), '2025/2026 · Весенний семестр · 09.02.2026 — 30.06.2026' ); }); test('кафедральное расписание не отбрасывает группы других кафедр', () => { assert.deepEqual( [...allowedGroupIdsForScheduleTarget('departments', '')], [] ); assert.deepEqual( [...allowedGroupIdsForScheduleTarget('groups', 15)], ['15'] ); }); test('между семестрами выбирается ближайший будущий период с занятиями', () => { const nextAutumnSemester = { id: 13, academicYearTitle: '2026/2027', semesterType: 'autumn', startDate: '2026-09-01', endDate: '2027-01-31' }; const semesters = [autumnSemester, springSemester, nextAutumnSemester]; assert.equal(preferredScheduleSemester(semesters, '2026-08-12')?.id, 13); assert.deepEqual(defaultSchedulePeriod(semesters, '2026-08-12'), { semester: nextAutumnSemester, startDate: '2026-09-01', endDate: '2026-09-14' }); });