diff --git a/tests/test_exact_ordinary_review.py b/tests/test_exact_ordinary_review.py index bbc80c9..7727ec5 100644 --- a/tests/test_exact_ordinary_review.py +++ b/tests/test_exact_ordinary_review.py @@ -66,3 +66,31 @@ def test_runtime_passes_only_configured_ids_to_human_client(tmp_path): data['ordinary_approval_ids'] = ['worker-apply']; path.write_text(json.dumps(data)) runtime = Runtime.from_file(path) assert runtime.controller.approval_factory(session()).ordinary_approval_ids == frozenset({'worker-apply'}) + + +from test_approval_component import component +from test_browser_auth import signing_key + + +def test_real_engine_retains_ordinary_control_and_records_actual_human(component): + from datetime import datetime, timedelta, timezone + _, engine, transport, human, _ = component + now = datetime.now(timezone.utc) + engine.create({'actor':'synthetic-requester','principal':'factory-fixture', + 'action':'deliver','purpose':'ordinary-component-proof','target':{'resource':'fixture'}}, + {'not_before':(now-timedelta(seconds=1)).isoformat(), + 'expires_at':(now+timedelta(minutes=10)).isoformat()}, + human_control=False, approval_id='ordinary-fixture') + strict = ApprovalHTTPClient('https://approval.test', human, transport=transport) + with pytest.raises(ApprovalEngineError, match='invalid_approval_response'): + strict.add_entry('ordinary-fixture') + assert not engine.get('ordinary-fixture').entries + admitted = ApprovalHTTPClient('https://approval.test', human, transport=transport, + ordinary_approval_ids=['ordinary-fixture']) + result = admitted.add_entry('ordinary-fixture') + record = engine.get('ordinary-fixture').as_dict() + assert result.status == 'approved' and record['binding']['human_control'] is False + assert len(record['entries']) == 1 + assert record['entries'][0]['principal_type'] == 'human' + assert record['entries'][0]['subject_id'] == human.subject + assert not any(url.endswith('/consume') for _, url in transport.calls)