Coverage for src/tests/modules/training/test_create_training.py: 98%
43 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 "Create Training"."""
3import pytest
5from kwai_bc_training.coaches.coach import CoachEntity
6from kwai_bc_training.coaches.coach_db_repository import CoachDbRepository
7from kwai_bc_training.coaches.coach_repository import CoachRepository
8from kwai_bc_training.create_training import CreateTraining, CreateTrainingCommand
9from kwai_bc_training.teams.team_db_repository import TeamDbRepository
10from kwai_bc_training.teams.team_repository import TeamRepository
11from kwai_bc_training.training_command import Coach
12from kwai_bc_training.trainings.training import TrainingEntity
13from kwai_bc_training.trainings.training_db_repository import TrainingDbRepository
14from kwai_bc_training.trainings.training_repository import TrainingRepository
15from kwai_bc_training.trainings.training_schedule_db_repository import (
16 TrainingScheduleDbRepository,
17)
18from kwai_bc_training.trainings.training_schedule_repository import (
19 TrainingScheduleRepository,
20)
21from kwai_core.db.database import Database
22from kwai_core.domain.presenter import EntityPresenter
23from kwai_core.domain.use_case import TextCommand
24from kwai_core.domain.value_objects.owner import Owner
25from kwai_core.domain.value_objects.timestamp import Timestamp
28@pytest.fixture
29def training_repo(database: Database) -> TrainingRepository:
30 """A fixture for a training repository."""
31 return TrainingDbRepository(database)
34@pytest.fixture
35def coach_repo(database: Database) -> CoachRepository:
36 """A fixture for a coach repository."""
37 return CoachDbRepository(database)
40@pytest.fixture
41def training_schema_repo(database: Database) -> TrainingScheduleRepository:
42 """A fixture for a training schema repository."""
43 return TrainingScheduleDbRepository(database)
46@pytest.fixture
47def team_repo(database: Database) -> TeamRepository:
48 """A fixture for a team repository."""
49 return TeamDbRepository(database)
52@pytest.fixture
53async def coach(make_coach_in_db) -> CoachEntity:
54 """A fixture for a coach."""
55 return await make_coach_in_db()
58@pytest.fixture
59async def command(make_coach_in_db, make_team_in_db) -> CreateTrainingCommand:
60 """A fixture for a training entity."""
61 coach = await make_coach_in_db()
62 team = await make_team_in_db()
63 start_date = Timestamp.create_now()
64 return CreateTrainingCommand(
65 start_date=str(start_date),
66 end_date=str(start_date.add_delta(hours=1)),
67 active=True,
68 cancelled=False,
69 location="",
70 texts=[
71 TextCommand(
72 locale="en",
73 format="md",
74 title="Test training",
75 content="This is a test",
76 summary="This is a test",
77 )
78 ],
79 coaches=[Coach(id=coach.id.value, head=True, present=False, payed=False)],
80 teams=[team.id.value],
81 schedule=None,
82 remark="Created with test_create_training",
83 )
86async def test_create_training(
87 command: CreateTrainingCommand,
88 training_repo: TrainingRepository,
89 training_schema_repo: TrainingScheduleRepository,
90 coach_repo: CoachRepository,
91 team_repo: TeamRepository,
92 owner: Owner,
93):
94 """Test the use case "Create Training"."""
95 presenter = EntityPresenter[TrainingEntity]()
96 await CreateTraining(
97 training_repo, training_schema_repo, coach_repo, team_repo, owner, presenter
98 ).execute(command)
100 assert presenter.entity is not None, "There should be a training"