diff --git a/examples/ticket_service/ticket_service.py b/examples/ticket_service/ticket_service.py index 5810b3a..fae7001 100644 --- a/examples/ticket_service/ticket_service.py +++ b/examples/ticket_service/ticket_service.py @@ -34,12 +34,16 @@ from mas_core.generator import resource_local_part RESOURCE_TYPE = "ticket" INTAKE_TARGET = "ticket" -_ALPHABET = "0123456789ABCDEFGHJKMNPQRSTVWXYZ" # Crockford base32, no I L O U +_ALPHABET = "0123456789abcdefghjkmnpqrstvwxyz" # Crockford base32, no i l o u def default_ticket_id() -> str: - """Non-guessable-preferred, per the great-service statute.""" - return "GS-" + "".join(secrets.choice(_ALPHABET) for _ in range(10)) + """Non-guessable-preferred, per the great-service statute. + + Lower case, so the address a customer sees is the one forwarders and + mailing lists deliver (spec 6.2, SCP-7). + """ + return "gs-" + "".join(secrets.choice(_ALPHABET) for _ in range(10)) SCHEMA = """ diff --git a/tests/test_end_to_end.py b/tests/test_end_to_end.py index 194470a..8da7255 100644 --- a/tests/test_end_to_end.py +++ b/tests/test_end_to_end.py @@ -83,6 +83,12 @@ def test_canonical_lifecycle(env): assert len(svc.outbox()) == before and len(svc.quarantine()) == 1 +def test_default_ids_are_lower_case(): + from ticket_service import default_ticket_id + tid = default_ticket_id() + assert tid == tid.lower() and tid.startswith("gs-") and len(tid) == 13 + + def test_lower_cased_id_correlates(env): # IONOS forwards and Google Groups members arrive lower-cased (MAS-WP-0003 T04) svc, send, *_ = env