mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 20:16:44 +00:00
Increase unit testing for order API
This commit is contained in:
parent
02132fa495
commit
fef5b7548e
@ -5,20 +5,29 @@
|
|||||||
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:
|
||||||
name: A customer
|
name: A customer
|
||||||
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
|
@ -191,7 +191,7 @@ class PurchaseOrder(Order):
|
|||||||
|
|
||||||
issue_date = models.DateField(
|
issue_date = models.DateField(
|
||||||
blank=True, null=True,
|
blank=True, null=True,
|
||||||
verbose_name=_('Issue Date'),
|
verbose_name=_('Issue Date'),
|
||||||
help_text=_('Date order was issued')
|
help_text=_('Date order was issued')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -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 order items
|
# 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/'
|
||||||
|
|
||||||
response = self.doGet(url)
|
response = self.doGet(url)
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
# Filter by stuff
|
data = response.data
|
||||||
response = self.doGet(url, 'status=10&part=1&supplier_part=1')
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
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')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user