Coverage for src/tests/fixtures/club/members.py: 100%

30 statements  

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

1"""Module for defining fixtures of members.""" 

2 

3import pytest 

4 

5from kwai_bc_club.domain.member import MemberEntity 

6from kwai_bc_club.domain.person import PersonEntity 

7from kwai_bc_club.domain.value_objects import License 

8from kwai_bc_club.repositories.member_db_repository import MemberDbRepository 

9from kwai_core.db.database import Database 

10from kwai_core.db.uow import UnitOfWork 

11from kwai_core.domain.value_objects.date import Date 

12 

13 

14@pytest.fixture 

15def make_member(make_person): 

16 """A factory fixture for a member.""" 

17 

18 def _make_member_entity( 

19 *, 

20 license: License | None = None, 

21 person: PersonEntity | None = None, 

22 active: bool = True, 

23 ) -> MemberEntity: 

24 license = license or License( 

25 number="12345678", end_date=Date.today().add(years=1) 

26 ) 

27 person = person or make_person() 

28 return MemberEntity(license=license, person=person, active=active) 

29 

30 return _make_member_entity 

31 

32 

33@pytest.fixture 

34async def make_member_in_db( 

35 database: Database, 

36 make_member, 

37 make_person_in_db, 

38 make_person, 

39 make_contact_in_db, 

40 make_country_in_db, 

41 country_japan, 

42): 

43 """A fixture for a member in the database.""" 

44 created_entities: list[MemberEntity] = [] 

45 

46 async def _make_member_in_db( 

47 member: MemberEntity | None = None, 

48 ) -> MemberEntity: 

49 member = member or make_member( 

50 person=await make_person_in_db( 

51 make_person( 

52 contact=await make_contact_in_db(), 

53 nationality=await make_country_in_db(country_japan), 

54 ), 

55 ) 

56 ) 

57 repo = MemberDbRepository(database) 

58 async with UnitOfWork(database): 

59 member = await repo.create(member) 

60 

61 created_entities.append(member) 

62 return member 

63 

64 yield _make_member_in_db 

65 

66 repo = MemberDbRepository(database) 

67 for entity in created_entities: 

68 async with UnitOfWork(database): 

69 await repo.delete(entity)