Coverage for src/tests/modules/training/trainings/test_training_db_query.py: 100%

56 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2024-01-01 00:00 +0000

1"""Module for testing TrainingDbQuery.""" 

2 

3from datetime import time 

4 

5import pytest 

6 

7from kwai_bc_training.coaches.coach import CoachEntity 

8from kwai_bc_training.teams.team import TeamEntity 

9from kwai_bc_training.trainings.training import TrainingIdentifier 

10from kwai_bc_training.trainings.training_db_query import TrainingDbQuery 

11from kwai_bc_training.trainings.training_schedule import ( 

12 TrainingScheduleEntity, 

13 TrainingScheduleIdentifier, 

14) 

15from kwai_core.db.database import Database 

16from kwai_core.domain.value_objects.identifier import IntIdentifier 

17from kwai_core.domain.value_objects.name import Name 

18from kwai_core.domain.value_objects.owner import Owner 

19from kwai_core.domain.value_objects.time_period import TimePeriod 

20from kwai_core.domain.value_objects.timestamp import Timestamp 

21from kwai_core.domain.value_objects.unique_id import UniqueId 

22from kwai_core.domain.value_objects.weekday import Weekday 

23 

24 

25pytestmark = pytest.mark.db 

26 

27 

28async def test_filter_by_id(database: Database): 

29 """Test filtering on id.""" 

30 query = TrainingDbQuery(database) 

31 query.filter_by_id(TrainingIdentifier(1)) 

32 

33 count = await query.count() 

34 assert count >= 0, "There should be 0 or more trainings." 

35 

36 

37async def test_filter_by_year(database: Database): 

38 """Test filtering on id.""" 

39 query = TrainingDbQuery(database) 

40 query.filter_by_year_month(2022) 

41 

42 count = await query.count() 

43 assert count >= 0, "There should be 0 or more trainings." 

44 

45 

46async def test_filter_by_year_month(database: Database): 

47 """Test filtering on id.""" 

48 query = TrainingDbQuery(database) 

49 query.filter_by_year_month(2022, 1) 

50 

51 count = await query.count() 

52 assert count >= 0, "There should be 0 or more trainings." 

53 

54 

55async def test_filter_by_dates(database: Database): 

56 """Test filtering on dates.""" 

57 query = TrainingDbQuery(database) 

58 query.filter_by_dates(Timestamp.create_now(), Timestamp.create_with_delta(days=1)) 

59 count = await query.count() 

60 assert count >= 0, "There should be 0 or more trainings." 

61 

62 

63async def test_filter_by_coach(database: Database): 

64 """Test filtering on coach.""" 

65 query = TrainingDbQuery(database) 

66 query.filter_by_coach( 

67 CoachEntity( 

68 id=IntIdentifier(1), 

69 name=Name(first_name="Jigoro", last_name="Kano"), 

70 active=True, 

71 ) 

72 ) 

73 count = await query.count() 

74 assert count >= 0, "There should be 0 or more trainings." 

75 

76 

77async def test_filter_by_team(database: Database): 

78 """Test filtering on team.""" 

79 query = TrainingDbQuery(database) 

80 query.filter_by_team(TeamEntity(id=IntIdentifier(1), name="U18")) 

81 count = await query.count() 

82 assert count >= 0, "There should be 0 or more trainings." 

83 

84 

85async def test_filter_by_schema(database: Database): 

86 """Test filtering on a training schema.""" 

87 query = TrainingDbQuery(database) 

88 query.filter_by_training_schedule( 

89 TrainingScheduleEntity( 

90 id=TrainingScheduleIdentifier(1), 

91 name="Test", 

92 description="Test", 

93 weekday=Weekday.MONDAY, 

94 owner=Owner( 

95 id=IntIdentifier(1), 

96 uuid=UniqueId.generate(), 

97 name=Name(first_name="Jigoro", last_name="Kano"), 

98 ), 

99 period=TimePeriod(start=time(hour=20), end=time(hour=21)), 

100 ) 

101 ) 

102 count = await query.count() 

103 assert count >= 0, "There should be 0 or more trainings." 

104 

105 

106async def test_filter_active(database: Database): 

107 """Test filtering only active trainings.""" 

108 query = TrainingDbQuery(database) 

109 query.filter_active() 

110 

111 count = await query.count() 

112 assert count >= 0, "There should be 0 or more trainings."