Coverage for src/tests/modules/training/test_get_trainings.py: 100%
35 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 testing the use case "Get Trainings"."""
3import pytest
5from kwai_bc_training.coaches.coach_db_repository import CoachDbRepository
6from kwai_bc_training.coaches.coach_repository import CoachRepository
7from kwai_bc_training.get_trainings import GetTrainings, GetTrainingsCommand
8from kwai_bc_training.trainings.training import TrainingEntity
9from kwai_bc_training.trainings.training_db_repository import TrainingDbRepository
10from kwai_bc_training.trainings.training_repository import TrainingRepository
11from kwai_bc_training.trainings.training_schedule_db_repository import (
12 TrainingScheduleDbRepository,
13)
14from kwai_bc_training.trainings.training_schedule_repository import (
15 TrainingScheduleRepository,
16)
17from kwai_core.db.database import Database
18from kwai_core.domain.presenter import CountIterableAsyncPresenter
19from kwai_core.domain.value_objects.period import Period
20from kwai_core.domain.value_objects.timestamp import Timestamp
23@pytest.fixture
24def training_repo(database: Database) -> TrainingRepository:
25 """A fixture for a training repository."""
26 return TrainingDbRepository(database)
29@pytest.fixture
30def coach_repo(database: Database) -> CoachRepository:
31 """A fixture for a coach repository."""
32 return CoachDbRepository(database)
35@pytest.fixture
36def training_schedule_repo(database: Database) -> TrainingScheduleRepository:
37 """A fixture for a training schedule repository."""
38 return TrainingScheduleDbRepository(database)
41async def test_get_active_trainings(
42 training_repo: TrainingRepository,
43 coach_repo: CoachRepository,
44 training_schedule_repo: TrainingScheduleRepository,
45 make_training_in_db,
46):
47 """Test the use case "Get Trainings"."""
48 await make_training_in_db()
49 command = GetTrainingsCommand(active=True)
50 presenter = CountIterableAsyncPresenter[TrainingEntity]()
51 await GetTrainings(
52 training_repo, coach_repo, training_schedule_repo, presenter
53 ).execute(command)
54 assert presenter.count > 0, "There should be at least one active training"
57async def test_get_year_month_trainings(
58 training_repo: TrainingRepository,
59 coach_repo: CoachRepository,
60 training_schedule_repo: TrainingScheduleRepository,
61 make_training_in_db,
62 make_training,
63):
64 """Test the use case "Get Trainings"."""
65 start_date = Timestamp.create_from_string("2024-01-01 19:00:00")
66 await make_training_in_db(
67 make_training(period=Period.create_from_delta(start_date, hours=2))
68 )
69 command = GetTrainingsCommand(year=2024, month=1)
70 presenter = CountIterableAsyncPresenter[TrainingEntity]()
71 await GetTrainings(
72 training_repo, coach_repo, training_schedule_repo, presenter
73 ).execute(command)
74 assert presenter.count > 0, "There should be at least one training in 01/2024."