"""Drzewo astroklienta budowane tak samo, jak buduje je Dockerfile. Ta usługa nie ma własnego kompletu plików: bierze rdzeń z warstwy prezentacji, usuwa z niego to, czego ten produkt nie ma (usun.txt), i nakłada własne. Testy muszą patrzeć na WYNIK tego złożenia, a nie na katalog `app/` w repozytorium — inaczej sprawdzałyby garść plików, a nie produkt. """ from __future__ import annotations import pathlib import shutil import pytest USLUGA = pathlib.Path(__file__).resolve().parents[1] RDZEN = USLUGA.parents[0] / "presentation" / "app" def zloz(cel: pathlib.Path) -> pathlib.Path: """Rdzeń minus usun.txt plus nakładka — dokładnie jak w Dockerfile.""" app = cel / "app" shutil.copytree(RDZEN, app, ignore=shutil.ignore_patterns("__pycache__", "*.pyc")) for linia in (USLUGA / "usun.txt").read_text(encoding="utf-8").splitlines(): sciezka = linia.strip() if not sciezka: continue do_usuniecia = app / sciezka assert do_usuniecia.exists(), f"usun.txt wskazuje nieistniejące: {sciezka}" shutil.rmtree(do_usuniecia) if do_usuniecia.is_dir() else do_usuniecia.unlink() shutil.copytree(USLUGA / "app", app, dirs_exist_ok=True, ignore=shutil.ignore_patterns("__pycache__", "*.pyc")) return cel @pytest.fixture(scope="session") def drzewo(tmp_path_factory) -> pathlib.Path: return zloz(tmp_path_factory.mktemp("astroklient"))