mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Fixes for SalesOrder API
This commit is contained in:
parent
3fa3ce06a1
commit
26dd9c10a4
InvenTree/order
@ -382,7 +382,7 @@ class SOList(generics.ListCreateAPIView):
|
|||||||
ordering = '-creation_date'
|
ordering = '-creation_date'
|
||||||
|
|
||||||
|
|
||||||
class SODetail(generics.RetrieveUpdateAPIView):
|
class SODetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
"""
|
"""
|
||||||
API endpoint for detail view of a SalesOrder object.
|
API endpoint for detail view of a SalesOrder object.
|
||||||
"""
|
"""
|
||||||
|
@ -228,8 +228,9 @@ class SalesOrderSerializer(InvenTreeModelSerializer):
|
|||||||
]
|
]
|
||||||
|
|
||||||
read_only_fields = [
|
read_only_fields = [
|
||||||
'reference',
|
'status',
|
||||||
'status'
|
'creation_date',
|
||||||
|
'shipment_date',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -110,9 +110,9 @@ class PurchaseOrderTest(OrderTest):
|
|||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
def test_po_create(self):
|
def test_po_operations(self):
|
||||||
"""
|
"""
|
||||||
Test that we can create and delete a PurchaseOrder via the API
|
Test that we can create / edit and delete a PurchaseOrder via the API
|
||||||
"""
|
"""
|
||||||
|
|
||||||
n = PurchaseOrder.objects.count()
|
n = PurchaseOrder.objects.count()
|
||||||
@ -173,6 +173,18 @@ class PurchaseOrderTest(OrderTest):
|
|||||||
self.assertEqual(response.data['pk'], pk)
|
self.assertEqual(response.data['pk'], pk)
|
||||||
self.assertEqual(response.data['reference'], '123456789-xyz')
|
self.assertEqual(response.data['reference'], '123456789-xyz')
|
||||||
|
|
||||||
|
# Try to alter (edit) the PurchaseOrder
|
||||||
|
response = self.patch(
|
||||||
|
url,
|
||||||
|
{
|
||||||
|
'reference': '12345-abc',
|
||||||
|
},
|
||||||
|
expected_code=200
|
||||||
|
)
|
||||||
|
|
||||||
|
# Reference should have changed
|
||||||
|
self.assertEqual(response.data['reference'], '12345-abc')
|
||||||
|
|
||||||
# Now, let's try to delete it!
|
# Now, let's try to delete it!
|
||||||
# Initially, we do *not* have the required permission!
|
# Initially, we do *not* have the required permission!
|
||||||
response = self.delete(url, expected_code=403)
|
response = self.delete(url, expected_code=403)
|
||||||
@ -236,8 +248,6 @@ class SalesOrderTest(OrderTest):
|
|||||||
|
|
||||||
response = self.get(url)
|
response = self.get(url)
|
||||||
|
|
||||||
self.assertEqual(response.status_code, 200)
|
|
||||||
|
|
||||||
data = response.data
|
data = response.data
|
||||||
|
|
||||||
self.assertEqual(data['pk'], 1)
|
self.assertEqual(data['pk'], 1)
|
||||||
@ -246,6 +256,88 @@ class SalesOrderTest(OrderTest):
|
|||||||
|
|
||||||
url = reverse('api-so-attachment-list')
|
url = reverse('api-so-attachment-list')
|
||||||
|
|
||||||
response = self.get(url)
|
self.get(url)
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
|
def test_so_operations(self):
|
||||||
|
"""
|
||||||
|
Test that we can create / edit and delete a SalesOrder via the API
|
||||||
|
"""
|
||||||
|
|
||||||
|
n = SalesOrder.objects.count()
|
||||||
|
|
||||||
|
url = reverse('api-so-list')
|
||||||
|
|
||||||
|
# Initially we do not have "add" permission for the SalesOrder model,
|
||||||
|
# so this POST request should return 403 (denied)
|
||||||
|
response = self.post(
|
||||||
|
url,
|
||||||
|
{
|
||||||
|
'customer': 4,
|
||||||
|
'reference': '12345',
|
||||||
|
'description': 'Sales order',
|
||||||
|
},
|
||||||
|
expected_code=403,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assignRole('sales_order.add')
|
||||||
|
|
||||||
|
# Now we should be able to create a SalesOrder via the API
|
||||||
|
response = self.post(
|
||||||
|
url,
|
||||||
|
{
|
||||||
|
'customer': 4,
|
||||||
|
'reference': '12345',
|
||||||
|
'description': 'Sales order',
|
||||||
|
},
|
||||||
|
expected_code=201
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check that the new order has been created
|
||||||
|
self.assertEqual(SalesOrder.objects.count(), n + 1)
|
||||||
|
|
||||||
|
# Grab the PK for the newly created SalesOrder
|
||||||
|
pk = response.data['pk']
|
||||||
|
|
||||||
|
# Try to create a SO with identical reference (should fail)
|
||||||
|
response = self.post(
|
||||||
|
url,
|
||||||
|
{
|
||||||
|
'customer': 4,
|
||||||
|
'reference': '12345',
|
||||||
|
'description': 'Another sales order',
|
||||||
|
},
|
||||||
|
expected_code=400
|
||||||
|
)
|
||||||
|
|
||||||
|
url = reverse('api-so-detail', kwargs={'pk': pk})
|
||||||
|
|
||||||
|
# Extract detail info for the SalesOrder
|
||||||
|
response = self.get(url)
|
||||||
|
self.assertEqual(response.data['reference'], '12345')
|
||||||
|
|
||||||
|
# Try to alter (edit) the SalesOrder
|
||||||
|
response = self.patch(
|
||||||
|
url,
|
||||||
|
{
|
||||||
|
'reference': '12345-a',
|
||||||
|
},
|
||||||
|
expected_code=200
|
||||||
|
)
|
||||||
|
|
||||||
|
# Reference should have changed
|
||||||
|
self.assertEqual(response.data['reference'], '12345-a')
|
||||||
|
|
||||||
|
# Now, let's try to delete this SalesOrder
|
||||||
|
# Initially, we do not have the required permission
|
||||||
|
response = self.delete(url, expected_code=403)
|
||||||
|
|
||||||
|
self.assignRole('sales_order.delete')
|
||||||
|
|
||||||
|
response = self.delete(url, expected_code=204)
|
||||||
|
|
||||||
|
# Check that the number of sales orders has decreased
|
||||||
|
self.assertEqual(SalesOrder.objects.count(), n)
|
||||||
|
|
||||||
|
# And the resource should no longer be available
|
||||||
|
response = self.get(url, expected_code=404)
|
||||||
|
Loading…
Reference in New Issue
Block a user