from pathlib import Path import pytest from app.db import watchlist @pytest.fixture() def db_path(tmp_path: Path) -> Path: return tmp_path / "prism.db" def test_seed_default_profile(db_path: Path) -> None: watchlist.init_db(db_path) with watchlist.connect(db_path) as conn: row = conn.execute("SELECT name FROM profiles WHERE name = 'default'").fetchone() assert row["name"] == "default" def test_add_remove_and_uppercase(db_path: Path) -> None: added = watchlist.add_symbol("aapl", db_path) assert added["symbol"] == "AAPL" assert watchlist.list_symbols(db_path)[0]["symbol"] == "AAPL" assert watchlist.remove_symbol("AAPL", db_path) is True assert watchlist.list_symbols(db_path) == [] def test_duplicate_prevention(db_path: Path) -> None: first = watchlist.add_symbol("msft", db_path) second = watchlist.add_symbol("MSFT", db_path) rows = watchlist.list_symbols(db_path) assert first == second assert [row["symbol"] for row in rows] == ["MSFT"] def test_ten_symbol_cap(db_path: Path) -> None: for idx in range(10): watchlist.add_symbol(f"T{idx}", db_path) with pytest.raises(watchlist.WatchlistFullError): watchlist.add_symbol("OVER", db_path)