# Стратегия тестирования OpenWC

## Принцип

Тесты являются частью функционала платформы: Godot Editor должен запускать проверки, показывать diagnostics, открывать проблемную сущность и формировать воспроизводимый playtest bundle. Один ручной запуск сцены не является достаточным доказательством.

## Пирамида тестов

### Unit

- parsers, codecs, bit/byte boundaries и malformed input;
- coordinate transforms и math;
- domain reducers, state machines, formulas и validators;
- schema migrations, ID allocation и semantic diff;
- quest/encounter graph rules;
- material mapping helpers без GPU там, где возможно.

### Contract

- packet fixtures для build 12340;
- golden update fields и packed GUID;
- TrinityCore/AzerothCore schema fingerprints;
- adapter round-trip `canonical → SQL → snapshot → canonical`;
- Content Project compatibility и migration fixtures;
- renderer/editor public API contracts.
- `recast-rs` navigation fixtures: geometry/profile → region/poly/detail counts и path queries.
- Lua VM contract: общий WoW-specific corpus выполняется на `rilua`, PUC-Rio 5.1.1 и, где возможно, оригинальном клиенте 3.3.5a.
- Wowser используется как дополнительный независимый источник auth/world packet cases; fixtures принимаются только после проверки build 12340 semantics и удаления credentials/proprietary payload data.

### Integration

- auth/realm/world session с disposable test core;
- character enum/login/update object/movement;
- asset import → cache → render attach;
- content build → SQL apply → server query;
- Godot Editor command → undo/redo → save/reload.

### End-to-end

- login → character → enter world;
- movement и server reconciliation;
- combat/cast/aura/death;
- quest accept/progress/complete/reward;
- loot/inventory/vendor;
- party/dungeon flow;
- editor NPC + quest → deploy → playtest.

### Visual и performance

- deterministic screenshot checkpoints по картам, времени и погоде;
- perceptual diff с approved baseline и tolerance;
- frame time, hitch percentiles, draw calls, memory, descriptor count и streaming queues;
- long traversal через ADT boundaries;
- dense WMO/M2, water, character equipment и UI scale matrices.
- navmesh overlay checkpoints и bake/query budgets для больших tiles/dungeons.

### Navigation compatibility

- Golden synthetic meshes проверяют slope, climb, radius erosion, holes, tiled seams и off-mesh connections.
- WoW fixtures проверяют canonical coordinates и ADT/WMO collision composition.
- `recast-rs` version и bake profile закрепляются в manifest; обновление требует baseline diff.
- OpenWC navigation cache сравнивается с C++ Recast reference на выбранных fixtures.
- Заявление о server mmap support требует отдельного сравнения с TrinityCore/AzerothCore generator: параметры, tile bounds, polygon queries и фактическое движение существ на disposable core.
- Editor reachability diagnostics должны различать `Reachable`, `Unreachable`, `Unknown` и `Not run`.

### Lua и addon compatibility

- Official Lua 5.1.1 suite запускается на pinned VM revision.
- Oracle tests сравнивают results, errors, byte strings, number formatting, coroutines, metatables, GC-visible behavior и bytecode expectations.
- WoW corpus проверяет restricted stdlib, global aliases, `bit`, BOM, GC defaults и запрещённые filesystem/native-module операции.
- TOC/load order, FrameXML inheritance, events, SavedVariables и addon errors проверяются отдельно от VM.
- Secure actions, combat lockdown и taint propagation имеют обязательные negative tests; без них addon compatibility не получает статус `Verified`.
- Performance suite измеряет `OnUpdate`, event fan-out, table churn, allocation и incremental GC frame budget.

### Exploratory и game design

- quest clarity и travel time;
- encounter readability и recovery;
- economy/reward impact;
- accessibility, localization и atypical input;
- latency/loss/reconnect behavior;
- authoring usability и error recovery.

## Test fixtures

Fixtures должны быть минимальными, обезличенными и легально распространяемыми. Не коммитятся credentials, proprietary bulk assets, account data или production dumps.

Типы fixtures:

- synthetic binary chunks;
- короткие redacted packet captures;
- schema-only/disposable DB seed;
- tiny custom content packs;
- known coordinate points;
- corrupt/truncated input corpus;
- screenshot metadata без обязательного включения proprietary textures.

## Test matrix

Минимальные оси:

- Godot/OS/rendering backend;
- TrinityCore и AzerothCore supported revisions;
- locale;
- quality preset;
- offline/online;
- clean cache/warm cache;
- latency, jitter, packet loss и reconnect;
- content schema current/previous version.

Полная матрица запускается периодически; pull request использует risk-based subset.

## Godot Editor Test Center

Editor dock должен предоставлять:

- Validate Selection, Map, Package и Project;
- список severity/code/location/fix suggestion;
- переход к объекту, полю или viewport position;
- фильтр и baseline известных diagnostics;
- запуск headless test suites;
- playtest checklist и запись результата;
- экспорт machine-readable report для CI.

Quick Fix допускается только как undoable command с preview diff.

## Network verification

- Каждый codec проверяет exact bytes и round-trip.
- Parser никогда не читает за packet boundary.
- Unknown opcode логируется rate-limited и не разрушает session без policy.
- Replay отделён от transport и детерминирован.
- Fuzz/property tests покрывают lengths, masks, packed values, compression и fragmentation.
- Secrets/session keys не появляются в обычных логах.

## Server data verification

Перед apply обязательны schema capability check, foreign references, ID collisions, dry-run и backup/checkpoint. После apply выполняются targeted queries и optional core startup smoke. Rollback тестируется на disposable DB.

## Content validation levels

- Error: сборка или применение запрещены.
- Warning: допустимо после осознанного подтверждения.
- Info: рекомендация или стоимость.

Примеры errors: broken reference, incompatible schema, duplicate allocation, invalid coordinate, unreachable mandatory quest step. Warnings: отсутствующий optional locale, высокая spawn density, превышение render budget.

## Observability

Логи структурированы по subsystem/category/correlation ID. Метрики включают network queues, entity counts, reconciliation errors, asset cache hit rate, editor job durations и validation counts. Пользовательские тексты, credentials и packet payload не логируются по умолчанию.

## CI gates

Изменение не сливается, если не проходят:

- headless project load;
- unit/contract tests затронутых модулей;
- content schema validation;
- deterministic generated artifact check;
- renderer material smoke при изменении renderer;
- adapter dry-run при изменении server mapping;
- documentation link check.

Nightly дополнительно запускает core integration, packet replay corpus, visual checkpoints, traversal performance и migration matrix.

## Definition of Done функции

- acceptance criteria наблюдаемы;
- happy path и минимум один failure/recovery path автоматизированы;
- boundary и malformed cases проверены для parser/network/data;
- diagnostics ведут к проблемному объекту;
- performance budget указан для frame-critical функции;
- manual playtest имеет сценарий и ожидаемый результат;
- regression test воспроизводит исправленный дефект.
