import assert from 'node:assert/strict' import { test } from 'node:test' import { parsePlan } from './screen-plan.js' test('план: режимы protobuf, значения по умолчанию и UTF-8 ограничения сервера', () => { assert.deepEqual(parsePlan(null), { steps: [], currentStep: 0 }) assert.equal( parsePlan({ steps: [{ mode: 'SCREEN_MODE_TIMER', timerDurationSeconds: '60' }] }).steps[0] ?.timerLabel, 'Перерыв', ) for (const value of [ { steps: {} }, { steps: [{ mode: 0 }] }, { steps: [{ mode: 9 }] }, { steps: [{ mode: 8, text: ' ' }] }, { steps: [{ mode: 8, text: 'Я'.repeat(5001) }] }, { steps: [{ mode: 7, timerDurationSeconds: 0 }] }, { steps: [{ mode: 7, timerDurationSeconds: 86401 }] }, { steps: [{ mode: 7, timerDurationSeconds: 1, timerLabel: 'Я'.repeat(101) }] }, { steps: [{ mode: 1 }], currentStep: 1 }, ]) assert.throws(() => parsePlan(value)) }) test('старые текстовые режимы преобразуются без изменения порядка и текущего шага', () => { const plan = parsePlan({ steps: [3, 'SCREEN_MODE_INTRO_DONE', 5, 'SCREEN_MODE_CONCLUSION_DONE'].map((mode) => ({ mode, text: 'Неиспользуемый текст', })), currentStep: 2, }) assert.equal(plan.currentStep, 2) assert.deepEqual(plan.steps.map(({ mode, text }) => ({ mode, text })), [ { mode: 8, text: 'Успехов' }, { mode: 8, text: 'Успехов' }, { mode: 8, text: 'Спасибо за игру!' }, { mode: 8, text: 'Спасибо за игру!' }, ]) })