Coverage for src/tests/core/domain/test_dataclass_entity.py: 100%
27 statements
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Module for testing the dataclass Entity."""
3from dataclasses import dataclass
4from typing import ClassVar, Type
6import pytest
8from kwai_bc_club.domain.value_objects import Birthdate
9from kwai_core.domain.entity import DataclassEntity
10from kwai_core.domain.value_objects.date import Date
11from kwai_core.domain.value_objects.identifier import IntIdentifier
14class UserIdentifier(IntIdentifier):
15 """An identifier for a user entity."""
18@dataclass(frozen=True, eq=False, kw_only=True, slots=True)
19class UserEntity(DataclassEntity):
20 """A sample entity class."""
22 ID: ClassVar[Type] = UserIdentifier
24 name: str
25 birthdate: Birthdate
28def test_new_entity() -> None:
29 """Test creating a new entity."""
30 entity = UserEntity(
31 name="Franky",
32 birthdate=Birthdate(date=Date.create(1969, 3, 9)),
33 )
34 assert entity.id.is_empty(), "The identifier should be empty."
37@pytest.fixture
38def user_entity() -> UserEntity:
39 """Fixture to create a user entity."""
40 return UserEntity(
41 id=UserIdentifier(1),
42 name="Franky",
43 birthdate=Birthdate(date=Date.create(1969, 3, 9)),
44 )
47def test_create(user_entity: UserEntity):
48 """Test creating an entity."""
49 assert user_entity.id.value == 1, "The id should be 2"
50 assert user_entity.name == "Franky", "The name should be 'Franky'"
51 assert user_entity.birthdate.date.year == 1969, "Year of birth should be 1969"
54def test_change_id_not_allowed(user_entity: UserEntity):
55 """Test that changing the id is not allowed."""
56 with pytest.raises(ValueError):
57 user_entity.set_id(UserIdentifier(2))
60def test_shallow_dict(user_entity: UserEntity) -> None:
61 """Test creating a shallow dictionary."""
62 d = user_entity.shallow_dict()
63 assert d == {
64 "id": UserIdentifier(1),
65 "name": "Franky",
66 "birthdate": user_entity.birthdate,
67 "traceable_time": user_entity.traceable_time,
68 }