Files

8.6 KiB
Raw Permalink Blame History

TEST_PLAN — матрица тестов PEAK HOUR

Числовые данные — только data/balance.json и docs/DECISIONS.md. Юнит-Runner — headless-прогон tests/run_tests.gd (godot --headless --path . --script tests/run_tests.gd). Числа, не заданные в промпте, в данных помечены — тесты для них берут значения из JSON, а не хардкодят их.

1. Юнит-тесты

№ Что проверяем Как Ожидаемо Команда
U01 Реестр: спавн файла по типу, уникальные id создать 3 типа → посчитать FileRegistry 3 разных id, тип и ext корректны unit/file_registry
U02 Лимит папки/буфера: capacity папки и буфера положить в буфер 4+2×lvl, без апгрейда; на 5-й спавн спавн отклонён, сигнал buffer_full (D05: base 4) unit/file_registry
U03 Attach: 1 файл только 1 раз один файл в required двух запросов → attach к обоим второй запрос видит файл серым, attach возвращает false (D06) unit/file_registry
U04 Отмена запроса по таймеру запустить таймер запроса > slot_reserved=true → по таймеруNECTION, слот свободен, штраф по D12 unit/hour_director
U05 Оплата: money приёма/отправки приём recv_fee, отправка — money, +1 SLA (D12) баланс money меняется ровно на recv_fee при переприёме; на успешную отправку — прирост unit/payout
U06 Канал: формула load/factor час h, used_slots, Σ weight поданы в load и factor factor совпадает с ручным расчётом (CHANNEL_BG_BASE 10, CHANNEL_BG_PER_HOUR 4×(h−1), SLOT_LOAD 8×slots) unit/channel
U07 Слоты: резерв/освобождение 2 стартовых слота, резерв → отказ на 3-й, buy → слоты 3 (D13) SlotManager.try_reserve возвращает false; после «3-й слот» — true unit/slots
U08 Магазин: 9 позиций, цены, max_level проверка на каждый id цена и уровень совпадают с D13 (250/450/200×2/350×3/300×3/250×4/300×5/250/400), сканер/автосортировка отсутствуют unit/shop
U09 Save/Load сейв → изменить money → load money, sla, folders, апгрейды восстановлены, типы/поля — по схеме unit/save

2. Инварианты и фаззинг (системы)

№ Что проверяем Как Ожидаемо Команда
F01 Прикрепление уникально фаззинг: 200 попыток attach <=1 attached у файла (D06), никакое «двойное» состояние не достигнуто fuzz/attach_once
F02 Коoldown после отправки успешный send → сразу повторная attach false; после 20 с — true (D02) fuzz/cooldown
F03 Обычные файлы удаляются только в Prep уничтожить в hour-фазе refuse; malicious — ok в обеих фазах (D02) fuzz/delete_phase
F04 Гарантия уникальности required 1000 сгенерированных запросов required — не только id, поля корректны; картинок с failed не встречается fuzz/requests
F05 W-формула hour/successes/zone_level = {(1..9), (0..n), (0..3)} все значения от 0.18 до 0.36, соответствуют clamp (D04) (cap 0.36) fuzz/zone
F06 Мини-игры по средней коэф. все n варианты required-наборов тип мини-игры соответствует порогам D17 (text 1.0, sound 2.0, photo 3.0, video 4.0; <1.5/<2.5/<3.5) fuzz/minigame_select
F07 Состояния-флаги (D09) быстрые случайные действия нет самопротиворечий: attached ↔ other, locked+cooldown fuzz/states

3. Интеграция: час пика

№ Что проверяем Как Ожидаемо Команда
I01 Ускоренный час (PEAKHOUR_TIMESCALE) 120 с час → прогон только числа/счёт с опережением, нет крашей integration/hour_fast
I02 Паузы по модалкам (D03) открытая панель соединения / мини-игры спавн приёма и таймеры пакетов стоят, таймер запроса идёт integration/modals
I03 Стресс-спавн (полный буфер, D03) добивание буфера новые пакеты не спавнятся: сигнал spawn_frozen("buffer_full"), переприём варьируется integration/overflow
I04 Esc-фазы (D10) Esc в часе / мини-игре / панели соединения 3 разных поведения: пауза, no-op, отмена слота integration/esc

4. Прогон баланса (9-часовая симуляция)

№ Что проверяем Как Ожидаемо Команда
B01 Доход по часам симуляция 9 часов ( TestCase_фаззинг 1000 сидов, усреднить) ср. доход по часам 1/2/3/5/9 ≈ D12 (500/800/1200/1800/2200) в пределах ±10 % sim/income
B02 SLA-прирост/штрафы сбор суммарной SLA-карты сумма приростов/штрафов соответствует D12; шифровальщик −10, DDoS −15, фишинг −10, мусор −5 (D07) sim/sla
B03 Стоимость выкупа покупка всех 9 позиций по часам полный выкуп к часу 8–9 (D12), цены из shop D13 sim/shop
B04 Шкала сложности hour 1..9 difficulty на часе 9 = значения часа 8 (спawns +5 %/2ч), ничего «неOutOfBounds» (D12) sim/difficulty
B05 Потери замер штрафов по типам атак/таймаутов соответствует sla таблице (D07/D12) sim/losses

5. Браузер-смоук (Web)

№ Что проверяем Как Ожидаемо Команда
W01 Сборка --headless --export-release "Web" build/web/index.html index.html + .wasm + .pck собраны без ошибок сборка Web
W02 Chrome-load открыть через python3 -m http.server 8000 --directory build/web загрузка, шрифт và текст рендерится, драг работает W smоук
W03 Сцены и переходы меню → подготовка → час → итоги все переходы работают, никакого глий в html W смок

6. Регламентный аудит (джем FEIS)

№ Что проверяем Как Ожидаемо Команда
A01 Дивиденд и репозиторий git-история + отчёт об ИИ заполнены все протоколы/джем критерии проходятся, git push не сделать ревизор feis-regulator
A02 RU-only grep по RU в strings_ru.json и интерфейсе пользовательские шапки — на русском, никаких тайных строк аудит
A03 Шрифты и лицензии ASSETS.md: Handjet OFL.txt, Press Start 2P OFL только OFL/MIT-лицензии, OFL-файлы в репо, Pixelify Sans из темы удалён аудит
A04 Без секретов grep по `password token key
A05 itch.io загрузка build/web/index.html игра стартует в 1280×720, RU, никакого зависания гей-смоук