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

1"""Module for testing the dataclass Entity.""" 

2 

3from dataclasses import dataclass 

4from typing import ClassVar, Type 

5 

6import pytest 

7 

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 

12 

13 

14class UserIdentifier(IntIdentifier): 

15 """An identifier for a user entity.""" 

16 

17 

18@dataclass(frozen=True, eq=False, kw_only=True, slots=True) 

19class UserEntity(DataclassEntity): 

20 """A sample entity class.""" 

21 

22 ID: ClassVar[Type] = UserIdentifier 

23 

24 name: str 

25 birthdate: Birthdate 

26 

27 

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." 

35 

36 

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 ) 

45 

46 

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" 

52 

53 

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)) 

58 

59 

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 }