from marshmallow import fields
from unittest import TestCase
from ...models.base import BaseModel, BaseModelSchema
from ..base import BaseDecoratorSet
[docs]class SimpleModel(BaseModel):
def __init__(self, *, value: str = None, handled_decorator: str = None, **kwargs):
super().__init__(**kwargs)
self.handled_decorator = handled_decorator
self.value = value
[docs]class SimpleModelSchema(BaseModelSchema):
value = fields.Str(required=True)
handled_decorator = fields.Str(required=False, data_key="handled~decorator")
[docs]class TestDecoratorSet(TestCase):
[docs] def test_dict(self):
decors = BaseDecoratorSet()
decors["test"] = "TEST"
assert decors["test"] == "TEST"
result = decors.to_dict()
assert result == {"~test": "TEST"}
[docs] def test_decorator_model(self):
decor_value = {}
message = {"~test": {"value": "TEST"}}
decors = BaseDecoratorSet()
decors.add_model("test", SimpleModel)
remain = decors.extract_decorators(message, SimpleModelSchema)
tested = decors["test"]
assert isinstance(tested, SimpleModel) and tested.value == "TEST"
result = decors.to_dict()
assert result == message
[docs] def test_field_decorator(self):
decor_value = {}
message = {"test~decorator": decor_value, "one": "TWO"}
decors = BaseDecoratorSet()
remain = decors.extract_decorators(message, SimpleModelSchema)
# check original is unmodified
assert "test~decorator" in message
assert decors.field("test")
assert decors.field("test")["decorator"] is decor_value
assert remain == {"one": "TWO"}
assert "test~decorator" in decors.to_dict()
[docs] def test_skip_decorator(self):
decor_value = {}
message = {"handled~decorator": decor_value, "one": "TWO"}
decors = BaseDecoratorSet()
remain = decors.extract_decorators(message, SimpleModelSchema)
# check original is unmodified
assert "handled~decorator" in message
assert not decors.field("handled")
assert remain == message
assert not decors.to_dict()