nucypher/tests/unit/conditions/test_condition_lingo.py

49 lines
1.6 KiB
Python
Raw Normal View History

import pytest
import nucypher
from nucypher.blockchain.eth.constants import NULL_ADDRESS
from nucypher.policy.conditions.context import USER_ADDRESS_CONTEXT
from nucypher.policy.conditions.exceptions import InvalidConditionLingo
2022-09-22 11:42:48 +00:00
from nucypher.policy.conditions.lingo import ConditionLingo
2022-11-17 11:20:53 +00:00
@pytest.fixture(scope='module')
def lingo():
return [
{"returnValueTest": {"value": 0, "comparator": ">"}, "method": "timelock"},
{"operator": "and"},
2022-11-17 11:20:53 +00:00
{"returnValueTest": {"value": 99999999999999999, "comparator": "<"}, "method": "timelock"},
2022-09-22 11:42:48 +00:00
]
2022-11-10 14:16:36 +00:00
def test_invalid_condition():
with pytest.raises(InvalidConditionLingo):
ConditionLingo.from_list([{}])
with pytest.raises(InvalidConditionLingo):
ConditionLingo.from_list([{"dont_mind_me": "nothing_to_see_here"}])
2022-11-17 11:20:53 +00:00
def test_condition_lingo_to_from_list(lingo):
clingo = ConditionLingo.from_list(lingo)
2022-11-16 01:57:08 +00:00
clingo_list = clingo.to_list()
2022-11-17 11:20:53 +00:00
assert clingo_list == lingo
2022-11-10 14:16:36 +00:00
2022-11-17 11:20:53 +00:00
def test_condition_lingo_repr(lingo):
clingo = ConditionLingo.from_list(lingo)
2022-11-10 14:16:36 +00:00
clingo_string = f"{clingo}"
assert f"{clingo.__class__.__name__}" in clingo_string
assert f"id={clingo.id}" in clingo_string
assert f"size={len(bytes(clingo))}" in clingo_string
2022-11-17 15:27:24 +00:00
def test_lingo_parameter_int_type_preservation(custom_abi_with_multiple_parameters, mocker):
mocker.patch.dict(
nucypher.policy.conditions.context._DIRECTIVES,
{USER_ADDRESS_CONTEXT: lambda: NULL_ADDRESS},
)
2022-11-17 11:20:53 +00:00
clingo = ConditionLingo.from_list([custom_abi_with_multiple_parameters])
conditions = clingo.to_list()
assert conditions[0]["parameters"][2] == 4