"""Tests for config.py.""" import json from pathlib import Path from unittest.mock import patch import pytest from modpack_checker.config import Config def test_default_values(): cfg = Config() assert cfg.curseforge_api_key == "" assert cfg.discord_webhook_url is None assert cfg.check_interval_hours == 6 assert cfg.notification_on_update is True def test_is_configured_without_key(): assert Config().is_configured() is False def test_is_configured_with_key(): assert Config(curseforge_api_key="abc123").is_configured() is True def test_save_and_load_round_trip(tmp_path): config_dir = tmp_path / ".config" / "modpack-checker" config_file = config_dir / "config.json" with patch("modpack_checker.config.CONFIG_DIR", config_dir), \ patch("modpack_checker.config.CONFIG_FILE", config_file): original = Config( curseforge_api_key="test-key-xyz", check_interval_hours=12, notification_on_update=False, ) original.save() loaded = Config.load() assert loaded.curseforge_api_key == "test-key-xyz" assert loaded.check_interval_hours == 12 assert loaded.notification_on_update is False def test_load_returns_defaults_when_file_missing(tmp_path): config_file = tmp_path / "nonexistent.json" with patch("modpack_checker.config.CONFIG_FILE", config_file): cfg = Config.load() assert cfg.curseforge_api_key == "" def test_load_returns_defaults_on_corrupted_file(tmp_path): config_dir = tmp_path / ".config" / "modpack-checker" config_dir.mkdir(parents=True) config_file = config_dir / "config.json" config_file.write_text("{ this is not valid json }") with patch("modpack_checker.config.CONFIG_DIR", config_dir), \ patch("modpack_checker.config.CONFIG_FILE", config_file): cfg = Config.load() assert cfg.curseforge_api_key == "" def test_interval_bounds(): with pytest.raises(Exception): Config(check_interval_hours=0) with pytest.raises(Exception): Config(check_interval_hours=169)