from src.reconciliation.hyperliquid_reconciler import LocalOrderRecord, ReconcilerSnapshot, reconcile_hyperliquid_state


def test_reconciler_flags_position_without_reduce_only_stop():
    snapshot = ReconcilerSnapshot(
        positions={"BTC": {"szi": "0.01"}},
        open_orders=[],
        local_orders=[LocalOrderRecord(coin="BTC", client_order_id="entry-1", order_role="entry")],
    )

    result = reconcile_hyperliquid_state(snapshot)

    assert result.new_entries_allowed is False
    assert result.stops_missing_count == 1
    assert "position_without_stop:BTC" in result.alerts


def test_reconciler_accepts_position_with_reduce_only_stop():
    snapshot = ReconcilerSnapshot(
        positions={"BTC": {"szi": "0.01"}},
        open_orders=[{"coin": "BTC", "reduceOnly": True, "orderType": "trigger"}],
        local_orders=[LocalOrderRecord(coin="BTC", client_order_id="entry-1", order_role="entry")],
    )

    result = reconcile_hyperliquid_state(snapshot)

    assert result.new_entries_allowed is True
    assert result.stops_missing_count == 0
