diff --git a/tests/test_audit_core_runner.py b/tests/test_audit_core_runner.py index 957fad5..81eefc1 100644 --- a/tests/test_audit_core_runner.py +++ b/tests/test_audit_core_runner.py @@ -62,3 +62,25 @@ def test_invocation_fixture_set_is_declared_by_current_engagement(): ) assert runner.invocation_fixture_ids(args) <= set(engagement["fixture_ids"]) + + +def test_retry_invocation_fixture_set_is_declared_and_distinct(): + previous = json.loads( + Path("engagements/2026-08-22-audit-core-e2.json").read_text() + ) + engagement = json.loads( + Path("engagements/2026-08-22-audit-core-e2-02.json").read_text() + ) + args = Namespace( + tenant_a="tenant:trial:whitehat-a-20260822-02", + tenant_b="tenant:trial:whitehat-b-20260822-02", + event_a="whitehat-e2-event-a-20260822-02", + event_b="whitehat-e2-event-b-20260822-02", + absent_event="whitehat-e2-absent-20260822-02", + forged_event="whitehat-e2-forged-b-20260822-02", + correlation="whitehat-e2-correlation-20260822-02", + ) + fixtures = runner.invocation_fixture_ids(args) + assert fixtures <= set(engagement["fixture_ids"]) + assert fixtures.isdisjoint(previous["fixture_ids"]) + assert engagement["engagement_id"] != previous["engagement_id"] diff --git a/tests/test_engagement.py b/tests/test_engagement.py index c162223..159f31b 100644 --- a/tests/test_engagement.py +++ b/tests/test_engagement.py @@ -63,6 +63,16 @@ def test_pending_owner_acknowledgement_fails_closed(tmp_path): load(tmp_path, data) +def test_retry_record_is_authorized_only_inside_its_window(): + path = "engagements/2026-08-22-audit-core-e2-02.json" + with pytest.raises(AuthorizationError, match="has not started"): + Engagement.load(path, now=datetime(2026, 8, 22, 19, 14, tzinfo=UTC)) + engagement = Engagement.load(path, now=datetime(2026, 8, 22, 19, 15, tzinfo=UTC)) + assert engagement.raw["engagement_id"] == "WH-ENG-20260822-AUDIT-E2-02" + with pytest.raises(AuthorizationError, match="outside"): + Engagement.load(path, now=datetime(2026, 8, 22, 19, 31, tzinfo=UTC)) + + def test_elapsed_record_fails_closed_even_inside_old_window(tmp_path): data = record() data["status"] = "expired"