diff --git a/backend/services/infonet/tests/test_dispute_nonfinite_values.py b/backend/services/infonet/tests/test_dispute_nonfinite_values.py index 5375654..1c82416 100644 --- a/backend/services/infonet/tests/test_dispute_nonfinite_values.py +++ b/backend/services/infonet/tests/test_dispute_nonfinite_values.py @@ -3,22 +3,52 @@ from services.infonet.markets.dispute import collect_disputes -def test_collect_disputes_normalizes_invalid_numeric_values(): - chain = [ - { - "event_type": "dispute_open", - "event_id": "dispute-1", - "node_id": "challenger", - "timestamp": "not-a-timestamp", - "payload": { - "market_id": "market-1", - "challenger_stake": "nan", - }, +def _open_event( + *, dispute_id: str, market_id: str, timestamp: object, challenger_stake: object +) -> dict: + return { + "event_type": "dispute_open", + "event_id": dispute_id, + "node_id": "challenger", + "timestamp": timestamp, + "payload": { + "market_id": market_id, + "challenger_stake": challenger_stake, }, + } + + +def test_malformed_authoritative_open_events_are_excluded() -> None: + chain = [ + _open_event( + dispute_id="bad-time", + market_id="market-1", + timestamp="not-a-timestamp", + challenger_stake=3.0, + ), + _open_event( + dispute_id="bad-stake", + market_id="market-1", + timestamp=10.0, + challenger_stake=float("nan"), + ), + ] + + assert collect_disputes("market-1", chain) == [] + + +def test_invalid_economic_and_resolution_values_fail_closed() -> None: + chain = [ + _open_event( + dispute_id="dispute-1", + market_id="market-1", + timestamp=10.0, + challenger_stake=3.0, + ), { "event_type": "dispute_stake", "node_id": "oracle-1", - "timestamp": 1.0, + "timestamp": 11.0, "payload": { "dispute_id": "dispute-1", "side": "confirm", @@ -31,34 +61,26 @@ def test_collect_disputes_normalizes_invalid_numeric_values(): "timestamp": float("inf"), "payload": { "dispute_id": "dispute-1", - "outcome": "upheld", + "outcome": "reversed", }, }, ] - disputes = collect_disputes("market-1", chain) + dispute = collect_disputes("market-1", chain)[0] - assert len(disputes) == 1 - dispute = disputes[0] - assert dispute.challenger_stake == 0.0 - assert dispute.opened_at == 0.0 assert dispute.confirm_stakes == [] - assert dispute.resolved_outcome == "upheld" - assert dispute.resolved_at == 0.0 + assert dispute.resolved_outcome is None + assert dispute.resolved_at is None -def test_collect_disputes_preserves_finite_numeric_strings(): +def test_collect_disputes_preserves_finite_numeric_strings() -> None: chain = [ - { - "event_type": "dispute_open", - "event_id": "dispute-2", - "node_id": "challenger", - "timestamp": "12.5", - "payload": { - "market_id": "market-2", - "challenger_stake": "3.5", - }, - }, + _open_event( + dispute_id="dispute-2", + market_id="market-2", + timestamp="12.5", + challenger_stake="3.5", + ), { "event_type": "dispute_stake", "node_id": "oracle-2", @@ -69,6 +91,14 @@ def test_collect_disputes_preserves_finite_numeric_strings(): "amount": "2.25", }, }, + { + "event_type": "dispute_resolve", + "timestamp": "13.5", + "payload": { + "dispute_id": "dispute-2", + "outcome": "reversed", + }, + }, ] dispute = collect_disputes("market-2", chain)[0] @@ -76,3 +106,5 @@ def test_collect_disputes_preserves_finite_numeric_strings(): assert dispute.challenger_stake == 3.5 assert dispute.opened_at == 12.5 assert dispute.reverse_stakes[0]["amount"] == 2.25 + assert dispute.resolved_outcome == "reversed" + assert dispute.resolved_at == 13.5