mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-05-14 03:59:30 +00:00
57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
import pytest
|
|
from keycard.card_interface import CardInterface
|
|
from keycard.preconditions import make_precondition
|
|
from keycard.exceptions import InvalidStateError
|
|
|
|
|
|
class DummyCard(CardInterface):
|
|
def __init__(self, **attrs):
|
|
for k, v in attrs.items():
|
|
setattr(self, k, v)
|
|
|
|
|
|
def test_precondition_passes_when_attribute_true():
|
|
@make_precondition('is_ready')
|
|
def do_something(card):
|
|
return "success"
|
|
card = DummyCard(is_ready=True)
|
|
assert do_something(card) == "success"
|
|
|
|
|
|
def test_precondition_raises_when_attribute_false():
|
|
@make_precondition('is_ready')
|
|
def do_something(card):
|
|
return "should not reach"
|
|
card = DummyCard(is_ready=False)
|
|
with pytest.raises(InvalidStateError) as exc:
|
|
do_something(card)
|
|
assert "Is Ready must be satisfied." in str(exc.value)
|
|
|
|
|
|
def test_precondition_raises_when_attribute_missing():
|
|
@make_precondition('is_ready')
|
|
def do_something(card):
|
|
return "should not reach"
|
|
card = DummyCard()
|
|
with pytest.raises(InvalidStateError) as exc:
|
|
do_something(card)
|
|
assert "Is Ready must be satisfied." in str(exc.value)
|
|
|
|
|
|
def test_precondition_custom_display_name():
|
|
@make_precondition('is_ready', display_name="Custom Name")
|
|
def do_something(card):
|
|
return "success"
|
|
card = DummyCard(is_ready=False)
|
|
with pytest.raises(InvalidStateError) as exc:
|
|
do_something(card)
|
|
assert "Custom Name must be satisfied." in str(exc.value)
|
|
|
|
|
|
def test_precondition_passes_args_kwargs():
|
|
@make_precondition('is_ready')
|
|
def do_something(card, x, y=2):
|
|
return x + y
|
|
card = DummyCard(is_ready=True)
|
|
assert do_something(card, 3, y=4) == 7
|