Coverage for app/tests/delivery_fee/calculation_transformers/test_rush_hour_fee_transformer.py: 100%

49 statements  

« prev     ^ index     » next       coverage.py v7.4.1, created at 2024-11-27 09:26 +0000

1import pytest 

2from app.delivery_fee.models import DeliveryFee, OrderInfo 

3from app.delivery_fee.fee_transformers import ( 

4 RushHourFeeTransformer, 

5) 

6from app.delivery_fee import settings as settings 

7 

8 

9@pytest.fixture 

10def rush_hour_fee_transformer(): 

11 return RushHourFeeTransformer(settings.FRIDAY_RUSH_HOUR_CONFIG_OPTIONS) 

12 

13 

14def test__friday_rush_hour_fee_transformer__no_surcharge_applied(rush_hour_fee_transformer: RushHourFeeTransformer): 

15 current_fee = DeliveryFee(delivery_fee=3e2) 

16 expected_fee = current_fee + 0 

17 

18 order_info = OrderInfo( 

19 cart_value=0, 

20 delivery_distance=0, 

21 number_of_items=0, 

22 time="2024-01-30T13:00:00Z" # Not Friday and not rush hour 

23 ) 

24 delivery_fee = rush_hour_fee_transformer.transform( 

25 order_info, 

26 current_fee 

27 ) 

28 

29 # Delivery time is not Friday and not in rush hour range, so no surcharge is applied. 

30 assert delivery_fee == expected_fee 

31 

32 

33def test__friday_rush_hour_fee_transformer__no_surcharge_applied_for_different_day(rush_hour_fee_transformer: RushHourFeeTransformer): 

34 current_fee = DeliveryFee(delivery_fee=3e2) 

35 expected_fee = current_fee 

36 

37 order_info = OrderInfo( 

38 cart_value=0, 

39 delivery_distance=0, 

40 number_of_items=0, 

41 time="2024-01-30T16:00:00Z" # Not Friday but in rush hour range 

42 ) 

43 delivery_fee = rush_hour_fee_transformer.transform( 

44 order_info, 

45 current_fee 

46 ) 

47 

48 # Delivery time is not Friday but in the range of rush hour, 

49 # so no surcharge should not be applied. 

50 assert delivery_fee == expected_fee 

51 

52 

53def test__friday_rush_hour_fee_transformer__no_surcharge_applied_for_not_rush(rush_hour_fee_transformer: RushHourFeeTransformer): 

54 current_fee = DeliveryFee(delivery_fee=3e2) 

55 expected_fee = current_fee + 0 

56 

57 order_info = OrderInfo( 

58 cart_value=0, 

59 delivery_distance=0, 

60 number_of_items=0, 

61 time="2024-01-26T13:00:00Z" 

62 ) 

63 delivery_fee = rush_hour_fee_transformer.transform( 

64 order_info, 

65 current_fee 

66 ) 

67 

68 # Delivery time is Friday but not rush hour, 

69 # so surcharge should not be applied. 

70 assert delivery_fee == expected_fee 

71 

72 

73def test__friday_rush_hour_fee_transformer__surcharge_applied_in_range(rush_hour_fee_transformer: RushHourFeeTransformer): 

74 current_fee = DeliveryFee(delivery_fee=3e2) 

75 expected_fee = current_fee * settings.FRIDAY_RUSH_HOUR_CONFIG_OPTIONS.rush_hour_fee_factor 

76 

77 order_info = OrderInfo( 

78 cart_value=5e2, 

79 delivery_distance=0, 

80 number_of_items=0, 

81 time="2024-01-26T15:00:00Z" # Friday and in rush hour range 

82 ) 

83 delivery_fee = rush_hour_fee_transformer.transform( 

84 order_info, 

85 current_fee 

86 ) 

87 # Delivery time is Friday but not rush hour, 

88 # so surcharge should not be applied. 

89 assert delivery_fee == expected_fee 

90 

91 

92def test__friday_rush_hour_fee_transformer__surcharge_applied_for_rush_hour_end(rush_hour_fee_transformer: RushHourFeeTransformer): 

93 current_fee = DeliveryFee(delivery_fee=3e2) 

94 expected_fee = current_fee * settings.FRIDAY_RUSH_HOUR_CONFIG_OPTIONS.rush_hour_fee_factor 

95 

96 order_info = OrderInfo( 

97 cart_value=5e2, 

98 delivery_distance=0, 

99 number_of_items=0, 

100 time="2024-01-26T19:59:59Z" # Friday and in rush hour range 

101 ) 

102 delivery_fee = rush_hour_fee_transformer.transform( 

103 order_info, 

104 current_fee 

105 ) 

106 

107 # Delivery time is Friday and rush hour ends at 7:59:59 PM, 

108 # so surcharge should be applied. 

109 assert delivery_fee == expected_fee 

110 

111 

112def test__friday_rush_hour_fee_transformer__surcharge_applied_for_rush_hour_start(rush_hour_fee_transformer: RushHourFeeTransformer): 

113 current_fee = DeliveryFee(delivery_fee=3e2) 

114 expected_fee = current_fee * settings.FRIDAY_RUSH_HOUR_CONFIG_OPTIONS.rush_hour_fee_factor 

115 

116 order_info = OrderInfo( 

117 cart_value=0, 

118 delivery_distance=0, 

119 number_of_items=0, 

120 time="2024-01-26T15:00:00Z" # Friday and in rush hour range 

121 ) 

122 

123 delivery_fee = rush_hour_fee_transformer.transform( 

124 order_info, 

125 current_fee 

126 ) 

127 # Delivery time is Friday and start of rush hour is at 3:00:00 PM, 

128 # so surcharge should be applied. 

129 assert delivery_fee == expected_fee 

130 

131 

132def test__friday_rush_hour_fee_transformer__no_surcharge_applied_for_rush_hour_after_rush_hour_end(rush_hour_fee_transformer: RushHourFeeTransformer): 

133 current_fee = DeliveryFee(delivery_fee=3e2) 

134 expected_fee = current_fee + 0 

135 

136 order_info = OrderInfo( 

137 cart_value=0, 

138 delivery_distance=0, 

139 number_of_items=0, 

140 time="2024-01-26T20:00:00Z" # Friday and in rush hour range 

141 ) 

142 

143 delivery_fee = rush_hour_fee_transformer.transform( 

144 order_info, 

145 current_fee 

146 ) 

147 # Delivery time is Friday and start of rush hour is at 3:00:00 PM, 

148 # so surcharge should be applied. 

149 assert delivery_fee == expected_fee