import pytest from myutils.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 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