gabiwzx's picture
refactor: 五层架构重构 M1-M8 完成
1c66cf8
Raw
History Blame Contribute Delete
2.02 kB
"""Fixtures for L3 Feature layer tests."""
from __future__ import annotations
import sys
from pathlib import Path
import pytest
_PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
sys.path.insert(0, str(_PROJECT_ROOT))
from werewolftown.config import StrategyConfig
from werewolftown.state.game_state import GameState, PendingLedger, PlayerView
@pytest.fixture
def cfg() -> StrategyConfig:
"""Load the dev config for testing."""
return StrategyConfig.load("dev")
@pytest.fixture
def make_state():
"""Construct a GameState with common defaults."""
def _make(
player_id: str = "子涵",
round: int = 1,
cash: int = 50000,
initial_cash: int = 50000,
plots: frozenset[int] | None = None,
shops: tuple[str, ...] | None = None,
built_on: dict[int, str] | None = None,
other_players: dict[str, PlayerView] | None = None,
pending: PendingLedger | None = None,
) -> GameState:
return GameState(
player_id=player_id,
round=round,
cash=cash,
initial_cash=initial_cash,
plots=plots or frozenset(),
shops=shops or (),
built_on=built_on or {},
other_players=other_players or {},
pending=pending or PendingLedger(),
)
return _make
# ── Game constants for test assertions ──
# Plots 4,5,6 are adjacent in block A (row 1: 4,5,6)
# Plots 7,8,9,10 are adjacent in block A (row 2: 7,8,9,10)
# Plots 1,2,3 are adjacent in block A (row 0: 1,2,3 — but 0 is None)
# So: 4 adj 5, 5 adj 4&6, 6 adj 5
# 7 adj 8, 8 adj 7&9, 9 adj 8&10, 10 adj 9
# 1 adj 2, 2 adj 1&3, 3 adj 2
# 4 adj 8 (vertically: row1col1=4, row2col1=8... wait no, 4 is at (1,1) and 8 is at (2,1))
# Let me verify: _GRID row 1 = [None, 4, 5, 6], row 2 = [7, 8, 9, 10]
# So 4 is at col1, 8 is at col1 in next row → 4 adj 8
# 5 adj 9, 6 adj 10
# 7 adj 8 (horizontally), 8 adj 7&9 (horizontally) + 4 (vertically)