69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
|
|
# retoor <retoor@molodetz.nl>
|
||
|
|
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
PACKAGE_ROOT = Path(__file__).resolve().parents[4] / "devplacepy"
|
||
|
|
PACKAGE_DIR = PACKAGE_ROOT / "services" / "acceptance"
|
||
|
|
NEEDLES = (
|
||
|
|
"services.acceptance",
|
||
|
|
"devplacepy/services/acceptance",
|
||
|
|
"AcceptanceService",
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def source_files(suffixes):
|
||
|
|
return [
|
||
|
|
path
|
||
|
|
for path in PACKAGE_ROOT.rglob("*")
|
||
|
|
if path.suffix in suffixes
|
||
|
|
and path.is_file()
|
||
|
|
and PACKAGE_DIR not in path.parents
|
||
|
|
and "__pycache__" not in path.parts
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
def references(path):
|
||
|
|
body = path.read_text()
|
||
|
|
return any(needle in body for needle in NEEDLES)
|
||
|
|
|
||
|
|
|
||
|
|
def test_only_main_imports_the_acceptance_package():
|
||
|
|
importers = [
|
||
|
|
path.relative_to(PACKAGE_ROOT).as_posix()
|
||
|
|
for path in source_files({".py"})
|
||
|
|
if references(path)
|
||
|
|
]
|
||
|
|
assert importers == ["main.py"]
|
||
|
|
|
||
|
|
|
||
|
|
def test_no_template_or_static_asset_mentions_the_package():
|
||
|
|
mentions = [
|
||
|
|
path.relative_to(PACKAGE_ROOT).as_posix()
|
||
|
|
for path in source_files({".html", ".js", ".css"})
|
||
|
|
if references(path)
|
||
|
|
]
|
||
|
|
assert mentions == []
|
||
|
|
|
||
|
|
|
||
|
|
def test_the_feature_has_no_route_schema_or_agent_tool():
|
||
|
|
watched = ("routers", "schemas", "docs_api")
|
||
|
|
surfaced = [
|
||
|
|
path.relative_to(PACKAGE_ROOT).as_posix()
|
||
|
|
for path in source_files({".py"})
|
||
|
|
if path.parts[len(PACKAGE_ROOT.parts)] in watched and references(path)
|
||
|
|
]
|
||
|
|
assert surfaced == []
|
||
|
|
|
||
|
|
|
||
|
|
def test_the_devii_catalog_does_not_expose_the_service():
|
||
|
|
catalog = PACKAGE_ROOT / "services" / "devii" / "actions"
|
||
|
|
mentions = [path.name for path in catalog.rglob("*.py") if references(path)]
|
||
|
|
assert mentions == []
|
||
|
|
|
||
|
|
|
||
|
|
def test_the_package_imports_no_router_and_no_template_global():
|
||
|
|
for path in PACKAGE_DIR.glob("*.py"):
|
||
|
|
body = path.read_text()
|
||
|
|
assert "devplacepy.routers" not in body
|
||
|
|
assert "devplacepy.templating" not in body
|