mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-08-24 22:45:18 +02:00
AppConfig now keeps a gnucash_last_accounts map (file path -> account guid). When the import dialog opens a file it already knows, it auto-selects whichever account was picked last time for that specific file instead of always defaulting to the first one alphabetically; picking a different account updates and persists the mapping right away. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
75 lines
2.8 KiB
Python
75 lines
2.8 KiB
Python
import json
|
|
|
|
from ccma.config import AppConfig, load_config
|
|
|
|
|
|
def test_paths_and_automation_settings_round_trip(tmp_path, monkeypatch) -> None:
|
|
monkeypatch.setenv("CCMA_CONFIG_DIR", str(tmp_path / "config"))
|
|
expected = AppConfig(
|
|
store_path=str(tmp_path / "members"),
|
|
gnucash_path=str(tmp_path / "club.gnucash"),
|
|
theme_mode="light",
|
|
run_housekeeper_on_startup=False,
|
|
splash_minimum_seconds=0,
|
|
birthday_days_before=10,
|
|
birthday_days_after=3,
|
|
anniversary_days_before=21,
|
|
anniversary_days_after=5,
|
|
anniversary_intervals="30D;2M;1Y;10Y",
|
|
retroactive_claims=True,
|
|
optional_member_fields=("nickname", "email", "phone"),
|
|
window_geometry="1200x800-1800+40",
|
|
window_state="maximized",
|
|
monitor_bounds=(-1920, 0, 1920, 1080),
|
|
)
|
|
expected.save()
|
|
|
|
loaded = load_config()
|
|
assert loaded == expected
|
|
raw = json.loads(expected.path.read_text(encoding="utf-8"))
|
|
assert raw["schema_version"] == 1
|
|
assert raw["monitor_bounds"] == [-1920, 0, 1920, 1080]
|
|
assert raw["splash_minimum_seconds"] == 0
|
|
assert raw["retroactive_claims"] is True
|
|
assert raw["optional_member_fields"] == ["nickname", "email", "phone"]
|
|
|
|
|
|
def test_splash_minimum_defaults_to_five_and_is_clamped(tmp_path, monkeypatch) -> None:
|
|
monkeypatch.setenv("CCMA_CONFIG_DIR", str(tmp_path / "config"))
|
|
assert load_config().splash_minimum_seconds == 5.0
|
|
|
|
config = AppConfig(splash_minimum_seconds=-10)
|
|
config.save()
|
|
assert load_config().splash_minimum_seconds == 0.0
|
|
|
|
|
|
def test_store_path_can_be_overridden_from_ccma_environment(tmp_path, monkeypatch) -> None:
|
|
monkeypatch.setenv("CCMA_CONFIG_DIR", str(tmp_path / "config"))
|
|
monkeypatch.setenv("CCMA_STORE", str(tmp_path / "store"))
|
|
|
|
assert load_config().store_path == str(tmp_path / "store")
|
|
|
|
|
|
def test_gnucash_last_account_per_file_round_trips(tmp_path, monkeypatch) -> None:
|
|
monkeypatch.setenv("CCMA_CONFIG_DIR", str(tmp_path / "config"))
|
|
first_file = str(tmp_path / "verein.gnucash")
|
|
second_file = str(tmp_path / "spenden.gnucash")
|
|
config = AppConfig(
|
|
gnucash_last_accounts={first_file: "bank-guid", second_file: "cash-guid"}
|
|
)
|
|
config.save()
|
|
|
|
loaded = load_config()
|
|
assert loaded.gnucash_last_accounts == {first_file: "bank-guid", second_file: "cash-guid"}
|
|
|
|
|
|
def test_gnucash_last_accounts_defaults_to_empty_dict_for_malformed_value(tmp_path, monkeypatch) -> None:
|
|
monkeypatch.setenv("CCMA_CONFIG_DIR", str(tmp_path / "config"))
|
|
config_path = tmp_path / "config" / "config.json"
|
|
config_path.parent.mkdir(parents=True, exist_ok=True)
|
|
config_path.write_text(
|
|
json.dumps({"schema_version": 1, "gnucash_last_accounts": "not-a-dict"}), encoding="utf-8"
|
|
)
|
|
|
|
assert load_config().gnucash_last_accounts == {}
|