mirror of
https://github.com/django/django.git
synced 2025-08-04 10:59:45 +00:00
Fixed #26117 -- Consulted database routers in initial migration detection.
Thanks Simon Charette for help.
This commit is contained in:
parent
1f8cfcf3b4
commit
fc584f0685
5 changed files with 93 additions and 45 deletions
|
@ -7,7 +7,7 @@ import os
|
|||
|
||||
from django.apps import apps
|
||||
from django.core.management import CommandError, call_command
|
||||
from django.db import DatabaseError, connection, models
|
||||
from django.db import DatabaseError, connection, connections, models
|
||||
from django.db.migrations.recorder import MigrationRecorder
|
||||
from django.test import ignore_warnings, mock, override_settings
|
||||
from django.utils import six
|
||||
|
@ -22,6 +22,7 @@ class MigrateTests(MigrationTestBase):
|
|||
"""
|
||||
Tests running the migrate command.
|
||||
"""
|
||||
multi_db = True
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"})
|
||||
def test_migrate(self):
|
||||
|
@ -75,25 +76,36 @@ class MigrateTests(MigrationTestBase):
|
|||
self.assertTableNotExists("migrations_tribble")
|
||||
self.assertTableNotExists("migrations_book")
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"})
|
||||
@override_settings(
|
||||
MIGRATION_MODULES={"migrations": "migrations.test_migrations"},
|
||||
DATABASE_ROUTERS=['migrations.routers.TestRouter'],
|
||||
)
|
||||
def test_migrate_fake_initial(self):
|
||||
"""
|
||||
#24184 - Tests that --fake-initial only works if all tables created in
|
||||
the initial migration of an app exists
|
||||
--fake-initial only works if all tables created in the initial
|
||||
migration of an app exists. Database routers must be obeyed when doing
|
||||
that check.
|
||||
"""
|
||||
# Make sure no tables are created
|
||||
self.assertTableNotExists("migrations_author")
|
||||
self.assertTableNotExists("migrations_tribble")
|
||||
for db in connections:
|
||||
self.assertTableNotExists("migrations_author", using=db)
|
||||
self.assertTableNotExists("migrations_tribble", using=db)
|
||||
# Run the migrations to 0001 only
|
||||
call_command("migrate", "migrations", "0001", verbosity=0)
|
||||
call_command("migrate", "migrations", "0001", verbosity=0, database="other")
|
||||
# Make sure the right tables exist
|
||||
self.assertTableExists("migrations_author")
|
||||
self.assertTableExists("migrations_tribble")
|
||||
self.assertTableNotExists("migrations_tribble")
|
||||
# Also check the "other" database
|
||||
self.assertTableNotExists("migrations_author", using="other")
|
||||
self.assertTableExists("migrations_tribble", using="other")
|
||||
|
||||
# Fake a roll-back
|
||||
call_command("migrate", "migrations", "zero", fake=True, verbosity=0)
|
||||
call_command("migrate", "migrations", "zero", fake=True, verbosity=0, database="other")
|
||||
# Make sure the tables still exist
|
||||
self.assertTableExists("migrations_author")
|
||||
self.assertTableExists("migrations_tribble")
|
||||
self.assertTableExists("migrations_tribble", using="other")
|
||||
# Try to run initial migration
|
||||
with self.assertRaises(DatabaseError):
|
||||
call_command("migrate", "migrations", "0001", verbosity=0)
|
||||
|
@ -101,18 +113,24 @@ class MigrateTests(MigrationTestBase):
|
|||
out = six.StringIO()
|
||||
with mock.patch('django.core.management.color.supports_color', lambda *args: False):
|
||||
call_command("migrate", "migrations", "0001", fake_initial=True, stdout=out, verbosity=1)
|
||||
call_command("migrate", "migrations", "0001", fake_initial=True, verbosity=0, database="other")
|
||||
self.assertIn(
|
||||
"migrations.0001_initial... faked",
|
||||
out.getvalue().lower()
|
||||
)
|
||||
# Run migrations all the way
|
||||
call_command("migrate", verbosity=0)
|
||||
call_command("migrate", verbosity=0, database="other")
|
||||
# Make sure the right tables exist
|
||||
self.assertTableExists("migrations_author")
|
||||
self.assertTableNotExists("migrations_tribble")
|
||||
self.assertTableExists("migrations_book")
|
||||
self.assertTableNotExists("migrations_author", using="other")
|
||||
self.assertTableNotExists("migrations_tribble", using="other")
|
||||
self.assertTableNotExists("migrations_book", using="other")
|
||||
# Fake a roll-back
|
||||
call_command("migrate", "migrations", "zero", fake=True, verbosity=0)
|
||||
call_command("migrate", "migrations", "zero", fake=True, verbosity=0, database="other")
|
||||
# Make sure the tables still exist
|
||||
self.assertTableExists("migrations_author")
|
||||
self.assertTableNotExists("migrations_tribble")
|
||||
|
@ -127,12 +145,15 @@ class MigrateTests(MigrationTestBase):
|
|||
call_command("migrate", "migrations", fake_initial=True, verbosity=0)
|
||||
# Fake a apply
|
||||
call_command("migrate", "migrations", fake=True, verbosity=0)
|
||||
call_command("migrate", "migrations", fake=True, verbosity=0, database="other")
|
||||
# Unmigrate everything
|
||||
call_command("migrate", "migrations", "zero", verbosity=0)
|
||||
call_command("migrate", "migrations", "zero", verbosity=0, database="other")
|
||||
# Make sure it's all gone
|
||||
self.assertTableNotExists("migrations_author")
|
||||
self.assertTableNotExists("migrations_tribble")
|
||||
self.assertTableNotExists("migrations_book")
|
||||
for db in connections:
|
||||
self.assertTableNotExists("migrations_author", using=db)
|
||||
self.assertTableNotExists("migrations_tribble", using=db)
|
||||
self.assertTableNotExists("migrations_book", using=db)
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_fake_split_initial"})
|
||||
def test_migrate_fake_split_initial(self):
|
||||
|
@ -1066,7 +1087,7 @@ class SquashMigrationsTests(MigrationTestBase):
|
|||
out = six.StringIO()
|
||||
with self.temporary_migration_module(module="migrations.test_migrations"):
|
||||
call_command("squashmigrations", "migrations", "0002", interactive=False, verbosity=1, stdout=out)
|
||||
self.assertIn("Optimized from 7 operations to 3 operations.", force_text(out.getvalue()))
|
||||
self.assertIn("Optimized from 8 operations to 3 operations.", force_text(out.getvalue()))
|
||||
|
||||
def test_ticket_23799_squashmigrations_no_optimize(self):
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue