From 1efd2f777639ffd052bfb60215a92ca309a73e01 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 30 Nov 2025 02:14:40 +0000 Subject: [PATCH] Ensure that parameters are removed when deleting the linked object --- src/backend/InvenTree/common/test_api.py | 40 ++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/backend/InvenTree/common/test_api.py b/src/backend/InvenTree/common/test_api.py index 048ae4c92c..885f590a83 100644 --- a/src/backend/InvenTree/common/test_api.py +++ b/src/backend/InvenTree/common/test_api.py @@ -270,3 +270,43 @@ class ParameterAPITests(InvenTreeAPITestCase): len(templates), 'Incorrect number of parameter annotations found', ) + + def test_parameter_delete(self): + """Test that associated parameters are correctly deleted when removing the linked model.""" + from part.models import Part + + part = Part.objects.create( + name='Test Part', description='A part for testing', active=False + ) + + # Create a ParameterTemplate for the Part model + template = common.models.ParameterTemplate.objects.create( + name='Test Parameter', + description='A parameter template for testing parameter deletion', + model_type=None, + ) + + # Create a Parameter for the Build + parameter = common.models.Parameter.objects.create( + template=template, + model_type=part.get_content_type(), + model_id=part.pk, + data='Test data', + ) + + self.assertTrue( + common.models.Parameter.objects.filter(pk=parameter.pk).exists() + ) + + N = common.models.Parameter.objects.count() + + # Now delete the part instance + self.assignRole('part.delete') + self.delete( + reverse('api-part-detail', kwargs={'pk': part.pk}), expected_code=204 + ) + + self.assertEqual(common.models.Parameter.objects.count(), N - 1) + self.assertFalse( + common.models.Parameter.objects.filter(template=template.pk).exists() + )