jonesmarvin8 41f34f4ff4 fixes
2026-04-26 20:27:22 -04:00

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