42 lines
1.6 KiB
TypeScript
42 lines
1.6 KiB
TypeScript
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: 'Спасибо за игру!' },
|
|
])
|
|
})
|