You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
995 B

import pytest
from disco.types.base import Model, Field, cached_property, text
@pytest.fixture
def model():
class TestModel(Model):
a = Field(int)
b = Field(int)
@cached_property
def value(self):
return self.a + self.b
return TestModel
def test_cached_property(model):
inst = model(a=1, b=3)
assert inst.value == 4
inst.a = 2
assert inst.value == 4
def test_cached_property_clear_on_update(model):
inst = model(a=1, b=3)
assert inst.value == 4
inst.inplace_update(model(a=2, b=3))
assert inst.value == 5
def test_defaults():
class TestModel(Model):
a = Field(int, default=None)
b = Field(int, default=0)
model = TestModel()
assert model.a is None
assert model.b == 0
def test_text_casting():
class TestModel(Model):
a = Field(text)
model = TestModel({'a': 1})
assert model.a == '1'
model = TestModel({'a': {}})
assert model.a == '{}'