impl/js/src/email.mjs (written from CONTRACT.md + FLOWS.md): both roles, case store, handoffs, timeouts, one-cap outbox with holding, authorization. Passes all 22 flows from the bundle; with the JS master all 12 slave flows (no Python contract party). Writing it found six contract gaps, folded into the draft as MCP-1..6 (acknowledgement, details convention, resume names the outcome, opaque case key, error table, transfer reporting); flows now check outcome tokens, not reference prose. A mutation check found a missing flow: a-008 (per-type master check). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 5787@bnt-lap001 Assistant-Session: 5db26b82-138b-40cc-9856-4d5eb0f752fd
41 lines
1.6 KiB
Python
41 lines
1.6 KiB
Python
"""The independent JS implementation (impl/js, MAS-WP-0009), where node is available."""
|
||
import shutil
|
||
import subprocess
|
||
from pathlib import Path
|
||
|
||
import pytest
|
||
|
||
ROOT = Path(__file__).resolve().parents[1]
|
||
pytestmark = pytest.mark.skipif(not shutil.which("node"), reason="node not available")
|
||
|
||
|
||
def test_js_passes_the_bundles_unchanged():
|
||
# addresses.json, statute-aware.json and auth.json, read from the bundles in place
|
||
proc = subprocess.run(["node", "--test"], cwd=ROOT / "impl/js", capture_output=True, text=True)
|
||
assert proc.returncode == 0, proc.stdout[-2000:] + proc.stderr[-2000:]
|
||
assert "# fail 0" in proc.stdout or "ℹ fail 0" in proc.stdout
|
||
|
||
|
||
def test_js_outside_master_passes_the_slave_flows():
|
||
from mas_modes.external import ExternalMaster
|
||
from mas_modes.runner import run_mode_corpus
|
||
rep = run_mode_corpus(master_factory=ExternalMaster.js, roles=("slave",))
|
||
assert rep.ok, rep.failures
|
||
assert rep.passed == 12
|
||
|
||
|
||
def test_js_email_side_passes_every_flow():
|
||
from mas_modes.external import ExternalEmail
|
||
from mas_modes.runner import run_mode_corpus
|
||
rep = run_mode_corpus(email_factory=ExternalEmail.js)
|
||
assert rep.ok, rep.failures
|
||
assert rep.passed == 22
|
||
|
||
|
||
def test_js_email_and_js_master_together():
|
||
# Neither contract party is Python: only the gateway and the callback stub are.
|
||
from mas_modes.external import ExternalEmail, ExternalMaster
|
||
from mas_modes.runner import run_mode_corpus
|
||
rep = run_mode_corpus(email_factory=ExternalEmail.js, master_factory=ExternalMaster.js, roles=("slave",))
|
||
assert rep.ok, rep.failures
|
||
assert rep.passed == 12
|