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
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Module for defining fixtures of members."""
3import pytest
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
14@pytest.fixture
15def make_member(make_person):
16 """A factory fixture for a member."""
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)
30 return _make_member_entity
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] = []
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)
61 created_entities.append(member)
62 return member
64 yield _make_member_in_db
66 repo = MemberDbRepository(database)
67 for entity in created_entities:
68 async with UnitOfWork(database):
69 await repo.delete(entity)