Files
periscope/tests/test_placement_pipeline.py
micheleandCursor 8d2b85600f Rebrand Pinscope to Periscope across product and codebase.
Rename the core package to periscopex, update UI/docs/Docker/deploy defaults to periscope.michelebigi.it, and keep legacy version/storage key aliases so existing projects keep working.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-13 20:02:04 +02:00

53 lines
1.6 KiB
Python

"""Placement pipeline smoke — topology only, no LLM."""
from __future__ import annotations
from pathlib import Path
import pytest
from backend.periscopex.functional_groups import (
FunctionalGroupsReport,
build_placement_plan,
)
from backend.periscopex.models import DesignGraph
ROOT = Path(__file__).resolve().parents[1]
SIMPLE = ROOT / "simple_project"
@pytest.fixture
def graph() -> DesignGraph:
path = SIMPLE / "design_graph.json"
return DesignGraph.model_validate_json(path.read_text(encoding="utf-8"))
def test_placement_plan_writes_domains_and_groups(graph: DesignGraph, tmp_path: Path):
plan = build_placement_plan(graph)
assert plan.objective == "routing"
assert plan.domains
assert plan.groups
out = tmp_path / "placement_plan.json"
out.write_text(plan.model_dump_json(indent=2) + "\n")
loaded = FunctionalGroupsReport.model_validate_json(out.read_text())
assert len(loaded.groups) == len(plan.groups)
def test_placement_busy_helpers():
from backend.services.projects import ProjectMeta, STATUS_QUEUED, STATUS_RUNNING
# Mirror placement_pipeline helpers without importing the worker stack
# (that pulls Anthropic via services.pipeline in lean test envs).
active = frozenset({"queued", "running"})
analysis = frozenset({STATUS_QUEUED, STATUS_RUNNING})
draft = ProjectMeta(id="p", name="t", created="2026-01-01", user_id="u")
assert (draft.placement_status or "draft") not in active
assert draft.status not in analysis
draft.placement_status = "queued"
assert (draft.placement_status or "draft") in active
draft.status = STATUS_RUNNING
assert draft.status in analysis