#!/usr/bin/env python3 """Test logiki przyrostowej na PRAWDZIWYM repo (tylko odczyt – zapis zaślepiony).""" import importlib.machinery, importlib.util, json, os loader = importlib.machinery.SourceFileLoader("pagsync_mod", "/opt/pagan-web-v2/pagsync") spec = importlib.util.spec_from_loader("pagsync_mod", loader) mod = importlib.util.module_from_spec(spec) loader.exec_module(mod) base = mod.REPO_BASE cat = os.path.join(base, "stable") captured = {} def fake_write(cat_dir, packages, catname, verbose=True): captured["packages"] = packages captured["cat"] = catname return True mod._write_and_sign_repo_json = fake_write mod.DO_SIGN = True before = json.load(open(os.path.join(cat, "repo.json"))) print("repo.json przed:", before["count"], "pakietów") ok = mod.update_repo_json_after_build(cat, "yaml-cpp-0.8.0-1.pag", verbose=False) assert ok, "update zwróciło False" pkgs = captured["packages"] names = {p["name"] for p in pkgs} print("po aktualizacji (symulacja):", len(pkgs), "pakietów") # 1) brak wpisów wskazujących na nieistniejące pliki missing = [p["filename"] for p in pkgs if not os.path.isfile(os.path.join(cat, p["filename"]))] assert not missing, f"wpisy bez plików: {missing[:5]}" # 2) każdy plik .pag na dysku jest w indeksie on_disk = {f for f in os.listdir(cat) if f.endswith(".pag")} indexed = {p["filename"] for p in pkgs} not_indexed = on_disk - indexed assert not not_indexed, f"pliki poza indeksem: {sorted(not_indexed)[:5]}" # 3) brak duplikatów po nazwie assert len(names) == len(pkgs), f"duplikaty nazw: {len(pkgs)} wpisów, {len(names)} nazw" # 4) yaml-cpp obecny, poprawny wpis yc = [p for p in pkgs if p["name"] == "yaml-cpp"] assert len(yc) == 1 and yc[0]["filename"] == "yaml-cpp-0.8.0-1.pag", yc print("pliki .pag na dysku:", len(on_disk), "| wpisy w indeksie:", len(pkgs)) print("✅ TEST OK: indeks spójny z dyskiem, brak duplikatów, samoleczenie działa")