Пример #1
0
def test_dict_working(dict_type):
    class TestModel(middle.Model):
        ratings = middle.field(type=dict_type[str, float])

    inst = TestModel(ratings={
        "contender1": 4.2,
        "contender2": 3.9,
        "contender3": 3.4
    })

    assert isinstance(inst, TestModel)
    assert len(inst.ratings.keys()) == 3
    assert "contender1" in inst.ratings.keys()
    assert "contender2" in inst.ratings.keys()
    assert "contender3" in inst.ratings.keys()
    assert 4.2 in inst.ratings.values()
    assert 3.9 in inst.ratings.values()
    assert 3.4 in inst.ratings.values()
    assert inst.ratings.get("contender1") == 4.2
    assert inst.ratings.get("contender2") == 3.9
    assert inst.ratings.get("contender3") == 3.4

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("ratings", None) == {
        "contender1": 4.2,
        "contender2": 3.9,
        "contender3": 3.4,
    }
Пример #2
0
def test_enum_working():
    @unique
    class TestStrEnum(str, Enum):
        TEST_1 = "TEST1"
        TEST_2 = "TEST2"
        TEST_3 = "TEST3"

    @unique
    class TestIntEnum(IntEnum):
        TEST_1 = 1
        TEST_2 = 2
        TEST_3 = 3

    class TestModel(middle.Model):
        str_enum = middle.field(type=TestStrEnum)
        int_enum = middle.field(type=TestIntEnum)

    inst = TestModel(str_enum="TEST2", int_enum=3)

    assert isinstance(inst, TestModel)
    assert inst.str_enum == TestStrEnum.TEST_2
    assert inst.int_enum == TestIntEnum.TEST_3

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("str_enum", None) == "TEST2"
    assert data.get("int_enum", None) == 3
Пример #3
0
def test_union_working_with_none(val, expected):
    class TestModel(middle.Model):
        value = middle.field(type=Union[str, int, float, None])

    inst = TestModel(value=val)
    assert isinstance(inst, TestModel)
    assert inst.value == expected

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("value", {}) == expected
Пример #4
0
def test_optional_working(value, expected):
    class TestModel(middle.Model):
        name = middle.field(type=Optional[str])

    inst = TestModel(name=value)
    assert isinstance(inst, TestModel)
    assert inst.name == expected

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("name", {}) == expected
Пример #5
0
def test_decimal_working():
    class TestModel(middle.Model):
        value = middle.field(type=Decimal)

    inst = TestModel(value="5")
    assert isinstance(inst, TestModel)
    assert inst.value == Decimal("5.0")

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("value", None) == 5.0
Пример #6
0
def test_union_one_parameter(val, expected, type_):
    class TestModel(middle.Model):
        value = middle.field(type=Union[type_])

    inst = TestModel(value=val)
    assert isinstance(inst, TestModel)
    assert inst.value == expected

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("value", None) == expected
Пример #7
0
def test_int_working():
    class TestModel(middle.Model):
        const = middle.field(type=int)

    inst = TestModel(const=42)

    assert isinstance(inst, TestModel)
    assert inst.const == 42

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("const", None) == 42
Пример #8
0
def test_datetime_working():
    class TestModel(middle.Model):
        ts = middle.field(type=datetime)

    inst = TestModel(ts="2018-06-18T13:30:00.123456+00:00")

    assert isinstance(inst, TestModel)
    assert inst.ts == datetime(2018, 6, 18, 13, 30, 0, 123456, timezone.utc)

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("ts", None) == "2018-06-18T13:30:00.123456+00:00"
Пример #9
0
def test_str_working():
    class TestModel(middle.Model):
        name = middle.field(type=str)

    inst = TestModel(name="some str")

    assert isinstance(inst, TestModel)
    assert inst.name == "some str"

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("name", None) == "some str"
Пример #10
0
def test_date_working():
    class TestModel(middle.Model):
        created_on = middle.field(type=date)

    inst = TestModel(created_on="2018-06-18")

    assert isinstance(inst, TestModel)
    assert inst.created_on == date(2018, 6, 18)

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("created_on", None) == "2018-06-18"
Пример #11
0
def test_set_working(set_type):
    class TestModel(middle.Model):
        names = middle.field(type=set_type[str])

    inst = TestModel(names=["foo", "bar"])

    assert isinstance(inst, TestModel)
    assert inst.names == {"bar", "foo"}

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("names", None) == {"bar", "foo"}
Пример #12
0
def test_tuple_working():
    class TestModel(middle.Model):
        value = middle.field(type=Tuple[str, int, float])

    inst = TestModel(value=["hello", 1, "-.4"])
    assert isinstance(inst, TestModel)
    assert inst.value == ("hello", 1, -0.4)

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("value", None) == ("hello", 1, -0.4)

    with pytest.raises(ValueError):
        TestModel(value=["hello", 1, "-.4", "world"])
Пример #13
0
def test_bool_working():
    class TestModel(middle.Model):
        broken = middle.field(type=bool)

    inst = TestModel(broken=True)

    assert isinstance(inst, TestModel)
    assert inst.broken is True

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("broken", False) is True

    assert TestModel({"broken": True}).broken is True
Пример #14
0
def test_work_with_new_type():
    class TestModel(middle.Model):
        value = middle.field(type=Foo)

    inst = TestModel(value="hello")
    assert isinstance(inst, TestModel)
    assert isinstance(inst.value, Foo)
    assert inst.value.foo == "hello"

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert data.get("value", None) == "hello"

    assert TestModel(value="world").value.foo == "world"
    assert TestModel(value=Foo(foo="shh")).value.foo == "shh"
Пример #15
0
def test_attr_class_union():
    @attr.s
    class AttrModel:
        name = attr.ib(type=str)
        age = attr.ib(type=int)

    class TestModel(middle.Model):
        agent = middle.field(type=Optional[AttrModel])

    inst = TestModel(agent=AttrModel(name="Foo", age=21))
    assert isinstance(inst, TestModel)

    inst = TestModel(agent=None)
    assert inst.agent is None

    assert middle.asdict(inst) == {"agent": None}
Пример #16
0
def test_instance_to_dict():
    game = Game(
        name="Cities: Skylines",
        platform="PC",
        score=9.0,
        resolution_tested="1920x1080",
        genre=["Simulators", "City Building"],
        rating={"IGN": 8.5, "Gamespot": 8.0, "Steam": 4.5},
        players=["Flux", "strictoaster"],
        language=1,
        awesome_city=City(name="Blumenau", region=CityRegionEnum.TEMPERATE),
    )

    data = middle.asdict(game)
    assert isinstance(data, dict)
    assert isinstance(data.get("awesome_city", None), dict)
    assert data.get("awesome_city").get("region") == "TEMPERATE"
Пример #17
0
def test_inheritance():
    @unique
    class CityRegionEnum(str, Enum):
        TROPICAL = "TROPICAL"
        TEMPERATE = "TEMPERATE"
        BOREAL = "BOREAL"

    class BaseCity(middle.Model):
        name = middle.field(type=str)
        region = middle.field(type=CityRegionEnum)

    class City(BaseCity):
        population = middle.field(type=int)
        latitude = middle.field(type=float)
        longitude = middle.field(type=float)

    base_city = BaseCity(name="London", region="TEMPERATE")

    city = City(
        name="London",
        region="TEMPERATE",
        population=8787892,
        latitude=51.507222,
        longitude=-0.1275,
    )

    assert isinstance(base_city, BaseCity)
    assert isinstance(city, BaseCity)
    assert isinstance(city, City)

    assert isinstance(city.name, str)
    assert isinstance(city.region, CityRegionEnum)
    assert isinstance(city.population, int)
    assert isinstance(city.latitude, float)
    assert isinstance(city.longitude, float)

    data = middle.asdict(city)

    assert isinstance(data.get("name"), str)
    assert isinstance(data.get("region"), str)
    assert isinstance(data.get("population"), int)
    assert isinstance(data.get("latitude"), float)
    assert isinstance(data.get("longitude"), float)
Пример #18
0
def test_attr_class():
    @attr.s(cmp=False)
    class AttrModel:
        name = attr.ib(type=str)
        age = attr.ib(type=int)

    class TestModel(middle.Model):
        people = middle.field(type=List[AttrModel])

    inst = TestModel(
        people=[AttrModel(name="Foo", age=21),
                AttrModel(name="Bar", age=42)])
    assert isinstance(inst, TestModel)
    assert isinstance(inst.people, list)
    assert isinstance(inst.people[0], AttrModel)
    assert isinstance(inst.people[1], AttrModel)

    data = middle.asdict(inst)
    assert isinstance(data, dict)
    assert isinstance(data.get("people"), list)
    assert isinstance(data.get("people")[0], dict)
    assert isinstance(data.get("people")[1], dict)
Пример #19
0
def test_model_working():
    class ColorEnum(IntEnum):
        RED = 1
        GREEN = 2
        BLUE = 3
        YELLOW = 4
        PINK = 5
        BLACK = 6

    class ChildModel(middle.Model):
        name = middle.field(type=str)
        age = middle.field(type=int)
        favourite_color = middle.field(type=ColorEnum)

    class PersonModel(middle.Model):
        name = middle.field(type=str)
        age = middle.field(type=int)
        children = middle.field(type=List[ChildModel])

    class CompanyModel(middle.Model):
        name = middle.field(type=str)
        manager = middle.field(type=PersonModel)
        employees = middle.field(type=List[PersonModel])

    inst = CompanyModel({
        "name":
        "My Company Ltd",
        "manager": {
            "name": "John",
            "age": 42,
            "children": []
        },
        "employees": [
            {
                "name":
                "Jane",
                "age":
                35,
                "children": [
                    {
                        "name": "Clarice",
                        "age": 5,
                        "favourite_color": 4
                    },
                    {
                        "name": "Robert",
                        "age": 8,
                        "favourite_color": 1
                    },
                ],
            },
            {
                "name": "Carl",
                "age": 22,
                "children": []
            },
        ],
    })

    assert isinstance(inst, CompanyModel)
    assert isinstance(inst.manager, PersonModel)
    assert isinstance(inst.employees[0], PersonModel)
    assert isinstance(inst.employees[1], PersonModel)
    assert isinstance(inst.employees[0].children[0], ChildModel)
    assert isinstance(inst.employees[0].children[1], ChildModel)

    assert inst.name == "My Company Ltd"
    assert inst.manager.name == "John"
    assert inst.manager.age == 42
    assert inst.manager.children == []
    assert inst.employees[0].name == "Jane"
    assert inst.employees[0].age == 35
    assert inst.employees[0].children[0].name == "Clarice"
    assert inst.employees[0].children[0].age == 5
    assert inst.employees[0].children[0].favourite_color == ColorEnum.YELLOW
    assert inst.employees[0].children[1].name == "Robert"
    assert inst.employees[0].children[1].age == 8
    assert inst.employees[0].children[1].favourite_color == ColorEnum.RED
    assert inst.employees[1].name == "Carl"
    assert inst.employees[1].age == 22
    assert inst.employees[1].children == []

    data = middle.asdict(inst)

    assert isinstance(data, dict)
    assert (data.get("employees")[0].get("children")[0].get("favourite_color")
            == 4)
Пример #20
0
def test_middle():
    game = GameModel(**MODEL_INSTANCE)
    assert isinstance(game, GameModel)
    assert isinstance(game.awesome_city, CityModel)
    p = middle.asdict(game)
    assert isinstance(p, dict)
Пример #21
0
def test_middle():
    p = middle.asdict(MODEL_INSTANCE)
    assert isinstance(p, dict)
    game = Game(**p)
    assert isinstance(game, Game)
    assert isinstance(game.awesome_city, City)