Skip to content

Commit dc54480

Browse files
committed
✅ [#565] Fix coverage
Queryset is never empty; django admin already checks this when performing an action.
1 parent 365cb45 commit dc54480

3 files changed

Lines changed: 41 additions & 13 deletions

File tree

src/objects/core/admin.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -226,14 +226,10 @@ def import_from_file_view(self, request: HttpRequest) -> HttpResponse:
226226
{"form": form, "source": "file"},
227227
)
228228

229-
@admin.action(description="Export selected objecttypes as a file")
229+
@admin.action(description=_("Export selected objecttypes as a file"))
230230
def export_objecttypes_action(
231231
self, request: HttpRequest, queryset: models.QuerySet[ObjectType]
232-
) -> HttpResponse | None:
233-
if not queryset.exists():
234-
self.message_user(request, "No objecttypes selected for export.")
235-
return None
236-
232+
) -> HttpResponse:
237233
output = io.BytesIO()
238234
export_data(output, objecttypes=queryset)
239235

src/objects/core/import_export.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,10 @@ def _strip_uuid(data: object):
114114
return [_strip_uuid(m) for m in members]
115115
case {"uuid": _, **rest}:
116116
return rest
117-
case _:
118-
return data
117+
case _: # pragma: no cover
118+
raise Exception(
119+
"If you want to reuse this for whatever you're doing, make it recursive"
120+
)
119121

120122

121123
@transaction.atomic
@@ -181,12 +183,13 @@ def import_upload(
181183
report_error_to_user(
182184
_("{file} is not a supported file type").format(file=file.name),
183185
)
184-
except Exception:
186+
except Exception: # pragma: no cover
185187
report_error_to_user(
186188
_(
187189
"Something unexpected happened during import.\n"
188-
"If you think the file should be correct, "
189-
"please include the file in your bug report.\n"
190+
"Please try again. If it fails again and you think "
191+
"the file should be correct, please include the "
192+
"file in your bug report.\n"
190193
).format()
191194
)
192195
logger.exception("unhandled import exception")
@@ -197,7 +200,7 @@ def import_upload(
197200
for f in fs
198201
for resource in import_upload(f, keep_uuid, report_error_to_user)
199202
}
200-
case _: # pragma: no-cover
203+
case _: # pragma: no cover
201204
logger.exception("unexected type in upload", contents=file)
202205
raise SuspiciousFileOperation("Unexpected type in upload")
203206

src/objects/core/tests/test_export_import.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import json
22
from io import BytesIO
33

4+
from django.core.files.uploadedfile import SimpleUploadedFile
45
import hypothesis.strategies as st
56
import jsonschema_specifications
67
from hypothesis import HealthCheck, given, settings
78
from hypothesis.extra.django import TestCase, from_model
89
from hypothesis_jsonschema import from_schema
910

10-
from ..import_export import export_data, import_data
11+
from ..import_export import export_data, import_data, import_upload
1112
from ..models import ObjectType, ObjectTypeVersion
1213
from ..utils import check_json_schema
1314

@@ -267,3 +268,31 @@ def test_export_import_with_new_uuid(self, original_type: ObjectType) -> None:
267268
assert imported_version.json_schema == original_version.json_schema
268269
assert imported_version.status == original_version.status
269270
assert imported_version.published_at == original_version.published_at
271+
272+
273+
@given(objecttypes(), objecttypes())
274+
@settings(suppress_health_check=[HealthCheck.too_slow])
275+
def test_import_upload_list_of_files(self, ot1, ot2):
276+
output1 = BytesIO()
277+
output2 = BytesIO()
278+
279+
export_data(output1, objecttypes=[ot1])
280+
export_data(output2, objecttypes=[ot2])
281+
282+
file1 = SimpleUploadedFile(
283+
"file1.zip", output1.getvalue(), content_type="application/zip"
284+
)
285+
file2 = SimpleUploadedFile(
286+
"file2.zip", output2.getvalue(), content_type="application/zip"
287+
)
288+
289+
ObjectType.objects.all().delete()
290+
291+
errors = []
292+
def report_error(msg):
293+
errors.append(msg)
294+
295+
import_upload([file1, file2], keep_uuid=True, report_error_to_user=report_error)
296+
297+
assert set(ObjectType.objects.all().values_list("name", flat=True)) == {ot1.name.strip(), ot2.name.strip()}
298+
assert errors == []

0 commit comments

Comments
 (0)