Coverage for src/tests/fixtures/training/trainings.py: 100%
49 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 factory fixtures for trainings."""
3import pytest
5from kwai_bc_training.coaches.coach import CoachEntity
6from kwai_bc_training.trainings.training import (
7 TrainingCoachEntity,
8 TrainingEntity,
9)
10from kwai_bc_training.trainings.training_db_repository import TrainingDbRepository
11from kwai_core.db.database import Database
12from kwai_core.db.uow import UnitOfWork
13from kwai_core.domain.value_objects.owner import Owner
14from kwai_core.domain.value_objects.period import Period
15from kwai_core.domain.value_objects.text import DocumentFormat, Locale, LocaleText
16from kwai_core.domain.value_objects.unique_id import UniqueId
19@pytest.fixture
20def make_text(
21 *,
22 locale: Locale | None = None,
23 format_: DocumentFormat | None = None,
24 title: str = "Training Test",
25 content: str = "This is a test training",
26 summary: str = "Test",
27 owner: Owner,
28):
29 """A factory fixture for a text."""
31 def _make_text() -> LocaleText:
32 return LocaleText(
33 title=title,
34 content=content,
35 summary=summary,
36 locale=locale or Locale.NL,
37 format=format_ or DocumentFormat.MARKDOWN,
38 author=owner,
39 )
41 return _make_text
44@pytest.fixture
45def make_training_coach(make_coach, owner: Owner):
46 """A factory fixture for a training coach."""
48 def _make_training_coach(coach: CoachEntity | None = None) -> TrainingCoachEntity:
49 if coach is None:
50 # make_coach returns a coach entity from the club module, so we need
51 # to convert it to one for the training module.
52 club_coach = make_coach()
53 coach = CoachEntity(
54 id=club_coach.id,
55 name=club_coach.name,
56 active=club_coach.active,
57 uuid=UniqueId.generate(),
58 )
59 return TrainingCoachEntity(coach=coach, owner=owner)
61 return _make_training_coach
64@pytest.fixture
65def make_training(make_text, make_training_coach):
66 """A factory fixture for a training."""
68 def _make_training(
69 text: LocaleText | None = None,
70 coach: TrainingCoachEntity | None = None,
71 period: Period | None = None,
72 active: bool = True,
73 ) -> TrainingEntity:
74 coach = coach or make_training_coach()
75 text = text or make_text()
76 period = period or Period.create_from_delta(hours=2)
77 return TrainingEntity(
78 texts=(text,),
79 coaches=frozenset((coach,)),
80 season=None,
81 period=period,
82 active=active,
83 )
85 return _make_training
88@pytest.fixture
89async def make_training_in_db(
90 request, database: Database, make_training, make_coach_in_db, owner
91):
92 """A factory fixture for a training in the database."""
93 created_entities = []
95 async def _make_training_in_db(
96 training: TrainingEntity | None = None,
97 coach: TrainingCoachEntity | None = None,
98 ) -> TrainingEntity:
99 if coach is None:
100 club_coach = await make_coach_in_db()
101 coach = TrainingCoachEntity(
102 coach=CoachEntity(
103 id=club_coach.id,
104 name=club_coach.name,
105 active=True,
106 uuid=club_coach.member.uuid,
107 ),
108 owner=owner,
109 )
110 training = training or make_training(coach=coach)
112 repo = TrainingDbRepository(database)
113 async with UnitOfWork(database):
114 training = await repo.create(training)
115 created_entities.append(training)
117 return training
119 yield _make_training_in_db
121 repo = TrainingDbRepository(database)
122 for entity in created_entities:
123 async with UnitOfWork(database):
124 await repo.delete(entity)