Coverage for src/tests/fixtures/training/training_schemas.py: 100%
32 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 fixture factories for training schedules."""
3import pytest
5from kwai_bc_training.coaches.coach import CoachEntity
6from kwai_bc_training.trainings.training_schedule import TrainingScheduleEntity
7from kwai_bc_training.trainings.training_schedule_db_repository import (
8 TrainingScheduleDbRepository,
9)
10from kwai_core.db.database import Database
11from kwai_core.db.uow import UnitOfWork
12from kwai_core.domain.value_objects.owner import Owner
13from kwai_core.domain.value_objects.time_period import TimePeriod
14from kwai_core.domain.value_objects.weekday import Weekday
17@pytest.fixture
18def make_training_schedule(owner: Owner, make_coach):
19 """A factory fixture for creating a training schedule."""
21 def _make_training_schedule(
22 name: str | None = None,
23 description: str | None = None,
24 weekday: Weekday | None = None,
25 period: TimePeriod | None = None,
26 coach: CoachEntity | None = None,
27 ) -> TrainingScheduleEntity:
28 coach = coach or make_coach()
29 return TrainingScheduleEntity(
30 name=name or "A training",
31 description=description or "A training schedule",
32 weekday=weekday or Weekday.MONDAY,
33 period=period
34 or TimePeriod.create_from_string("18:00", "19:00", "Europe/Brussels"),
35 owner=owner,
36 coaches=frozenset({coach}),
37 )
39 return _make_training_schedule
42@pytest.fixture
43async def make_training_schedule_in_db(
44 database: Database, make_training_schedule, make_coach_in_db
45):
46 """A fixture factory for a training schedule in the database."""
47 created_entities = []
49 async def _make_training_schedule_in_db(
50 training_schedule: TrainingScheduleEntity | None = None,
51 coach: CoachEntity | None = None,
52 ) -> TrainingScheduleEntity:
53 coach = coach or await make_coach_in_db()
54 training_schedule = training_schedule or make_training_schedule(coach=coach)
55 created_entities.append(training_schedule)
56 repo = TrainingScheduleDbRepository(database)
57 async with UnitOfWork(database):
58 training_schedule = await repo.create(training_schedule)
59 created_entities.append(training_schedule)
61 return training_schedule
63 yield _make_training_schedule_in_db
65 repo = TrainingScheduleDbRepository(database)
66 for entity in created_entities:
67 async with UnitOfWork(database):
68 await repo.delete(entity)