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

1"""Module for testing the use case "Get Trainings".""" 

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.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 

21 

22 

23@pytest.fixture 

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

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

26 return TrainingDbRepository(database) 

27 

28 

29@pytest.fixture 

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

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

32 return CoachDbRepository(database) 

33 

34 

35@pytest.fixture 

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

37 """A fixture for a training schedule repository.""" 

38 return TrainingScheduleDbRepository(database) 

39 

40 

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" 

55 

56 

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."