|
10 | 10 |
|
11 | 11 |
|
12 | 12 | import os
|
| 13 | +import io |
13 | 14 | import time
|
| 15 | +from typing import Any |
14 | 16 | import arrow
|
15 | 17 | import celery
|
16 | 18 | import shutil
|
|
20 | 22 | from unittest import mock
|
21 | 23 | from copy import deepcopy
|
22 | 24 | from base64 import b64encode
|
23 |
| -from datetime import datetime, timedelta, date |
24 | 25 | from os.path import basename
|
| 26 | +from datetime import datetime, timedelta, date |
| 27 | +from quart.datastructures import FileStorage |
25 | 28 | from re import findall
|
26 | 29 | from inspect import isawaitable
|
27 | 30 | from urllib.parse import urlparse
|
@@ -82,10 +85,11 @@ async def expect_status_in(response, codes):
|
82 | 85 |
|
83 | 86 | assert response.status_code in [
|
84 | 87 | int(code) for code in codes
|
85 |
| - ], "expected on of {expected}, got {code}, reason={reason}".format( |
| 88 | + ], "expected one of {expected}, got {code}, reason={reason}, url='{requested_path}'".format( |
86 | 89 | code=response.status_code,
|
87 | 90 | expected=codes,
|
88 | 91 | reason=(await response.get_data()).decode("utf-8"),
|
| 92 | + requested_path=response.request_path, |
89 | 93 | )
|
90 | 94 |
|
91 | 95 |
|
@@ -491,12 +495,25 @@ def format_items(items):
|
491 | 495 | return ",\n".join(output)
|
492 | 496 |
|
493 | 497 |
|
| 498 | +async def delete_entries_for(context, resource: str) -> None: |
| 499 | + """ |
| 500 | + Attempts to remove all items from the resources MongoDB and/or Elastic. |
| 501 | + First tries with async, otherwise it falls back to sync resources. |
| 502 | + """ |
| 503 | + |
| 504 | + async with context.app.test_request_context(context.app.config["URL_PREFIX"]): |
| 505 | + try: |
| 506 | + async_app = context.app.async_app |
| 507 | + await async_app.resources.get_resource_service(resource).delete_many({}) |
| 508 | + except KeyError: |
| 509 | + get_resource_service(resource).delete_action() |
| 510 | + |
| 511 | + |
494 | 512 | @given('empty "{resource}"')
|
495 | 513 | @async_run_until_complete
|
496 | 514 | async def step_impl_given_empty(context, resource):
|
497 | 515 | if not is_user_resource(resource):
|
498 |
| - async with context.app.test_request_context(context.app.config["URL_PREFIX"]): |
499 |
| - get_resource_service(resource).delete_action() |
| 516 | + await delete_entries_for(context, resource) |
500 | 517 |
|
501 | 518 |
|
502 | 519 | @given('"{resource}"')
|
@@ -1230,15 +1247,28 @@ async def when_upload_patch_dictionary(context):
|
1230 | 1247 | async def upload_file(context, dest, filename, file_field, extra_data=None, method="post", user_headers=None):
|
1231 | 1248 | if user_headers is None:
|
1232 | 1249 | user_headers = []
|
| 1250 | + |
1233 | 1251 | with open(get_fixture_path(context, filename), "rb") as f:
|
1234 |
| - data = {file_field: f} |
1235 |
| - if extra_data: |
1236 |
| - data.update(extra_data) |
| 1252 | + file_content = f.read() |
| 1253 | + files = { |
| 1254 | + file_field: FileStorage( |
| 1255 | + io.BytesIO(file_content), |
| 1256 | + filename=os.path.basename(filename), |
| 1257 | + name=file_field, |
| 1258 | + ) |
| 1259 | + } |
| 1260 | + |
1237 | 1261 | headers = [("Content-Type", "multipart/form-data")]
|
1238 | 1262 | headers.extend(user_headers)
|
1239 | 1263 | headers = unique_headers(headers, context.headers)
|
1240 | 1264 | url = get_prefixed_url(context.app, dest)
|
1241 |
| - context.response = await getattr(context.client, method)(url, data=data, headers=headers) |
| 1265 | + |
| 1266 | + context.response = await getattr(context.client, method)( |
| 1267 | + url, |
| 1268 | + files=files, |
| 1269 | + form=extra_data, |
| 1270 | + headers=headers, |
| 1271 | + ) |
1242 | 1272 | await assert_ok(context.response)
|
1243 | 1273 | await store_placeholder(context, url)
|
1244 | 1274 |
|
@@ -1298,7 +1328,6 @@ async def _step_impl_then_get_error(context, code):
|
1298 | 1328 | async def step_impl_then_get_error(context, code):
|
1299 | 1329 | await expect_status(context.response, int(code))
|
1300 | 1330 | if context.text:
|
1301 |
| - print("got", (await context.response.get_data()).decode("utf-8")) |
1302 | 1331 | await test_json(context)
|
1303 | 1332 |
|
1304 | 1333 |
|
@@ -1469,7 +1498,6 @@ async def step_impl_then_get_existing_resource(context):
|
1469 | 1498 |
|
1470 | 1499 | async def step_impl_then_get_existing(context):
|
1471 | 1500 | await assert_200(context.response)
|
1472 |
| - print("got", get_response_readable(await context.response.get_data())) |
1473 | 1501 | await test_json(context)
|
1474 | 1502 |
|
1475 | 1503 |
|
|
0 commit comments