mail-address-semantics/tests/test_modes_conformance.py
tegwick 87be0d1da3 MAS-WP-0010 finished: email slave role, stub outside master, contract flows, SCP-8
- EmailMode slave role: master-issued case ids, events to the master,
  sends only on instruction or autonomous policy, transfers blocked or to
  a primed webhook, timeouts left to the master; principle 10 refusals
  reported back.
- conformance/flows.json (13 flows) + mas_modes.runner; mas test runs the
  mode corpus (172/172).
- SCP-8 / v0.2 section 7.1: !MODE requests a handoff defined by the mode
  contract. docs/reuse-surface.md.
- Deploy image copies mas_modes (ticket service imports its mailer).

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
2026-10-19 11:03:16 +02:00

39 lines
1.7 KiB
Python

"""Mode contract bundle (MAS-WP-0010 T02/T03/T07): vendored copies, fixtures, flows,
and the gateway event schema checked against real gateway output."""
from pathlib import Path
import pytest
from mas_core.discovery import Response, discover
from mas_gateway.core import Resolver, build_event, message_meta_from_rfc822
from mas_modes import event_errors
from mas_modes.runner import run_mode_corpus
ROOT = Path(__file__).resolve().parents[1]
BUNDLE = ROOT / "mas-modes-v0.1-spec"
VENDORED = ROOT / "mas_modes"
@pytest.mark.parametrize("rel", sorted(str(p.relative_to(BUNDLE)) for p in BUNDLE.glob("*/*.json")))
def test_vendored_copy_matches_bundle(rel):
assert (BUNDLE / rel).read_bytes() == (VENDORED / rel).read_bytes()
def test_mode_corpus():
rep = run_mode_corpus()
assert rep.ok, rep.failures
assert rep.passed >= 170
@pytest.mark.parametrize("recipient", [
"ticket!callback@great-service.example", "ticket=GS-1+comments@great-service.example",
"bernd.worsch@great-service.example", "ticket=PR42$4@great-service.example",
"x@unknown.invalid"])
def test_gateway_events_match_schema(recipient):
raw = (b"Authentication-Results: great-service.example; dmarc=pass header.from=example.net\r\n"
b"From: c@example.net\r\nTo: x@great-service.example\r\nSubject: s\r\n\r\nbody\r\n")
offline = lambda host, **kw: discover(host, transport=lambda u, t: Response(404, {}, b"")) # noqa: E731
resolver = Resolver.with_statute_files(
[ROOT / "examples/statute/great-service.example/.well-known/mas"], discover_fn=offline)
event = build_event(recipient, message_meta_from_rfc822(raw, "great-service.example"), resolver)
assert event_errors(event) == [], event