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
« 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
9@pytest.fixture
10def rush_hour_fee_transformer():
11 return RushHourFeeTransformer(settings.FRIDAY_RUSH_HOUR_CONFIG_OPTIONS)
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
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 )
29 # Delivery time is not Friday and not in rush hour range, so no surcharge is applied.
30 assert delivery_fee == expected_fee
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
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 )
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
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
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 )
68 # Delivery time is Friday but not rush hour,
69 # so surcharge should not be applied.
70 assert delivery_fee == expected_fee
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
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
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
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 )
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
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
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 )
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
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
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 )
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