mirror of
https://github.com/inventree/InvenTree.git
synced 2025-07-13 08:21:26 +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:
@ -6,7 +6,7 @@ from rest_framework import status
|
||||
|
||||
from InvenTree.unit_test import InvenTreeAPITestCase
|
||||
|
||||
from .models import Company, Contact, SupplierPart
|
||||
from .models import Company, Contact, ManufacturerPart, SupplierPart
|
||||
|
||||
|
||||
class CompanyTest(InvenTreeAPITestCase):
|
||||
@ -233,7 +233,10 @@ class ContactTest(InvenTreeAPITestCase):
|
||||
def test_edit(self):
|
||||
"""Test that we can edit a Contact via the API"""
|
||||
|
||||
url = reverse('api-contact-detail', kwargs={'pk': 1})
|
||||
# Get the first contact
|
||||
contact = Contact.objects.first()
|
||||
# Use this contact in the tests
|
||||
url = reverse('api-contact-detail', kwargs={'pk': contact.pk})
|
||||
|
||||
# Retrieve detail view
|
||||
data = self.get(url, expected_code=200).data
|
||||
@ -259,13 +262,16 @@ class ContactTest(InvenTreeAPITestCase):
|
||||
expected_code=200
|
||||
)
|
||||
|
||||
contact = Contact.objects.get(pk=1)
|
||||
# Get the contact again
|
||||
contact = Contact.objects.first()
|
||||
self.assertEqual(contact.role, 'x')
|
||||
|
||||
def test_delete(self):
|
||||
"""Tests that we can delete a Contact via the API"""
|
||||
|
||||
url = reverse('api-contact-detail', kwargs={'pk': 6})
|
||||
# Get the last contact
|
||||
contact = Contact.objects.first()
|
||||
url = reverse('api-contact-detail', kwargs={'pk': contact.pk})
|
||||
|
||||
# Delete (without required permissions)
|
||||
self.delete(url, expected_code=403)
|
||||
@ -490,3 +496,63 @@ class SupplierPartTest(InvenTreeAPITestCase):
|
||||
sp = SupplierPart.objects.get(pk=response.data['pk'])
|
||||
self.assertEqual(sp.available, 999)
|
||||
self.assertIsNotNone(sp.availability_updated)
|
||||
|
||||
|
||||
class CompanyMetadataAPITest(InvenTreeAPITestCase):
|
||||
"""Unit tests for the various metadata endpoints of API."""
|
||||
|
||||
fixtures = [
|
||||
'category',
|
||||
'part',
|
||||
'location',
|
||||
'company',
|
||||
'contact',
|
||||
'manufacturer_part',
|
||||
'supplier_part',
|
||||
]
|
||||
|
||||
roles = [
|
||||
'company.change',
|
||||
'purchase_order.change',
|
||||
'part.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-manufacturer-part-metadata': ManufacturerPart,
|
||||
'api-supplier-part-metadata': SupplierPart,
|
||||
'api-company-metadata': Company,
|
||||
'api-contact-metadata': Contact,
|
||||
}.items():
|
||||
self.metatester(apikey, model)
|
||||
|
Reference in New Issue
Block a user