52 lines
1.8 KiB
Python
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"}
|