From fb8a2014ac2458f6f39e5e35dfa4acf25abde66d Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 3 Dec 2025 13:37:47 +0000 Subject: [PATCH] Add migration unit test to ensure that primary keys are maintained --- .../migrations/0041_auto_20251203_1244.py | 2 +- src/backend/InvenTree/part/test_migrations.py | 32 +++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/backend/InvenTree/common/migrations/0041_auto_20251203_1244.py b/src/backend/InvenTree/common/migrations/0041_auto_20251203_1244.py index 31e4973b7e..799bd228c8 100644 --- a/src/backend/InvenTree/common/migrations/0041_auto_20251203_1244.py +++ b/src/backend/InvenTree/common/migrations/0041_auto_20251203_1244.py @@ -85,7 +85,7 @@ def update_global_setting(apps, schema_editor): setting.save() print(f"Updated global setting key from {OLD_KEY} to {NEW_KEY}.") except GlobalSetting.DoesNotExist: - print(f"Global setting {OLD_KEY} does not exist; no update needed.") + pass class Migration(migrations.Migration): diff --git a/src/backend/InvenTree/part/test_migrations.py b/src/backend/InvenTree/part/test_migrations.py index 2777ce09e4..643ec7043f 100644 --- a/src/backend/InvenTree/part/test_migrations.py +++ b/src/backend/InvenTree/part/test_migrations.py @@ -290,7 +290,7 @@ class TestPartParameterDeletion(MigratorTestCase): UNITS = ['mm', 'Ampere', 'kg'] migrate_from = ('part', '0143_alter_part_image') - migrate_to = ('part', '0145_remove_partparametertemplate_selectionlist_and_more') + migrate_to = ('part', '0146_auto_20251203_1241') def prepare(self): """Prepare some parts and parameters.""" @@ -311,21 +311,31 @@ class TestPartParameterDeletion(MigratorTestCase): tree_id=0, ) + self.templates = {} + # Create some parameter templates for idx, units in enumerate(self.UNITS): - PartParameterTemplate.objects.create( + template = PartParameterTemplate.objects.create( name=f'Template {idx + 1}', description=f'Description for template {idx + 1}', units=units, ) + self.templates[template.pk] = template + + # Keep track of the parameters we create + # We need to ensure that the PK values are preserved across the migration + self.parameters = {} + # Create some parameters for ii, part in enumerate(Part.objects.all()): for jj, template in enumerate(PartParameterTemplate.objects.all()): - PartParameter.objects.create( + parameter = PartParameter.objects.create( part=part, template=template, data=str(ii * jj) ) + self.parameters[parameter.pk] = parameter + self.assertEqual(Part.objects.count(), 3) self.assertEqual(PartParameterTemplate.objects.count(), 3) self.assertEqual(PartParameter.objects.count(), 9) @@ -357,3 +367,19 @@ class TestPartParameterDeletion(MigratorTestCase): for unit in self.UNITS: self.assertTrue(params.filter(template__units=unit).exists()) + + # Test that each parameter has been migrated correctly + for pk, old_parameter in self.parameters.items(): + new_parameter = Parameter.objects.get(pk=pk) + + self.assertEqual(new_parameter.data, old_parameter.data) + self.assertEqual(new_parameter.template.name, old_parameter.template.name) + self.assertEqual(new_parameter.template.units, old_parameter.template.units) + + # Test that each template has been migrated correctly + for pk, old_template in self.templates.items(): + new_template = ParameterTemplate.objects.get(pk=pk) + + self.assertEqual(new_template.name, old_template.name) + self.assertEqual(new_template.description, old_template.description) + self.assertTrue(new_template.enabled)