Files
magistr/frontend/tests/schedule-overrides.test.mjs

65 lines
2.9 KiB
JavaScript
Raw 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 { readFile } from 'node:fs/promises';
import test from 'node:test';
import {
canEditScheduleOverrides,
classroomOptionLabel,
overrideActionForChanges,
pickMatchingTimeSlot,
weekDates
} from '../admin/js/views/schedule-override-panel.js';
test('редактировать разовые изменения могут только администратор и учебный отдел', () => {
assert.equal(canEditScheduleOverrides('ADMIN'), true);
assert.equal(canEditScheduleOverrides('EDUCATION_OFFICE'), true);
assert.equal(canEditScheduleOverrides('DEPARTMENT'), false);
assert.equal(canEditScheduleOverrides('SCHEDULE_VIEWER'), false);
});
test('дата или время формируют MOVE, а замена ресурсов формирует REPLACE', () => {
assert.equal(overrideActionForChanges({ dateChanged: true }), 'MOVE');
assert.equal(overrideActionForChanges({ timeChanged: true, teacherChanged: true }), 'MOVE');
assert.equal(overrideActionForChanges({ classroomChanged: true }), 'REPLACE');
assert.equal(overrideActionForChanges({ teacherChanged: true, formatChanged: true }), 'REPLACE');
assert.equal(overrideActionForChanges({}), null);
});
test('недельный выбор всегда показывает понедельник-воскресенье исходной недели', () => {
assert.deepEqual(weekDates('2026-09-03'), [
'2026-08-31',
'2026-09-01',
'2026-09-02',
'2026-09-03',
'2026-09-04',
'2026-09-05',
'2026-09-06'
]);
});
test('время выбирается сначала по ID, затем по совпадающему интервалу', () => {
const slots = [
{ id: 10, startTime: '09:00:00', endTime: '10:30:00' },
{ id: 20, startTime: '10:40:00', endTime: '12:10:00' }
];
assert.equal(pickMatchingTimeSlot(slots, 20, '09:00', '10:30').id, 20);
assert.equal(pickMatchingTimeSlot(slots, 99, '09:00', '10:30').id, 10);
assert.equal(pickMatchingTimeSlot(slots, 99, '12:20', '13:50'), null);
});
test('в селекте боковой панели аудитория показывается только своим названием', () => {
assert.equal(classroomOptionLabel({
name: '101',
building: 'Главный корпус',
floor: 1
}), '101');
});
test('боковая панель и слой под ней применяют backdrop blur', async () => {
const css = await readFile(new URL('../admin/css/auditorium-workload.css', import.meta.url), 'utf8');
assert.match(css, /\.schedule-override-backdrop\s*\{[^}]*backdrop-filter:\s*blur\(7px\)/s);
assert.match(css, /\.schedule-override-panel\s*\{[^}]*background:\s*color-mix\(in srgb, var\(--bg-card\) 88%, transparent\)[^}]*backdrop-filter:\s*blur\(24px\)/s);
});