Add /api/library datasheet import and component GET/PUT with no exam. Reorganize pytest into datasheet, library, schematic, PCB, and AF+AI. Document Rust criteria (none chosen; no rustup) and coding conformity.
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""PCB SSE terminal mapping — complete is not pcb_error."""
|
|
|
|
from backend.services.pcb_pipeline import pcb_sse_terminal_from_status
|
|
|
|
|
|
def test_complete_status_is_pcb_complete_not_error():
|
|
ev, data = pcb_sse_terminal_from_status(
|
|
"complete",
|
|
{"findings": 38, "domains": 3, "groups": 4},
|
|
"pcb_status=complete (terminal)",
|
|
)
|
|
assert ev == "pcb_complete"
|
|
assert data["findings"] == 38
|
|
assert data["domains"] == 3
|
|
assert data["groups"] == 4
|
|
assert "error" not in data
|
|
|
|
|
|
def test_complete_reason_without_status_still_completes():
|
|
ev, data = pcb_sse_terminal_from_status(
|
|
"running",
|
|
{},
|
|
"pcb_status=complete (terminal)",
|
|
)
|
|
assert ev == "pcb_complete"
|
|
assert data.get("synthetic") is True
|
|
|
|
|
|
def test_error_status_stays_pcb_error():
|
|
ev, data = pcb_sse_terminal_from_status(
|
|
"error",
|
|
{"error": "parse failed"},
|
|
"pcb_status=error (terminal)",
|
|
)
|
|
assert ev == "pcb_error"
|
|
assert data["error"] == "parse failed"
|
|
|
|
|
|
def test_cancelled_status_is_pcb_cancelled():
|
|
ev, _data = pcb_sse_terminal_from_status(
|
|
"cancelled", {}, "pcb_status=cancelled (terminal)",
|
|
)
|
|
assert ev == "pcb_cancelled"
|