@@ 107-163 (lines=57) @@ | ||
104 | return user |
|
105 | ||
106 | ||
107 | @patch('byceps.signals.shop.order_placed.send') |
|
108 | @patch('byceps.blueprints.site.shop.order.views.order_email_service') |
|
109 | def test_order( |
|
110 | order_email_service_mock, |
|
111 | order_placed_mock, |
|
112 | site_app, |
|
113 | site, |
|
114 | admin_user, |
|
115 | orderer, |
|
116 | article, |
|
117 | ): |
|
118 | assert get_article_quantity(article.id) == 5 |
|
119 | ||
120 | url = '/shop/order' |
|
121 | article_quantity_key = f'article_{article.id}' |
|
122 | form_data = { |
|
123 | **COMMON_FORM_DATA, |
|
124 | article_quantity_key: 3, |
|
125 | } |
|
126 | with http_client(site_app, user_id=orderer.id) as client: |
|
127 | response = client.post(url, data=form_data) |
|
128 | ||
129 | assert get_article_quantity(article.id) == 2 |
|
130 | ||
131 | order = Order.query.filter_by(placed_by_id=orderer.id).one() |
|
132 | assert_order(order, 'AEC-01-B00005', 1) |
|
133 | ||
134 | first_line_item = order.items[0] |
|
135 | assert_line_item( |
|
136 | first_line_item, article.id, article.price, article.tax_rate, 3, |
|
137 | ) |
|
138 | ||
139 | order_email_service_mock.send_email_for_incoming_order_to_orderer.assert_called_once_with( |
|
140 | order.id |
|
141 | ) |
|
142 | ||
143 | event = ShopOrderPlaced( |
|
144 | occurred_at=order.created_at, |
|
145 | initiator_id=orderer.id, |
|
146 | initiator_screen_name=orderer.screen_name, |
|
147 | order_id=order.id, |
|
148 | order_number=order.order_number, |
|
149 | orderer_id=orderer.id, |
|
150 | orderer_screen_name=orderer.screen_name, |
|
151 | ) |
|
152 | order_placed_mock.assert_called_once_with(None, event=event) |
|
153 | ||
154 | order_detail_page_url = f'http://www.acmecon.test/shop/orders/{order.id}' |
|
155 | ||
156 | assert_response_headers(response, order_detail_page_url) |
|
157 | ||
158 | with http_client(site_app, user_id=orderer.id) as client: |
|
159 | assert_order_detail_page_works( |
|
160 | client, order_detail_page_url, order.order_number |
|
161 | ) |
|
162 | ||
163 | order_service.delete_order(order.id) |
|
164 | ||
165 | ||
166 | @patch('byceps.signals.shop.order_placed.send') |
|
@@ 166-221 (lines=56) @@ | ||
163 | order_service.delete_order(order.id) |
|
164 | ||
165 | ||
166 | @patch('byceps.signals.shop.order_placed.send') |
|
167 | @patch('byceps.blueprints.site.shop.order.views.order_email_service') |
|
168 | def test_order_single( |
|
169 | order_email_service_mock, |
|
170 | order_placed_mock, |
|
171 | site_app, |
|
172 | site, |
|
173 | admin_user, |
|
174 | orderer, |
|
175 | article, |
|
176 | ): |
|
177 | assert get_article_quantity(article.id) == 5 |
|
178 | ||
179 | url = f'/shop/order_single/{article.id!s}' |
|
180 | form_data = { |
|
181 | **COMMON_FORM_DATA, |
|
182 | 'quantity': 1, # TODO: Test with `3` if limitation is removed. |
|
183 | } |
|
184 | with http_client(site_app, user_id=orderer.id) as client: |
|
185 | response = client.post(url, data=form_data) |
|
186 | ||
187 | assert get_article_quantity(article.id) == 4 |
|
188 | ||
189 | order = Order.query.filter_by(placed_by_id=orderer.id).one() |
|
190 | assert_order(order, 'AEC-01-B00005', 1) |
|
191 | ||
192 | first_line_item = order.items[0] |
|
193 | assert_line_item( |
|
194 | first_line_item, article.id, article.price, article.tax_rate, 1, |
|
195 | ) |
|
196 | ||
197 | order_email_service_mock.send_email_for_incoming_order_to_orderer.assert_called_once_with( |
|
198 | order.id |
|
199 | ) |
|
200 | ||
201 | event = ShopOrderPlaced( |
|
202 | occurred_at=order.created_at, |
|
203 | initiator_id=orderer.id, |
|
204 | initiator_screen_name=orderer.screen_name, |
|
205 | order_id=order.id, |
|
206 | order_number=order.order_number, |
|
207 | orderer_id=orderer.id, |
|
208 | orderer_screen_name=orderer.screen_name, |
|
209 | ) |
|
210 | order_placed_mock.assert_called_once_with(None, event=event) |
|
211 | ||
212 | order_detail_page_url = f'http://www.acmecon.test/shop/orders/{order.id}' |
|
213 | ||
214 | assert_response_headers(response, order_detail_page_url) |
|
215 | ||
216 | with http_client(site_app, user_id=orderer.id) as client: |
|
217 | assert_order_detail_page_works( |
|
218 | client, order_detail_page_url, order.order_number |
|
219 | ) |
|
220 | ||
221 | order_service.delete_order(order.id) |
|
222 | ||
223 | ||
224 | # helpers |