1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
from dataclasses import dataclass, fields, field
from typing import Optional
import pytest
from dacite.dataclasses import get_default_value_for_field, DefaultValueNotFoundError, is_frozen
def test_get_default_value_for_field_with_default_value():
@dataclass
class X:
i: int = 1
dataclass_field = fields(X)[0]
value = get_default_value_for_field(field=dataclass_field, type_=dataclass_field.type)
assert value == 1
def test_get_default_value_for_field_with_default_factory():
@dataclass
class X:
i: int = field(default_factory=lambda: 1)
dataclass_field = fields(X)[0]
value = get_default_value_for_field(field=dataclass_field, type_=dataclass_field.type)
assert value == 1
def test_get_default_value_for_optional_field():
@dataclass
class X:
i: Optional[int]
dataclass_field = fields(X)[0]
value = get_default_value_for_field(field=dataclass_field, type_=dataclass_field.type)
assert value is None
def test_get_default_value_for_field_without_default_value():
@dataclass
class X:
i: int
dataclass_field = fields(X)[0]
with pytest.raises(DefaultValueNotFoundError):
get_default_value_for_field(field=dataclass_field, type_=dataclass_field.type)
def test_is_frozen_with_frozen_dataclass():
@dataclass(frozen=True)
class X:
pass
assert is_frozen(X)
def test_is_frozen_with_non_frozen_dataclass():
@dataclass(frozen=False)
class X:
pass
assert not is_frozen(X)
|