diff --git a/InvenTree/InvenTree/api_version.py b/InvenTree/InvenTree/api_version.py index 86f41816b2..e391a00bd1 100644 --- a/InvenTree/InvenTree/api_version.py +++ b/InvenTree/InvenTree/api_version.py @@ -4,11 +4,15 @@ InvenTree API version information # InvenTree API version -INVENTREE_API_VERSION = 46 +INVENTREE_API_VERSION = 47 """ Increment this API version number whenever there is a significant change to the API that any clients need to know about +v47 -> 2022-05-10 : https://github.com/inventree/InvenTree/pull/2964 + - Fixes barcode API error response when scanning a StockItem which does not exist + - Fixes barcode API error response when scanning a StockLocation which does not exist + v46 -> 2022-05-09 - Fixes read permissions on settings API - Allows non-staff users to read global settings via the API diff --git a/InvenTree/barcodes/plugins/inventree_barcode.py b/InvenTree/barcodes/plugins/inventree_barcode.py index 5df71cb776..604936c216 100644 --- a/InvenTree/barcodes/plugins/inventree_barcode.py +++ b/InvenTree/barcodes/plugins/inventree_barcode.py @@ -83,7 +83,7 @@ class InvenTreeBarcodePlugin(BarcodePlugin): item = StockItem.objects.get(pk=pk) return item except (ValueError, StockItem.DoesNotExist): # pragma: no cover - raise ValidationError({k, "Stock item does not exist"}) + raise ValidationError({k: "Stock item does not exist"}) return None @@ -111,7 +111,7 @@ class InvenTreeBarcodePlugin(BarcodePlugin): loc = StockLocation.objects.get(pk=pk) return loc except (ValueError, StockLocation.DoesNotExist): # pragma: no cover - raise ValidationError({k, "Stock location does not exist"}) + raise ValidationError({k: "Stock location does not exist"}) return None @@ -132,12 +132,12 @@ class InvenTreeBarcodePlugin(BarcodePlugin): try: pk = self.data[k]['id'] except (AttributeError, KeyError): - raise ValidationError({k, 'id parameter not supplied'}) + raise ValidationError({k: 'id parameter not supplied'}) try: part = Part.objects.get(pk=pk) return part except (ValueError, Part.DoesNotExist): # pragma: no cover - raise ValidationError({k, 'Part does not exist'}) + raise ValidationError({k: 'Part does not exist'}) return None diff --git a/InvenTree/barcodes/tests.py b/InvenTree/barcodes/tests.py index 18d4e77d20..b092e7eb32 100644 --- a/InvenTree/barcodes/tests.py +++ b/InvenTree/barcodes/tests.py @@ -86,6 +86,22 @@ class BarcodeAPITest(APITestCase): self.assertIn('barcode_data', response.data) self.assertEqual(response.data['part']['pk'], 1) + def test_invalid_part(self): + """Test response for invalid part""" + response = self.client.post( + self.scan_url, + { + 'barcode': { + 'part': 999999999, + } + }, + format='json' + ) + + self.assertEqual(response.status_code, 400) + + self.assertEqual(response.data['part'], 'Part does not exist') + def test_find_stock_item(self): """ Test that we can lookup a stock item based on ID @@ -106,6 +122,23 @@ class BarcodeAPITest(APITestCase): self.assertIn('barcode_data', response.data) self.assertEqual(response.data['stockitem']['pk'], 1) + def test_invalid_item(self): + """Test response for invalid stock item""" + + response = self.client.post( + self.scan_url, + { + 'barcode': { + 'stockitem': 999999999, + } + }, + format='json' + ) + + self.assertEqual(response.status_code, 400) + + self.assertEqual(response.data['stockitem'], 'Stock item does not exist') + def test_find_location(self): """ Test that we can lookup a stock location based on ID @@ -126,6 +159,23 @@ class BarcodeAPITest(APITestCase): self.assertIn('barcode_data', response.data) self.assertEqual(response.data['stocklocation']['pk'], 1) + def test_invalid_location(self): + """Test response for an invalid location""" + + response = self.client.post( + self.scan_url, + { + 'barcode': { + 'stocklocation': 999999999, + } + }, + format='json' + ) + + self.assertEqual(response.status_code, 400) + + self.assertEqual(response.data['stocklocation'], 'Stock location does not exist') + def test_integer_barcode(self): response = self.postBarcode(self.scan_url, '123456789')