- Fix 9 CS0101 duplicate classes between Mono/ and Mono/Classic/ - BoardManager -> ClassicBoardManager, SquareClick -> ClassicSquareClick - Delete duplicate Piece/Pawn/King/Queen/Rook/Bishop/Knight from Classic/ - Merge GetAttackSquares into Piece base class with overrides - Fix King castling: reject castling through/while in check - Assign URP pipeline to QualitySettings (6 levels) and GraphicsSettings - Fix template identifiers (DefaultCompany -> EarthGenesisGames) - Delete orphaned SampleScene.unity and duplicate URP assets - Fix test assembly reference (Assembly-CSharp -> AjedrezPurgatorio.Runtime) - Remove 11 unused packages (multiplayer, visualscripting, terrain, etc.) - Update BoardInputSystemSpike for ClassicSquareClick - Write unit tests: CheckDetector, DrawDetector, MoveValidator - Fix BalanceConfig JSON structure to match C# class fields - Update stale documentation (~30 files) - architecture.md, ADR-0001, roadmap, gate-check, EPIC.md - PROJECT_STATUS.md, BLOQUEADORES_JUGABILIDAD.md - tech-debt-register.md - Add Unity Editor setup guide (production/UNITY_EDITOR_SETUP.md)
Test Infrastructure
Engine: Unity 6000.3.3f1 (Unity 6.3 LTS)
Test Framework: Unity Test Framework (NUnit)
CI: .github/workflows/tests.yml
Setup date: 2026-06-20
⚠️ Unity-specific exception: actual test code lives under Assets/Tests/, not here
This tests/ folder at the repo root is the engine-agnostic CCGS template
location (directory-structure.md) and is kept for documentation only
(this README, the smoke checklist, evidence records). It is not scanned
by Unity.
Unity's AssetDatabase and Test Runner only discover assemblies (and generate
the .meta files required to compile them) inside Assets/ (or Packages/).
A root-level tests/ folder is invisible to Unity — confirmed empirically
2026-06-20: an asmdef + test script placed here produced zero .meta files
and the Test Runner reported testcasecount="0".
Actual EditMode/PlayMode test code goes in Assets/Tests/:
Assets/Tests/
EditMode/ # Unity Test Framework Edit Mode tests (no Play Mode needed)
PlayMode/ # Unity Test Framework Play Mode tests (real scene required)
Game code that tests need to reference must live in an assembly with its own
.asmdef — a custom assembly (like a test assembly) cannot reference the
default Assembly-CSharp (it compiles last, after all .asmdef-based
assemblies). See Assets/Game/Scripts/AjedrezPurgatorio.Runtime.asmdef,
which the game's Mono/Classic and Mono/Combat scripts now compile into,
and which Assets/Tests/PlayMode/PlayModeTests.asmdef references.
Directory Layout (this folder — docs only)
tests/
unit/ # Pointer/notes only -- actual Unity unit tests live in Assets/Tests/EditMode/
integration/ # Pointer/notes only -- actual Unity integration tests live in Assets/Tests/PlayMode/
smoke/ # Critical path test list for /smoke-check gate
evidence/ # Screenshot logs and manual test sign-off records
Running Tests
Window → General → Test Runner (Unity Test Framework is included by default in Unity 2019+, including Unity 6.3 LTS).
Test Naming
- Files:
[system]_[feature]_test.cs - Functions:
Test_[scenario]_[expected] - Example:
check_detection_test.cs→Test_PawnForwardSquare_NotReportedAsAttacked()
Story Type → Test Evidence
| Story Type | Required Evidence | Location |
|---|---|---|
| Logic | Automated unit test — must pass | tests/unit/[system]/ |
| Integration | Integration test OR playtest doc | tests/integration/[system]/ |
| Visual/Feel | Screenshot + lead sign-off | tests/evidence/ |
| UI | Manual walkthrough OR interaction test | tests/evidence/ |
| Config/Data | Smoke check pass | production/qa/smoke-*.md |
CI
Tests run automatically on every push to main and on every pull request.
A failed test suite blocks merging. Requires a UNITY_LICENSE secret
configured in the GitHub repository before CI runs will actually execute.
Known Constraint (see docs/tech-debt-register.md TD-001/TD-002)
Core board/check/checkmate logic in GameManagerClassic is coupled to
MonoBehaviour and singleton managers (BoardManager.Instance, etc.).
True isolated EditMode unit tests of this logic are not yet possible —
tests targeting IsInCheck/IsCheckmate/IsLegalMove will need a PlayMode
test with a real scene until TD-001 is addressed.