from datetime import datetime, timezone import pytest from approval_engine.api import App from approval_engine.store import Engine FROZEN = datetime(2026, 8, 29, 12, 0, tzinfo=timezone.utc) @pytest.fixture def now(): return FROZEN @pytest.fixture def engine(now): eng = Engine(":memory:", clock=lambda: now) yield eng eng.close() @pytest.fixture def app(engine): return App(engine) def binding(**overrides): base = { "action": "secrets.kv.destroy", "target": {"id": "lane-openbao-root", "stage": "prod"}, "actor": "agt-secrets-engine", "principal": "bernd", "purpose": "rotate-exposed-key", } base.update(overrides) return base def validity(): return { "not_before": "2026-08-29T11:00:00+00:00", "expires_at": "2026-08-29T15:00:00+00:00", } def approve(engine, required=1, extra_binding=None, pdp_digest=None): obj = engine.create( extra_binding or binding(), validity(), required_count=required, pdp_digest=pdp_digest, ) for i in range(required): obj = engine.add_entry(obj.id, f"user:approver-{i}") return obj