Coverage for src/tests/modules/club/test_get_members.py: 100%

39 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2024-01-01 00:00 +0000

1"""Module for testing the use case 'Get Members'.""" 

2 

3import pytest 

4 

5from kwai_bc_club.domain.member import MemberEntity 

6from kwai_bc_club.domain.value_objects import License 

7from kwai_bc_club.get_members import GetMembers, GetMembersCommand 

8from kwai_bc_club.repositories.member_db_repository import MemberDbRepository 

9from kwai_bc_club.repositories.member_repository import MemberRepository 

10from kwai_core.db.database import Database 

11from kwai_core.domain.presenter import AsyncPresenter, IterableResult 

12from kwai_core.domain.value_objects.date import Date 

13 

14 

15class DummyPresenter(AsyncPresenter[IterableResult[MemberEntity]]): 

16 """A dummy presenter for checking the use case result.""" 

17 

18 def __init__(self): 

19 super().__init__() 

20 self._count = 0 

21 

22 @property 

23 def count(self): 

24 """Return count.""" 

25 return self._count 

26 

27 async def present(self, use_case_result: IterableResult[MemberEntity]) -> None: 

28 """Process the result of the use case.""" 

29 self._count += 1 

30 

31 

32@pytest.fixture 

33def member_repo(database: Database) -> MemberRepository: 

34 """A fixture for a member repository.""" 

35 return MemberDbRepository(database) 

36 

37 

38async def test_get_members(member_repo: MemberRepository, make_member_in_db): 

39 """Test get members.""" 

40 await make_member_in_db() 

41 command = GetMembersCommand() 

42 presenter = DummyPresenter() 

43 await GetMembers(member_repo, presenter).execute(command) 

44 assert presenter.count > 0, "There should be at least one member" 

45 

46 

47async def test_get_members_with_license_date( 

48 member_repo: MemberRepository, make_member, make_member_in_db, make_person_in_db 

49): 

50 """Test get members with a license date.""" 

51 await make_member_in_db( 

52 make_member( 

53 license=License(number="0123456789", end_date=Date.create(2023, 2, 28)), 

54 person=await make_person_in_db(), 

55 ) 

56 ) 

57 command = GetMembersCommand(license_end_year=2023, license_end_month=2) 

58 presenter = DummyPresenter() 

59 await GetMembers(member_repo, presenter).execute(command) 

60 assert presenter.count == 1, "There should only be one member" 

61 

62 

63async def test_get_all_members( 

64 member_repo: MemberRepository, make_member, make_member_in_db, make_person_in_db 

65): 

66 """Test get members to include inactive members.""" 

67 await make_member_in_db( 

68 make_member( 

69 active=False, 

70 person=await make_person_in_db(), 

71 ) 

72 ) 

73 command = GetMembersCommand(active=False) 

74 presenter = DummyPresenter() 

75 await GetMembers(member_repo, presenter).execute(command) 

76 assert presenter.count > 0, "There should be at least one inactive member"