2025-09-17 13:23:27 -07:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
from code.headless_runner import run
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_headless_seed_threads_into_builder(monkeypatch):
|
|
|
|
|
# Use the tiny test dataset for speed/determinism
|
|
|
|
|
monkeypatch.setenv("CSV_FILES_DIR", os.path.join("csv_files", "testdata"))
|
|
|
|
|
# Use a commander known to be in tiny dataset or fallback path; we rely on search/confirm flow
|
|
|
|
|
# Provide a simple name that will fuzzy match one of the entries.
|
|
|
|
|
out1 = run(command_name="Krenko", seed=999)
|
|
|
|
|
out2 = run(command_name="Krenko", seed=999)
|
|
|
|
|
# Determinism: the seed should be set on the builder and identical across runs
|
|
|
|
|
assert getattr(out1, "seed", None) == getattr(out2, "seed", None) == 999
|
|
|
|
|
# Basic sanity: commander selection should have occurred
|
|
|
|
|
assert isinstance(getattr(out1, "commander_name", ""), str)
|
2025-09-28 18:30:45 -07:00
|
|
|
assert isinstance(getattr(out2, "commander_name", ""), str)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_headless_skips_owned_prompt_when_files_present(monkeypatch, tmp_path):
|
|
|
|
|
monkeypatch.setenv("CSV_FILES_DIR", os.path.join("csv_files", "testdata"))
|
|
|
|
|
owned_dir = tmp_path / "owned"
|
|
|
|
|
owned_dir.mkdir()
|
|
|
|
|
(owned_dir / "my_cards.txt").write_text("1 Sol Ring\n", encoding="utf-8")
|
|
|
|
|
monkeypatch.setenv("OWNED_CARDS_DIR", str(owned_dir))
|
|
|
|
|
|
|
|
|
|
builder = run(
|
|
|
|
|
command_name="Krenko",
|
|
|
|
|
add_lands=False,
|
|
|
|
|
add_creatures=False,
|
|
|
|
|
add_non_creature_spells=False,
|
|
|
|
|
add_ramp=False,
|
|
|
|
|
add_removal=False,
|
|
|
|
|
add_wipes=False,
|
|
|
|
|
add_card_advantage=False,
|
|
|
|
|
add_protection=False,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
assert getattr(builder, "bracket_level", None) in {None, 3}
|
|
|
|
|
assert getattr(builder, "use_owned_only", False) is False
|