Files

52 lines
1.8 KiB
Python

"""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"}