mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-04 15:15:42 +00:00 
			
		
		
		
	Increase unit testing for order API
This commit is contained in:
		@@ -5,16 +5,19 @@
 | 
				
			|||||||
  fields:
 | 
					  fields:
 | 
				
			||||||
    name: ACME
 | 
					    name: ACME
 | 
				
			||||||
    description: A Cool Military Enterprise
 | 
					    description: A Cool Military Enterprise
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: company.company
 | 
					- model: company.company
 | 
				
			||||||
  pk: 2
 | 
					  pk: 2
 | 
				
			||||||
  fields:
 | 
					  fields:
 | 
				
			||||||
    name: Appel Computers
 | 
					    name: Appel Computers
 | 
				
			||||||
    description: Think more differenter
 | 
					    description: Think more differenter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: company.company
 | 
					- model: company.company
 | 
				
			||||||
  pk: 3
 | 
					  pk: 3
 | 
				
			||||||
  fields:
 | 
					  fields:
 | 
				
			||||||
    name: Zerg Corp
 | 
					    name: Zerg Corp
 | 
				
			||||||
    description: We eat the competition
 | 
					    description: We eat the competition
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: company.company
 | 
					- model: company.company
 | 
				
			||||||
  pk: 4
 | 
					  pk: 4
 | 
				
			||||||
  fields:
 | 
					  fields:
 | 
				
			||||||
@@ -22,3 +25,9 @@
 | 
				
			|||||||
    description: A company that we sell things to!
 | 
					    description: A company that we sell things to!
 | 
				
			||||||
    is_customer: True
 | 
					    is_customer: True
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					- model: company.company
 | 
				
			||||||
 | 
					  pk: 5
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    name: Another customer!
 | 
				
			||||||
 | 
					    description: Yet another company
 | 
				
			||||||
 | 
					    is_customer: True
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@
 | 
				
			|||||||
    reference: '0001'
 | 
					    reference: '0001'
 | 
				
			||||||
    description: "Ordering some screws"
 | 
					    description: "Ordering some screws"
 | 
				
			||||||
    supplier: 1
 | 
					    supplier: 1
 | 
				
			||||||
 | 
					    status: 10  # Pending
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Ordering some screws from Zerg Corp
 | 
					# Ordering some screws from Zerg Corp
 | 
				
			||||||
- model: order.purchaseorder
 | 
					- model: order.purchaseorder
 | 
				
			||||||
@@ -15,6 +16,39 @@
 | 
				
			|||||||
    reference: '0002'
 | 
					    reference: '0002'
 | 
				
			||||||
    description: "Ordering some more screws"
 | 
					    description: "Ordering some more screws"
 | 
				
			||||||
    supplier: 3
 | 
					    supplier: 3
 | 
				
			||||||
 | 
					    status: 10  # Pending
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- model: order.purchaseorder
 | 
				
			||||||
 | 
					  pk: 3
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    reference: '0003'
 | 
				
			||||||
 | 
					    description: 'Another PO'
 | 
				
			||||||
 | 
					    supplier: 3
 | 
				
			||||||
 | 
					    status: 20  # Placed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- model: order.purchaseorder
 | 
				
			||||||
 | 
					  pk: 4
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    reference: '0004'
 | 
				
			||||||
 | 
					    description: 'Another PO'
 | 
				
			||||||
 | 
					    supplier: 3
 | 
				
			||||||
 | 
					    status: 20  # Placed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- model: order.purchaseorder
 | 
				
			||||||
 | 
					  pk: 5
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    reference: '0005'
 | 
				
			||||||
 | 
					    description: 'Another PO'
 | 
				
			||||||
 | 
					    supplier: 3
 | 
				
			||||||
 | 
					    status: 30  # Complete
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- model: order.purchaseorder
 | 
				
			||||||
 | 
					  pk: 6
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    reference: '0006'
 | 
				
			||||||
 | 
					    description: 'Another PO'
 | 
				
			||||||
 | 
					    supplier: 3
 | 
				
			||||||
 | 
					    status: 40  # Cancelled
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Add some line items against PO 0001
 | 
					# Add some line items against PO 0001
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								InvenTree/order/fixtures/sales_order.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								InvenTree/order/fixtures/sales_order.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					- model: order.salesorder
 | 
				
			||||||
 | 
					  pk: 1
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    reference: 'ABC123'
 | 
				
			||||||
 | 
					    description: "One sales order, please"
 | 
				
			||||||
 | 
					    customer: 4
 | 
				
			||||||
 | 
					    status: 10  # Pending
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- model: order.salesorder
 | 
				
			||||||
 | 
					  pk: 2
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    reference: 'ABC124'
 | 
				
			||||||
 | 
					    description: "One sales order, please"
 | 
				
			||||||
 | 
					    customer: 4
 | 
				
			||||||
 | 
					    status: 10  # Pending
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- model: order.salesorder
 | 
				
			||||||
 | 
					  pk: 3
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    reference: 'ABC125'
 | 
				
			||||||
 | 
					    description: "One sales order, please"
 | 
				
			||||||
 | 
					    customer: 4
 | 
				
			||||||
 | 
					    status: 10  # Pending
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- model: order.salesorder
 | 
				
			||||||
 | 
					  pk: 4
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    reference: 'ABC126'
 | 
				
			||||||
 | 
					    description: "One sales order, please"
 | 
				
			||||||
 | 
					    customer: 5
 | 
				
			||||||
 | 
					    status: 20  # Shipped
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- model: order.salesorder
 | 
				
			||||||
 | 
					  pk: 5
 | 
				
			||||||
 | 
					  fields:
 | 
				
			||||||
 | 
					    reference: 'ABC127'
 | 
				
			||||||
 | 
					    description: "One sales order, please"
 | 
				
			||||||
 | 
					    customer: 5
 | 
				
			||||||
 | 
					    status: 60  # Returned
 | 
				
			||||||
@@ -2,12 +2,16 @@
 | 
				
			|||||||
Tests for the Order API
 | 
					Tests for the Order API
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from datetime import datetime, timedelta
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from rest_framework.test import APITestCase
 | 
					from rest_framework.test import APITestCase
 | 
				
			||||||
from rest_framework import status
 | 
					from rest_framework import status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.urls import reverse
 | 
					from django.urls import reverse
 | 
				
			||||||
from django.contrib.auth import get_user_model
 | 
					from django.contrib.auth import get_user_model
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from .models import PurchaseOrder, SalesOrder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class OrderTest(APITestCase):
 | 
					class OrderTest(APITestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,6 +22,8 @@ class OrderTest(APITestCase):
 | 
				
			|||||||
        'location',
 | 
					        'location',
 | 
				
			||||||
        'supplier_part',
 | 
					        'supplier_part',
 | 
				
			||||||
        'stock',
 | 
					        'stock',
 | 
				
			||||||
 | 
					        'order',
 | 
				
			||||||
 | 
					        'sales_order',
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def setUp(self):
 | 
					    def setUp(self):
 | 
				
			||||||
@@ -26,21 +32,80 @@ class OrderTest(APITestCase):
 | 
				
			|||||||
        get_user_model().objects.create_user('testuser', 'test@testing.com', 'password')
 | 
					        get_user_model().objects.create_user('testuser', 'test@testing.com', 'password')
 | 
				
			||||||
        self.client.login(username='testuser', password='password')
 | 
					        self.client.login(username='testuser', password='password')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def doGet(self, url, options=''):
 | 
					    def doGet(self, url, data={}):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return self.client.get(url + "?" + options, format='json')
 | 
					        return self.client.get(url, data=data, format='json')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def doPost(self, url, data={}):
 | 
				
			||||||
 | 
					        return self.client.post(url, data=data, format='json')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def filter(self, filters, count):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Test API filters
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        response = self.doGet(
 | 
				
			||||||
 | 
					            self.LIST_URL,
 | 
				
			||||||
 | 
					            filters
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					        self.assertEqual(len(response.data), count)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return response
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PurchaseOrderTest(OrderTest):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Tests for the PurchaseOrder API
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LIST_URL = reverse('api-po-list')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_po_list(self):
 | 
					    def test_po_list(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        url = reverse('api-po-list')
 | 
					        # List *ALL* PO items
 | 
				
			||||||
 | 
					        self.filter({}, 6)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Filter by supplier
 | 
				
			||||||
 | 
					        self.filter({'supplier': 1}, 1)
 | 
				
			||||||
 | 
					        self.filter({'supplier': 3}, 5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Filter by "outstanding"
 | 
				
			||||||
 | 
					        self.filter({'outstanding': True}, 4)
 | 
				
			||||||
 | 
					        self.filter({'outstanding': False}, 2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Filter by "status"
 | 
				
			||||||
 | 
					        self.filter({'status': 10}, 2)
 | 
				
			||||||
 | 
					        self.filter({'status': 40}, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_overdue(self):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Test "overdue" status
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.filter({'overdue': True}, 0)
 | 
				
			||||||
 | 
					        self.filter({'overdue': False}, 6)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        order = PurchaseOrder.objects.get(pk=1)
 | 
				
			||||||
 | 
					        order.target_date = datetime.now().date() - timedelta(days=10)
 | 
				
			||||||
 | 
					        order.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.filter({'overdue': True}, 1)
 | 
				
			||||||
 | 
					        self.filter({'overdue': False}, 5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_po_detail(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        url = '/api/order/po/1/'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # List all order items
 | 
					 | 
				
			||||||
        response = self.doGet(url)
 | 
					        response = self.doGet(url)
 | 
				
			||||||
        self.assertEqual(response.status_code, status.HTTP_200_OK)
 | 
					 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Filter by stuff
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
        response = self.doGet(url, 'status=10&part=1&supplier_part=1')
 | 
					
 | 
				
			||||||
        self.assertEqual(response.status_code, status.HTTP_200_OK)
 | 
					        data = response.data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(data['pk'], 1)
 | 
				
			||||||
 | 
					        self.assertEqual(data['description'], 'Ordering some screws')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_po_attachments(self):
 | 
					    def test_po_attachments(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,6 +115,60 @@ class OrderTest(APITestCase):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        self.assertEqual(response.status_code, status.HTTP_200_OK)
 | 
					        self.assertEqual(response.status_code, status.HTTP_200_OK)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SalesOrderTest(OrderTest):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Tests for the SalesOrder API
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LIST_URL = reverse('api-so-list')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_so_list(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # All orders
 | 
				
			||||||
 | 
					        self.filter({}, 5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Filter by customer
 | 
				
			||||||
 | 
					        self.filter({'customer': 4}, 3)
 | 
				
			||||||
 | 
					        self.filter({'customer': 5}, 2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Filter by outstanding
 | 
				
			||||||
 | 
					        self.filter({'outstanding': True}, 3)
 | 
				
			||||||
 | 
					        self.filter({'outstanding': False}, 2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Filter by status
 | 
				
			||||||
 | 
					        self.filter({'status': 10}, 3)  # PENDING
 | 
				
			||||||
 | 
					        self.filter({'status': 20}, 1)  # SHIPPED
 | 
				
			||||||
 | 
					        self.filter({'status': 99}, 0)  # Invalid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_overdue(self):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Test "overdue" status
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.filter({'overdue': True}, 0)
 | 
				
			||||||
 | 
					        self.filter({'overdue': False}, 5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for pk in [1, 2]:
 | 
				
			||||||
 | 
					            order = SalesOrder.objects.get(pk=pk)
 | 
				
			||||||
 | 
					            order.target_date = datetime.now().date() - timedelta(days=10)
 | 
				
			||||||
 | 
					            order.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.filter({'overdue': True}, 2)
 | 
				
			||||||
 | 
					        self.filter({'overdue': False}, 3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_so_detail(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        url = '/api/order/so/1/'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        response = self.doGet(url)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        data = response.data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(data['pk'], 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_so_attachments(self):
 | 
					    def test_so_attachments(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        url = reverse('api-so-attachment-list')
 | 
					        url = reverse('api-so-attachment-list')
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user