import os import shutil import sys import pytest ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, ROOT) sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) @pytest.fixture(autouse=True) def isolated_home(tmp_path, monkeypatch): """User data/config/cache go to a temp folder (never touch the real settings or stores), and the language the game is set to on this machine (Documents\\WB Games\\...\\UserEngine.ini) does not leak into tests.""" from ackit import game as G monkeypatch.setenv("ACKIT_HOME", str(tmp_path / "home")) real = G.Game.config_dirs mine = os.path.normcase(os.path.join(os.path.expanduser("~"), "Documents", "WB Games")) monkeypatch.setattr(G.Game, "config_dirs", lambda self: [d for d in real(self) if not os.path.normcase(d).startswith(mine)]) yield @pytest.fixture(scope="session") def synth_template(tmp_path_factory): import synth d = tmp_path_factory.mktemp("synth_template") originals = synth.make_game(str(d)) return str(d), originals @pytest.fixture def synth_game(synth_template, tmp_path): """A fresh copy of the synthetic game folder for each test -> (root, originals).""" src, originals = synth_template dst = str(tmp_path / "game") shutil.copytree(src, dst) return dst, originals def _real_game(): from ackit.game import find_installs try: found = find_installs() except Exception: found = [] return found[0] if found else None @pytest.fixture(scope="session") def real_game_dir(): d = os.environ.get("ACKIT_TEST_GAME") or _real_game() if not d: pytest.skip("real game not installed") return d