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

1"""Module for testing the use case "Update Training".""" 

2 

3import pytest 

4 

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 

25 

26 

27@pytest.fixture 

28def training_repo(database: Database) -> TrainingRepository: 

29 """A fixture for a training repository.""" 

30 return TrainingDbRepository(database) 

31 

32 

33@pytest.fixture 

34def coach_repo(database: Database) -> CoachRepository: 

35 """A fixture for a coach repository.""" 

36 return CoachDbRepository(database) 

37 

38 

39@pytest.fixture 

40def training_schedule_repo(database: Database) -> TrainingScheduleRepository: 

41 """A fixture for a training schema repository.""" 

42 return TrainingScheduleDbRepository(database) 

43 

44 

45@pytest.fixture 

46def team_repo(database: Database) -> TeamRepository: 

47 """A fixture for a team repository.""" 

48 return TeamDbRepository(database) 

49 

50 

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) 

96 

97 assert presenter.entity is not None, "There should be a training" 

98 assert presenter.entity.texts[0].title == "Updated Test Training"