You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kompass/jdav_web/finance/tests/migrations.py

73 lines
2.7 KiB
Python

import django.test
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",
)