"""Config loading: toml knobs, env-only username, unknown-key warning.""" from __future__ import annotations from pathlib import Path from bggpipe.config import Config, load_config def test_defaults_when_no_file(tmp_path, monkeypatch): # no config.toml in cwd and no explicit path -> defaults (an EXPLICIT # missing path errors instead; see the dedicated test) monkeypatch.delenv("BGG_USERNAME", raising=False) monkeypatch.chdir(tmp_path) cfg = load_config() assert cfg == Config() assert cfg.cache_dir == Path("data/bgg_cache") def test_reads_toml(tmp_path, monkeypatch): monkeypatch.delenv("BGG_USERNAME", raising=False) p = tmp_path / "config.toml" p.write_text('data_dir = "elsewhere"\nrate_limit_seconds = 3\n') cfg = load_config(p) assert cfg.data_dir == Path("elsewhere") assert cfg.rate_limit_seconds == 3.0 assert cfg.matches_path == Path("elsewhere/matches.csv") def test_username_comes_from_env_only(tmp_path, monkeypatch): # the account has exactly one home: BGG_USERNAME in the environment — # a bgg_username key in config.toml is deliberately ignored p = tmp_path / "config.toml" p.write_text('bgg_username = "from_toml"\n') monkeypatch.setenv("BGG_USERNAME", "from_env") assert load_config(p).bgg_username == "from_env" monkeypatch.delenv("BGG_USERNAME") assert load_config(p).bgg_username == "" def test_unknown_toml_keys_warn(tmp_path, monkeypatch): # a typo'd knob must not silently fall back to defaults import pytest monkeypatch.delenv("BGG_USERNAME", raising=False) p = tmp_path / "config.toml" p.write_text('photo_dir = "oops"\n') with pytest.warns(UserWarning, match="photo_dir"): load_config(p) def test_explicit_missing_config_errors_instead_of_silent_defaults(tmp_path): import pytest with pytest.raises(FileNotFoundError, match="does not exist"): load_config(tmp_path / "nope.toml")