"""Tests for settings_service runtime settings helpers.""" from __future__ import annotations from pathlib import Path import aiosqlite import pytest from app.db import init_db from app.services import settings_service @pytest.fixture async def db(tmp_path: Path) -> aiosqlite.Connection: # type: ignore[misc] """Provide an initialised aiosqlite connection for settings service tests.""" conn: aiosqlite.Connection = await aiosqlite.connect(str(tmp_path / "test.db")) conn.row_factory = aiosqlite.Row await init_db(conn) yield conn await conn.close() class TestMapColorThresholds: async def test_get_map_color_thresholds_returns_defaults_on_fresh_db( self, db: aiosqlite.Connection ) -> None: """get_map_color_thresholds() returns default values on a fresh database.""" high, medium, low = await settings_service.get_map_color_thresholds(db) assert high == 100 assert medium == 50 assert low == 20 async def test_set_map_color_thresholds_persists_values( self, db: aiosqlite.Connection ) -> None: """set_map_color_thresholds() stores and retrieves custom values.""" await settings_service.set_map_color_thresholds( db, threshold_high=200, threshold_medium=80, threshold_low=30 ) high, medium, low = await settings_service.get_map_color_thresholds(db) assert high == 200 assert medium == 80 assert low == 30 async def test_set_map_color_thresholds_rejects_non_positive( self, db: aiosqlite.Connection ) -> None: """set_map_color_thresholds() raises ValueError for non-positive thresholds.""" with pytest.raises(ValueError, match="positive integers"): await settings_service.set_map_color_thresholds( db, threshold_high=100, threshold_medium=50, threshold_low=0 ) with pytest.raises(ValueError, match="positive integers"): await settings_service.set_map_color_thresholds( db, threshold_high=-10, threshold_medium=50, threshold_low=20 ) async def test_set_map_color_thresholds_rejects_invalid_order( self, db: aiosqlite.Connection ) -> None: """set_map_color_thresholds() rejects invalid ordering.""" with pytest.raises(ValueError, match="high > medium > low"): await settings_service.set_map_color_thresholds( db, threshold_high=50, threshold_medium=50, threshold_low=20 ) with pytest.raises(ValueError, match="high > medium > low"): await settings_service.set_map_color_thresholds( db, threshold_high=100, threshold_medium=30, threshold_low=50 )