From fcc83ca7c79afdb8bbb81e903c1af74af6c65e68 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 5 May 2019 00:15:25 +1000 Subject: [PATCH] Part API test suite now uses test data fixtures --- InvenTree/part/fixtures/category.yaml | 7 +++ InvenTree/part/test_api.py | 87 ++++++++------------------- 2 files changed, 33 insertions(+), 61 deletions(-) diff --git a/InvenTree/part/fixtures/category.yaml b/InvenTree/part/fixtures/category.yaml index 86675a7fa9..2f46dcce65 100644 --- a/InvenTree/part/fixtures/category.yaml +++ b/InvenTree/part/fixtures/category.yaml @@ -7,6 +7,7 @@ description: Electronic components parent: null default_location: 1 # Home + - model: part.partcategory pk: 2 fields: @@ -14,6 +15,7 @@ description: Resistors parent: 1 default_location: null + - model: part.partcategory pk: 3 fields: @@ -21,6 +23,7 @@ description: Capacitors parent: 1 default_location: null + - model: part.partcategory pk: 4 fields: @@ -28,6 +31,7 @@ description: Integrated Circuits parent: 1 default_location: null + - model: part.partcategory pk: 5 fields: @@ -35,6 +39,7 @@ description: Microcontrollers parent: 4 default_location: null + - model: part.partcategory pk: 6 fields: @@ -42,12 +47,14 @@ description: Communication interfaces parent: 4 default_location: null + - model: part.partcategory pk: 7 fields: name: Mechanical description: Mechanical componenets default_location: null + - model: part.partcategory pk: 8 fields: diff --git a/InvenTree/part/test_api.py b/InvenTree/part/test_api.py index 9a0a49447b..b8d9b7ba6d 100644 --- a/InvenTree/part/test_api.py +++ b/InvenTree/part/test_api.py @@ -3,9 +3,6 @@ from rest_framework import status from django.urls import reverse from django.contrib.auth import get_user_model -from .models import Part, PartCategory -from .models import BomItem - class PartAPITest(APITestCase): """ @@ -14,36 +11,29 @@ class PartAPITest(APITestCase): - Tests for PartCategory API """ + fixtures = [ + 'category', + 'part', + 'location', + 'bom', + ] + def setUp(self): # Create a user for auth User = get_user_model() User.objects.create_user('testuser', 'test@testing.com', 'password') self.client.login(username='testuser', password='password') - - # Create some test data - TOP = PartCategory.objects.create(name='Top', description='Top level category') - - A = PartCategory.objects.create(name='A', description='Cat A', parent=TOP) - B = PartCategory.objects.create(name='B', description='Cat B', parent=TOP) - C = PartCategory.objects.create(name='C', description='Cat C', parent=TOP) - - Part.objects.create(name='Top.t', description='t in TOP', category=TOP) - - Part.objects.create(name='A.a', description='a in A', category=A) - Part.objects.create(name='B.b', description='b in B', category=B) - Part.objects.create(name='C.c1', description='c1 in C', category=C) - Part.objects.create(name='C.c2', description='c2 in C', category=C) def test_get_categories(self): - # Test that we can retrieve list of part categories + """ Test that we can retrieve list of part categories """ url = reverse('api-part-category-list') response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(len(response.data), 4) + self.assertEqual(len(response.data), 8) def test_add_categories(self): - # Check that we can add categories + """ Check that we can add categories """ data = { 'name': 'Animals', 'description': 'All animals go here' @@ -52,31 +42,32 @@ class PartAPITest(APITestCase): url = reverse('api-part-category-list') response = self.client.post(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.assertEqual(response.data['pk'], 5) + + parent = response.data['pk'] # Add some sub-categories to the top-level 'Animals' category for animal in ['cat', 'dog', 'zebra']: data = { 'name': animal, 'description': 'A sort of animal', - 'parent': 5, + 'parent': parent, } response = self.client.post(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.assertEqual(response.data['parent'], 5) + self.assertEqual(response.data['parent'], parent) self.assertEqual(response.data['name'], animal) self.assertEqual(response.data['pathstring'], 'Animals/' + animal) # There should be now 8 categories response = self.client.get(url, format='json') - self.assertEqual(len(response.data), 8) + self.assertEqual(len(response.data), 12) def test_cat_detail(self): url = reverse('api-part-category-detail', kwargs={'pk': 4}) response = self.client.get(url, format='json') # Test that we have retrieved the category - self.assertEqual(response.data['description'], 'Cat C') + self.assertEqual(response.data['description'], 'Integrated Circuits') self.assertEqual(response.data['parent'], 1) # Change some data and post it back @@ -87,16 +78,17 @@ class PartAPITest(APITestCase): response = self.client.patch(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['description'], 'Changing the description') + self.assertIsNone(response.data['parent']) def test_get_all_parts(self): url = reverse('api-part-list') response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(len(response.data), 5) + self.assertEqual(len(response.data), 8) def test_get_parts_by_cat(self): url = reverse('api-part-list') - data = {'category': 4} + data = {'category': 2} response = self.client.get(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -104,7 +96,7 @@ class PartAPITest(APITestCase): self.assertEqual(len(response.data), 2) for part in response.data: - self.assertEqual(part['category'], 4) + self.assertEqual(part['category'], 2) def test_include_children(self): """ Test the special 'include_child_categories' flag @@ -116,7 +108,7 @@ class PartAPITest(APITestCase): response = self.client.get(url, data, format='json') # There should be 1 part in this category - self.assertEqual(len(response.data), 1) + self.assertEqual(len(response.data), 0) data['include_child_categories'] = 1 @@ -125,35 +117,10 @@ class PartAPITest(APITestCase): # Now there should be 5 total parts self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(len(response.data), 5) - - -class BomAPITest(APITestCase): - - def setUp(self): - # Create a user for auth - User = get_user_model() - User.objects.create_user('testuser', 'test@testing.com', 'password') - - self.client.login(username='testuser', password='password') - - # Create some parts - m1 = Part.objects.create(name='A thing', description='Made from other parts', buildable=True) - m2 = Part.objects.create(name='Another thing', description='Made from other parts', buildable=True) - - s1 = Part.objects.create(name='Sub 1', description='Required to make a thing') - s2 = Part.objects.create(name='Sub 2', description='Required to make a thing') - s3 = Part.objects.create(name='Sub 3', description='Required to make a thing') - - # Link BOM items together - BomItem.objects.create(part=m1, sub_part=s1, quantity=10) - BomItem.objects.create(part=m1, sub_part=s2, quantity=100) - BomItem.objects.create(part=m1, sub_part=s3, quantity=40) - - BomItem.objects.create(part=m2, sub_part=s3, quantity=7) + self.assertEqual(len(response.data), 3) def test_get_bom_list(self): - # There should be 4 BomItem objects in the database + """ There should be 4 BomItem objects in the database """ url = reverse('api-bom-list') response = self.client.get(url, format='json') self.assertEqual(len(response.data), 4) @@ -163,7 +130,7 @@ class BomAPITest(APITestCase): url = reverse('api-bom-detail', kwargs={'pk': 3}) response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(response.data['quantity'], 40) + self.assertEqual(response.data['quantity'], 25) # Increase the quantity data = response.data @@ -181,7 +148,7 @@ class BomAPITest(APITestCase): url = reverse('api-bom-list') data = { - 'part': 2, + 'part': 100, 'sub_part': 4, 'quantity': 777, } @@ -194,9 +161,7 @@ class BomAPITest(APITestCase): response = self.client.post(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - # Now try to create a BomItem which references itself + # TODO - Now try to create a BomItem which references itself data['part'] = 2 data['sub_part'] = 2 response = self.client.post(url, data, format='json') - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertIn('cannot be added to its own', str(response.data['sub_part'][0]))