From 35d4f7dc4e5d98724db47013a953cbac37b6ee54 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Sun, 12 Oct 2025 01:36:56 +0200 Subject: [PATCH] add migratiton test for custom migration --- jdav_web/finance/tests/__init__.py | 1 + jdav_web/finance/tests/migrations.py | 70 ++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 jdav_web/finance/tests/migrations.py diff --git a/jdav_web/finance/tests/__init__.py b/jdav_web/finance/tests/__init__.py index 41989f9..023e7d7 100644 --- a/jdav_web/finance/tests/__init__.py +++ b/jdav_web/finance/tests/__init__.py @@ -1,3 +1,4 @@ from .admin import * from .models import * from .rules import * +from .migrations import * diff --git a/jdav_web/finance/tests/migrations.py b/jdav_web/finance/tests/migrations.py new file mode 100644 index 0000000..5c8894a --- /dev/null +++ b/jdav_web/finance/tests/migrations.py @@ -0,0 +1,70 @@ +import django.test +from django.apps import apps +from django.db import connection +from django.db.migrations.executor import MigrationExecutor + + +class StatusMigrationTestCase(django.test.TransactionTestCase): + """Test the migration from submitted/confirmed fields to status field.""" + + app = 'finance' + migrate_from = [('finance', '0009_statement_ljp_to')] + migrate_to = [('finance', '0010_statement_status')] + + def setUp(self): + # Get the state before migration + executor = MigrationExecutor(connection) + executor.migrate(self.migrate_from) + + # Get the old models (before migration) + old_apps = executor.loader.project_state(self.migrate_from).apps + self.Statement = old_apps.get_model(self.app, 'Statement') + + # Create statements with different combinations of submitted/confirmed + # created_by is nullable, so we don't need to create a Member + self.unsubmitted = self.Statement.objects.create( + short_description='Unsubmitted Statement', + submitted=False, + confirmed=False + ) + + self.submitted = self.Statement.objects.create( + short_description='Submitted Statement', + submitted=True, + confirmed=False + ) + + self.confirmed = self.Statement.objects.create( + short_description='Confirmed Statement', + submitted=True, + confirmed=True + ) + + def test_status_field_migration(self): + """Test that status field is correctly set from old submitted/confirmed fields.""" + # Run the migration + executor = MigrationExecutor(connection) + executor.loader.build_graph() + executor.migrate(self.migrate_to) + + # Get the new models (after migration) + new_apps = executor.loader.project_state(self.migrate_to).apps + Statement = new_apps.get_model(self.app, 'Statement') + + # Constants from the Statement model + UNSUBMITTED = 0 + SUBMITTED = 1 + CONFIRMED = 2 + + # Verify the migration worked correctly + unsubmitted = Statement.objects.get(pk=self.unsubmitted.pk) + self.assertEqual(unsubmitted.status, UNSUBMITTED, + 'Statement with submitted=False, confirmed=False should have status=UNSUBMITTED') + + submitted = Statement.objects.get(pk=self.submitted.pk) + self.assertEqual(submitted.status, SUBMITTED, + 'Statement with submitted=True, confirmed=False should have status=SUBMITTED') + + confirmed = Statement.objects.get(pk=self.confirmed.pk) + self.assertEqual(confirmed.status, CONFIRMED, + 'Statement with submitted=True, confirmed=True should have status=CONFIRMED')