Files
pkgmgr/tests/integration/test_repository_paths_exist.py
Kevin Veen-Birkenbach 84b6c71748
Some checks failed
Mark stable commit / test-unit (push) Has been cancelled
Mark stable commit / test-integration (push) Has been cancelled
Mark stable commit / test-env-virtual (push) Has been cancelled
Mark stable commit / test-env-nix (push) Has been cancelled
Mark stable commit / test-e2e (push) Has been cancelled
Mark stable commit / test-virgin-user (push) Has been cancelled
Mark stable commit / test-virgin-root (push) Has been cancelled
Mark stable commit / codesniffer-shellcheck (push) Has been cancelled
Mark stable commit / codesniffer-ruff (push) Has been cancelled
Mark stable commit / mark-stable (push) Has been cancelled
test(integration): add unittest-based repository layout contract test
- Add integration test using unittest to verify canonical repository paths
- Assert pkgmgr repository satisfies template layout (packaging, changelog, metadata)
- Use real filesystem without mocks or pytest dependencies

https://chatgpt.com/share/693eaa75-98f0-800f-adca-439555f84154
2025-12-14 13:26:18 +01:00

66 lines
1.9 KiB
Python

from __future__ import annotations
import os
import unittest
from pathlib import Path
from pkgmgr.core.repository.paths import resolve_repo_paths
def _find_repo_root() -> Path:
"""
Locate the pkgmgr repository root from the test location.
Assumes:
repo_root/
src/pkgmgr/...
tests/integration/...
"""
here = Path(__file__).resolve()
for parent in here.parents:
if (parent / "pyproject.toml").is_file() and (parent / "src" / "pkgmgr").is_dir():
return parent
raise RuntimeError("Could not determine repository root for pkgmgr integration test")
class TestRepositoryPathsExist(unittest.TestCase):
"""
Integration test: pkgmgr is the TEMPLATE repository.
All canonical paths resolved for pkgmgr must exist.
"""
def test_pkgmgr_repository_paths_exist(self) -> None:
repo_root = _find_repo_root()
paths = resolve_repo_paths(str(repo_root))
missing: list[str] = []
def require(path: str | None, description: str) -> None:
if not path:
missing.append(f"{description}: <not resolved>")
return
if not os.path.isfile(path):
missing.append(f"{description}: {path} (missing)")
# Core metadata
require(paths.pyproject_toml, "pyproject.toml")
require(paths.flake_nix, "flake.nix")
# Human changelog
require(paths.changelog_md, "CHANGELOG.md")
# Packaging files (pkgmgr defines the template)
require(paths.arch_pkgbuild, "Arch PKGBUILD")
require(paths.debian_changelog, "Debian changelog")
require(paths.rpm_spec, "RPM spec file")
if missing:
self.fail(
"pkgmgr repository does not satisfy the canonical repository layout:\n"
+ "\n".join(f" - {item}" for item in missing)
)
if __name__ == "__main__":
unittest.main()