"""Tests for prune version-selection logic (MetadataStore._select_versions_to_keep).""" from src.config import MetadataStore from src.models import DownloadedInstaller, GameRecord, InstallerType, PruneStrategy def _record(version_years: dict[str, int]) -> GameRecord: """Build a GameRecord with one installer per (version, year).""" installers = [ DownloadedInstaller( filename=f"setup_{v}.exe", size=1, version=v, language="en", installer_type=InstallerType.GAME, downloaded_at=f"{year}-01-01T00:00:00", ) for v, year in version_years.items() ] return GameRecord(game_id="1", name="Game", installers=installers) VERSION_YEARS = {"1": 2020, "2": 2020, "3": 2021, "4": 2022, "5": 2022} ALL = ["1", "2", "3", "4", "5"] def _keep(strategy: PruneStrategy, keep_latest: int = 1) -> set[str]: record = _record(VERSION_YEARS) return MetadataStore._select_versions_to_keep(record, ALL, keep_latest, strategy) def test_returns_all_when_fewer_than_keep() -> None: record = _record({"1": 2020}) assert MetadataStore._select_versions_to_keep(record, ["1"], 1, PruneStrategy.LATEST_N) == {"1"} def test_latest_n_keeps_only_recent() -> None: assert _keep(PruneStrategy.LATEST_N, keep_latest=1) == {"5"} assert _keep(PruneStrategy.LATEST_N, keep_latest=2) == {"4", "5"} def test_latest_n_oldest_adds_first() -> None: assert _keep(PruneStrategy.LATEST_N_OLDEST, keep_latest=1) == {"1", "5"} def test_yearly_keeps_one_per_year_plus_latest() -> None: assert _keep(PruneStrategy.YEARLY, keep_latest=1) == {"2", "3", "5"} def test_latest_n_yearly_oldest_combines_all() -> None: assert _keep(PruneStrategy.LATEST_N_YEARLY_OLDEST, keep_latest=1) == {"1", "2", "3", "5"}