From ce7f6d218ca993fe5e467b97f0713b8afd48f4b3 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 30 Nov 2025 01:01:20 +0000 Subject: [PATCH] Initial unit tests for API --- src/backend/InvenTree/common/serializers.py | 2 +- src/backend/InvenTree/common/test_api.py | 69 +++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/backend/InvenTree/common/test_api.py diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index 43532206e0..fc7e6ddcad 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -798,7 +798,7 @@ class ParameterSerializer( mixin_class=InvenTreeParameterMixin, label=_('Model Type'), default='', - required=False, + allow_null=False, ) updated_by_detail = enable_filter( diff --git a/src/backend/InvenTree/common/test_api.py b/src/backend/InvenTree/common/test_api.py new file mode 100644 index 0000000000..db776f3209 --- /dev/null +++ b/src/backend/InvenTree/common/test_api.py @@ -0,0 +1,69 @@ +"""API unit tests for InvenTree common functionality.""" + +from django.urls import reverse + +from InvenTree.unit_test import InvenTreeAPITestCase + + +class ParameterAPITests(InvenTreeAPITestCase): + """Tests for the Parameter API.""" + + roles = 'all' + + def test_template_options(self): + """Test OPTIONS information for the ParameterTemplate API endpoint.""" + url = reverse('api-parameter-template-list') + + options = self.options(url) + actions = options.data['actions']['GET'] + + for field in [ + 'pk', + 'name', + 'units', + 'description', + 'model_type', + 'selectionlist', + 'enabled', + ]: + self.assertIn( + field, + actions.keys(), + f'Field "{field}" missing from ParameterTemplate API!', + ) + + model_types = [act['value'] for act in actions['model_type']['choices']] + + for mdl in [ + 'part.part', + 'build.build', + 'company.company', + 'order.purchaseorder', + ]: + self.assertIn( + mdl, + model_types, + f'Model type "{mdl}" missing from ParameterTemplate API!', + ) + + def test_parameter_options(self): + """Test OPTIONS information for the Parameter API endpoint.""" + url = reverse('api-parameter-list') + + options = self.options(url) + actions = options.data['actions']['GET'] + + for field in [ + 'pk', + 'template', + 'model_type', + 'model_id', + 'data', + 'data_numeric', + ]: + self.assertIn( + field, actions.keys(), f'Field "{field}" missing from Parameter API!' + ) + + self.assertFalse(actions['data']['read_only']) + self.assertFalse(actions['model_type']['read_only'])