From 0a0da7b65bc08372ef282b516de1ea855e56e2f5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 29 Sep 2024 15:38:28 +1000 Subject: [PATCH] Exception handling for BulkDeleteMixin (#8205) (#8206) * Exception handling for BulkDeleteMixin * Fix unit test (cherry picked from commit 33499d61bd522fb1fe24fb296fa09b361436574c) Co-authored-by: Oliver --- src/backend/InvenTree/InvenTree/api.py | 19 +++++++++++++++++-- src/backend/InvenTree/stock/test_api.py | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index cba3727c9e..2aae77a86d 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -383,11 +383,26 @@ class BulkDeleteMixin: # Filter by provided item ID values if items: - queryset = queryset.filter(id__in=items) + try: + queryset = queryset.filter(id__in=items) + except Exception: + raise ValidationError({ + 'non_field_errors': _('Invalid items list provided') + }) # Filter by provided filters if filters: - queryset = queryset.filter(**filters) + try: + queryset = queryset.filter(**filters) + except Exception: + raise ValidationError({ + 'non_field_errors': _('Invalid filters provided') + }) + + if queryset.count() == 0: + raise ValidationError({ + 'non_field_errors': _('No items found to delete') + }) # Run a final validation step (should raise an error if the deletion should not proceed) self.validate_delete(queryset, request) diff --git a/src/backend/InvenTree/stock/test_api.py b/src/backend/InvenTree/stock/test_api.py index 61a8a43ba7..637f40eacf 100644 --- a/src/backend/InvenTree/stock/test_api.py +++ b/src/backend/InvenTree/stock/test_api.py @@ -1713,7 +1713,7 @@ class StockTestResultTest(StockAPITestCase): # Now, let's delete all the newly created items with a single API request # However, we will provide incorrect filters response = self.delete( - url, {'items': tests, 'filters': {'stock_item': 10}}, expected_code=204 + url, {'items': tests, 'filters': {'stock_item': 10}}, expected_code=400 ) self.assertEqual(StockItemTestResult.objects.count(), n + 50)