From 0d078768feeccc087b9deaefe016d1d7684b1d21 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 18 May 2022 00:08:11 +1000 Subject: [PATCH] Unit tests for downloading PurchaseOrder data --- InvenTree/InvenTree/api_tester.py | 2 +- InvenTree/order/test_api.py | 63 +++++++++++++++++++++++++++++-- 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/InvenTree/InvenTree/api_tester.py b/InvenTree/InvenTree/api_tester.py index 9dde7c0f52..34976ffbfe 100644 --- a/InvenTree/InvenTree/api_tester.py +++ b/InvenTree/InvenTree/api_tester.py @@ -171,7 +171,7 @@ class InvenTreeAPITestCase(APITestCase): return response - def download_file(self, url, data, expected_code=None, expected_fn=None, decode=False): + def download_file(self, url, data, expected_code=None, expected_fn=None, decode=True): """ Download a file from the server, and return an in-memory file """ diff --git a/InvenTree/order/test_api.py b/InvenTree/order/test_api.py index 1a044c9b46..fffeb29216 100644 --- a/InvenTree/order/test_api.py +++ b/InvenTree/order/test_api.py @@ -325,6 +325,62 @@ class PurchaseOrderTest(OrderTest): self.assertEqual(order.get_metadata('yam'), 'yum') +class PurchaseOrderDownloadTest(OrderTest): + """Unit tests for downloading PurchaseOrder data via the API endpoint""" + + required_cols = [ + 'id', + 'line_items', + 'description', + 'issue_date', + 'notes', + 'reference', + 'status', + 'supplier_reference', + ] + + excluded_cols = [ + 'metadata', + ] + + def test_download_wrong_format(self): + """Incorrect format should default raise an error""" + + url = reverse('api-po-list') + + with self.assertRaises(ValueError): + self.download_file( + url, + { + 'export': 'xyz', + } + ) + + def test_download_csv(self): + """Download PurchaseOrder data as .csv""" + + with self.download_file( + reverse('api-po-list'), + { + 'export': 'csv', + }, + expected_code=200, + expected_fn='InvenTree_PurchaseOrders.csv', + ) as fo: + + data = self.process_csv( + fo, + required_cols=self.required_cols, + excluded_cols=self.excluded_cols, + required_rows=models.PurchaseOrder.objects.count() + ) + + for row in data: + order = models.PurchaseOrder.objects.get(pk=row['id']) + + self.assertEqual(order.description, row['description']) + self.assertEqual(order.reference, row['reference']) + class PurchaseOrderReceiveTest(OrderTest): """ Unit tests for receiving items against a PurchaseOrder @@ -925,16 +981,15 @@ class SalesOrderDownloadTest(OrderTest): url = reverse('api-so-list') # Download .xls file - fo = self.download_file( + with self.download_file( url, { 'export': 'xls', }, expected_code=200, expected_fn='InvenTree_SalesOrders.xls', - ) - - self.assertTrue(isinstance(fo, io.BytesIO)) + ) as fo: + self.assertTrue(isinstance(fo, io.BytesIO)) def test_download_csv(self):