mirror of
https://github.com/inventree/InvenTree.git
synced 2025-07-01 11:10:54 +00:00
Add Metadata to more models (#4898)
* Update models: add MetadataMixin * Fix name of model in Metadata API definition * Add API endpoints * Update API version * Fix syntax * Add API endpoint for RO, RO line, RO line extra item * Add Metadata to Contacts * Fix link in API version * Fix name of model * Fix error? * Fix error? * Fix all errors, hopefully.. * Add tests for order, line, extraline metadata Extend for PO, SO * Add tests for metadata for Company-related models * Fix spelling * Consolidate metadata test for all part models into one test * Add test for all Stock metadata * Update stock test_api * Add all metadata tests for orders * Fix various errors in tests * Fix model name * Add migration files * Update tests for metadata * Resolve conflict around API version number * Rename migration file * Rename migration file * Will Contact edit endpoint work better? * Revert changes in URL definitions * Remove test, duplicate * Fix tests with fixed PK, not from fixtures, to use a dynamic PK * Fix migration overlap
This commit is contained in:
@ -51,3 +51,19 @@
|
||||
description: 'RMA from a customer'
|
||||
customer: 5
|
||||
status: 10 # Pending
|
||||
|
||||
# 1 x R_4K7_0603
|
||||
- model: order.returnorderlineitem
|
||||
pk: 1
|
||||
fields:
|
||||
order: 6
|
||||
item: 1008
|
||||
quantity: 1
|
||||
|
||||
# An extra line item
|
||||
- model: order.returnorderextraline
|
||||
pk: 1
|
||||
fields:
|
||||
order: 6
|
||||
reference: 'Freight cost'
|
||||
quantity: 1
|
||||
|
@ -37,3 +37,26 @@
|
||||
description: "One sales order, please"
|
||||
customer: 5
|
||||
status: 60 # Returned
|
||||
|
||||
# 1 x R_4K7_0603
|
||||
- model: order.salesorderlineitem
|
||||
pk: 1
|
||||
fields:
|
||||
order: 5
|
||||
part: 5
|
||||
quantity: 1
|
||||
|
||||
# An extra line item
|
||||
- model: order.salesorderextraline
|
||||
pk: 1
|
||||
fields:
|
||||
order: 5
|
||||
reference: 'Freight cost'
|
||||
quantity: 1
|
||||
|
||||
# Shipment
|
||||
- model: order.salesordershipment
|
||||
pk: 1
|
||||
fields:
|
||||
order: 1
|
||||
reference: "Test Shipment, must be present for metadata test"
|
||||
|
@ -509,23 +509,6 @@ class PurchaseOrderTest(OrderTest):
|
||||
|
||||
self.assertEqual(po.status, PurchaseOrderStatus.PLACED)
|
||||
|
||||
def test_po_metadata(self):
|
||||
"""Test the 'metadata' endpoint for the PurchaseOrder model"""
|
||||
url = reverse('api-po-metadata', kwargs={'pk': 1})
|
||||
|
||||
self.patch(
|
||||
url,
|
||||
{
|
||||
'metadata': {
|
||||
'yam': 'yum',
|
||||
}
|
||||
},
|
||||
expected_code=200
|
||||
)
|
||||
|
||||
order = models.PurchaseOrder.objects.get(pk=1)
|
||||
self.assertEqual(order.get_metadata('yam'), 'yum')
|
||||
|
||||
def test_po_calendar(self):
|
||||
"""Test the calendar export endpoint"""
|
||||
|
||||
@ -1374,23 +1357,6 @@ class SalesOrderTest(OrderTest):
|
||||
|
||||
self.assertEqual(so.status, SalesOrderStatus.CANCELLED)
|
||||
|
||||
def test_so_metadata(self):
|
||||
"""Test the 'metadata' API endpoint for the SalesOrder model"""
|
||||
url = reverse('api-so-metadata', kwargs={'pk': 1})
|
||||
|
||||
self.patch(
|
||||
url,
|
||||
{
|
||||
'metadata': {
|
||||
'xyz': 'abc',
|
||||
}
|
||||
},
|
||||
expected_code=200
|
||||
)
|
||||
|
||||
order = models.SalesOrder.objects.get(pk=1)
|
||||
self.assertEqual(order.get_metadata('xyz'), 'abc')
|
||||
|
||||
def test_so_calendar(self):
|
||||
"""Test the calendar export endpoint"""
|
||||
|
||||
@ -1887,6 +1853,9 @@ class SalesOrderAllocateTest(OrderTest):
|
||||
"""Test the SalesOrderShipment list API endpoint"""
|
||||
url = reverse('api-so-shipment-list')
|
||||
|
||||
# Count before creation
|
||||
countbefore = models.SalesOrderShipment.objects.count()
|
||||
|
||||
# Create some new shipments via the API
|
||||
for order in models.SalesOrder.objects.all():
|
||||
|
||||
@ -1916,7 +1885,7 @@ class SalesOrderAllocateTest(OrderTest):
|
||||
# List *all* shipments
|
||||
response = self.get(url, expected_code=200)
|
||||
|
||||
self.assertEqual(len(response.data), 1 + 3 * models.SalesOrder.objects.count())
|
||||
self.assertEqual(len(response.data), countbefore + 3 * models.SalesOrder.objects.count())
|
||||
|
||||
|
||||
class ReturnOrderTests(InvenTreeAPITestCase):
|
||||
@ -2212,3 +2181,71 @@ class ReturnOrderTests(InvenTreeAPITestCase):
|
||||
response = self.get(url, expected_code=200, format=None)
|
||||
calendar = Calendar.from_ical(response.content)
|
||||
self.assertIsInstance(calendar, Calendar)
|
||||
|
||||
|
||||
class OrderMetadataAPITest(InvenTreeAPITestCase):
|
||||
"""Unit tests for the various metadata endpoints of API."""
|
||||
|
||||
fixtures = [
|
||||
'category',
|
||||
'part',
|
||||
'company',
|
||||
'location',
|
||||
'supplier_part',
|
||||
'stock',
|
||||
'order',
|
||||
'sales_order',
|
||||
'return_order',
|
||||
]
|
||||
|
||||
roles = [
|
||||
'purchase_order.change',
|
||||
'sales_order.change',
|
||||
'return_order.change',
|
||||
]
|
||||
|
||||
def metatester(self, apikey, model):
|
||||
"""Generic tester"""
|
||||
|
||||
modeldata = model.objects.first()
|
||||
|
||||
# Useless test unless a model object is found
|
||||
self.assertIsNotNone(modeldata)
|
||||
|
||||
url = reverse(apikey, kwargs={'pk': modeldata.pk})
|
||||
|
||||
# Metadata is initially null
|
||||
self.assertIsNone(modeldata.metadata)
|
||||
|
||||
numstr = f'12{len(apikey)}'
|
||||
|
||||
self.patch(
|
||||
url,
|
||||
{
|
||||
'metadata': {
|
||||
f'abc-{numstr}': f'xyz-{apikey}-{numstr}',
|
||||
}
|
||||
},
|
||||
expected_code=200
|
||||
)
|
||||
|
||||
# Refresh
|
||||
modeldata.refresh_from_db()
|
||||
self.assertEqual(modeldata.get_metadata(f'abc-{numstr}'), f'xyz-{apikey}-{numstr}')
|
||||
|
||||
def test_metadata(self):
|
||||
"""Test all endpoints"""
|
||||
|
||||
for apikey, model in {
|
||||
'api-po-metadata': models.PurchaseOrder,
|
||||
'api-po-line-metadata': models.PurchaseOrderLineItem,
|
||||
'api-po-extra-line-metadata': models.PurchaseOrderExtraLine,
|
||||
'api-so-shipment-metadata': models.SalesOrderShipment,
|
||||
'api-so-metadata': models.SalesOrder,
|
||||
'api-so-line-metadata': models.SalesOrderLineItem,
|
||||
'api-so-extra-line-metadata': models.SalesOrderExtraLine,
|
||||
'api-return-order-metadata': models.ReturnOrder,
|
||||
'api-return-order-line-metadata': models.ReturnOrderLineItem,
|
||||
'api-return-order-extra-line-metadata': models.ReturnOrderExtraLine,
|
||||
}.items():
|
||||
self.metatester(apikey, model)
|
||||
|
Reference in New Issue
Block a user