100 lines
2.3 KiB
Python
100 lines
2.3 KiB
Python
import pytest
|
|
|
|
from core.Expando import Expando
|
|
|
|
|
|
def test_i_can_get_properties():
|
|
props = {"a": 10,
|
|
"b": {
|
|
"c": "value",
|
|
"d": 20
|
|
}}
|
|
dynamic = Expando(props)
|
|
|
|
assert dynamic.a == 10
|
|
assert dynamic.b.c == "value"
|
|
|
|
with pytest.raises(AttributeError):
|
|
assert dynamic.unknown == "some_value"
|
|
|
|
|
|
def test_i_can_get():
|
|
props = {"a": 10,
|
|
"b": {
|
|
"c": "value",
|
|
"d": 20
|
|
}}
|
|
dynamic = Expando(props)
|
|
|
|
assert dynamic.get("a") == 10
|
|
assert dynamic.get("b.c") == "value"
|
|
assert dynamic.get("unknown") is None
|
|
assert dynamic.get("unknown", "default") == "default"
|
|
assert dynamic.get("b.x") is None
|
|
assert dynamic.get("b.x", "default") == "default"
|
|
assert dynamic.get("b.x", None) is None
|
|
|
|
|
|
def test_i_can_get_insensitive():
|
|
props = {"A": 10,
|
|
"b": 20}
|
|
dynamic = Expando(props)
|
|
|
|
assert dynamic.geti("a") == 10
|
|
assert dynamic.geti("A") == 10
|
|
assert dynamic.geti("a.c", None) is None
|
|
with pytest.raises(AttributeError):
|
|
assert dynamic.geti("unknown") == "some_value"
|
|
|
|
|
|
def test_i_can_get_insensitive_when_the_two_entries_exist():
|
|
props = {"A": 10,
|
|
"a": 20}
|
|
dynamic = Expando(props)
|
|
assert dynamic.geti("A") == 10
|
|
assert dynamic.geti("a") == 20
|
|
|
|
|
|
def test_i_can_get_from_list():
|
|
props = {"a": [{"c": "value1", "d": 1}, {"c": "value2", "d": 2}]}
|
|
dynamic = Expando(props)
|
|
|
|
assert dynamic.get("a.c") == ["value1", "value2"]
|
|
|
|
|
|
def test_none_is_returned_when_get_from_list_and_property_does_not_exist():
|
|
props = {"a": [{"c": "value1", "d": 1},
|
|
{"a": "value2", "d": 2} # 'c' does not exist in the second row
|
|
]}
|
|
dynamic = Expando(props)
|
|
|
|
assert dynamic.get("a.c") == ["value1"]
|
|
|
|
|
|
def test_i_can_manage_none_values():
|
|
props = {"a": 10,
|
|
"b": None}
|
|
dynamic = Expando(props)
|
|
|
|
assert dynamic.get("b.c") is None
|
|
|
|
|
|
def test_i_can_manage_none_values_in_list():
|
|
props = {"a": [{"b": {"c": "value"}},
|
|
{"b": None}
|
|
]}
|
|
dynamic = Expando(props)
|
|
|
|
assert dynamic.get("a.b.c") == ["value"]
|
|
|
|
|
|
def test_i_can_add_new_properties():
|
|
props = {"a": 10,
|
|
"b": 20}
|
|
dynamic = Expando(props)
|
|
dynamic["c"] = 30
|
|
|
|
assert dynamic.a == 10
|
|
assert dynamic.b == 20
|
|
assert dynamic.c == 30
|