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

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

2 

3import pytest 

4 

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 

26 

27 

28@pytest.fixture 

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

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

31 return TrainingDbRepository(database) 

32 

33 

34@pytest.fixture 

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

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

37 return CoachDbRepository(database) 

38 

39 

40@pytest.fixture 

41def training_schema_repo(database: Database) -> TrainingScheduleRepository: 

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

43 return TrainingScheduleDbRepository(database) 

44 

45 

46@pytest.fixture 

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

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

49 return TeamDbRepository(database) 

50 

51 

52@pytest.fixture 

53async def coach(make_coach_in_db) -> CoachEntity: 

54 """A fixture for a coach.""" 

55 return await make_coach_in_db() 

56 

57 

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 ) 

84 

85 

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) 

99 

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