Code Duplication    Length = 56-57 lines in 2 locations

tests/integration/blueprints/site/shop/order/test_views.py 2 locations

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