"""Tests for the playlist.data.base module.""" import dataclasses import datetime import typing import marshmallow import pytest from playlist.data import base @dataclasses.dataclass class Dummy(base.BaseData): """Dummy class for tests.""" name: str some_id: int calc: float flag: bool modified: datetime.datetime @pytest.fixture def dummyannotations() -> dict[str, typing.Any]: """Make a dummy annotation dict for testing.""" return { "name": str, "some_id": int, "calc": float, "flag": bool, "modified": str, } @pytest.fixture def modified_date() -> datetime.datetime: """Make a reusable datetime for testing.""" return datetime.datetime.now() @pytest.fixture def dummydict(modified_date: datetime.datetime) -> dict[str, typing.Any]: """Make a dummy dictionary for testing.""" return { "name": "Something", "some_id": 1, "calc": 0.1, "flag": True, "modified": "T".join(str(modified_date).split(" ")), } @pytest.fixture def dummyobj(modified_date: datetime.datetime) -> Dummy: """Make a dummy object for testing.""" return Dummy( name="Something", some_id=1, calc=0.1, flag=True, modified=modified_date, ) def test_schema() -> None: """Validate that .Schema works.""" result = isinstance(Dummy.Schema, marshmallow.Schema) assert result def test_dict(dummyannotations: dict[str, typing.Any]) -> None: """Validate that .Dict works.""" result = Dummy.Dict.__annotations__ == dummyannotations assert result def test_load(dummydict: base.DataDict, dummyobj: Dummy) -> None: """Validate that .load() works.""" result = Dummy.load(dummydict) assert result == dummyobj def test_dump(dummydict: dict[str, typing.Any], dummyobj: Dummy) -> None: """Validate that .dump() works.""" result = dummyobj.dump() assert result == dummydict