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