import pathlib import sys import unittest sys.path.insert(0, str(pathlib.Path(__file__).parents[1])) from provisioner import _username, dispatch, Result class Fake: def provision(self, payload): return Result("p", "u", "password_setup_required", False) def suspend(self, subject): return Result("p", subject, "suspended", False) def reactivate(self, subject): return Result("p", subject, "active", False) def deprovision(self, subject): return Result("p", subject, "deprovisioned", False) class ProvisionerTests(unittest.TestCase): def test_username_is_stable_and_sanitized(self): self.assertEqual("bernd.worsch", _username("Bernd.Worsch@binky-hedgehog.com")) def test_dispatch_requires_idempotency(self): with self.assertRaisesRegex(ValueError, "idempotency_key"): dispatch(Fake(), "/v1/identities/suspend", { "external_subject": "u", "correlation_id": "c" }) def test_lifecycle_dispatch(self): result = dispatch(Fake(), "/v1/identities/suspend", { "external_subject": "u", "idempotency_key": "1234567890123456", "correlation_id": "c", }) self.assertEqual("suspended", result.status)