from src.execution.nonce_manager import NonceManager, SignerLockRegistry


def test_nonce_manager_persists_monotonic_atomic_counter(tmp_path):
    p = tmp_path / "nonce.json"
    n1 = NonceManager(p, signer="0xabc")
    a = n1.next_nonce()
    b = n1.next_nonce()
    n2 = NonceManager(p, signer="0xabc")
    c = n2.next_nonce()
    assert a < b < c


def test_signer_registry_detects_collision(tmp_path):
    reg = SignerLockRegistry(tmp_path)
    first = reg.try_acquire("0xabc", process_id="p1")
    second = reg.try_acquire("0xabc", process_id="p2")
    assert first.acquired is True
    assert second.acquired is False
    assert second.reason == "signer_collision"
