mirror of
https://github.com/django/django.git
synced 2024-11-24 11:48:10 +01:00
Added tests for migrate logging and error messages.
This commit is contained in:
parent
1564195010
commit
8d4ab0c41f
@ -36,7 +36,11 @@ class MigrateTests(MigrationTestBase):
|
||||
self.assertTableNotExists("migrations_tribble")
|
||||
self.assertTableNotExists("migrations_book")
|
||||
# Run the migrations to 0001 only
|
||||
call_command("migrate", "migrations", "0001", verbosity=0)
|
||||
stdout = io.StringIO()
|
||||
call_command('migrate', 'migrations', '0001', verbosity=1, stdout=stdout, no_color=True)
|
||||
stdout = stdout.getvalue()
|
||||
self.assertIn('Target specific migration: 0001_initial, from migrations', stdout)
|
||||
self.assertIn('Applying migrations.0001_initial... OK', stdout)
|
||||
# The correct tables exist
|
||||
self.assertTableExists("migrations_author")
|
||||
self.assertTableExists("migrations_tribble")
|
||||
@ -48,7 +52,11 @@ class MigrateTests(MigrationTestBase):
|
||||
self.assertTableNotExists("migrations_tribble")
|
||||
self.assertTableExists("migrations_book")
|
||||
# Unmigrate everything
|
||||
call_command("migrate", "migrations", "zero", verbosity=0)
|
||||
stdout = io.StringIO()
|
||||
call_command('migrate', 'migrations', 'zero', verbosity=1, stdout=stdout, no_color=True)
|
||||
stdout = stdout.getvalue()
|
||||
self.assertIn('Unapply all migrations: migrations', stdout)
|
||||
self.assertIn('Unapplying migrations.0002_second... OK', stdout)
|
||||
# Tables are gone
|
||||
self.assertTableNotExists("migrations_author")
|
||||
self.assertTableNotExists("migrations_tribble")
|
||||
@ -64,6 +72,27 @@ class MigrateTests(MigrationTestBase):
|
||||
call_command('migrate', skip_checks=False, no_color=True, stdout=out)
|
||||
self.assertIn('Apply all migrations: migrated_app', out.getvalue())
|
||||
|
||||
@override_settings(INSTALLED_APPS=['migrations', 'migrations.migrations_test_apps.unmigrated_app_syncdb'])
|
||||
def test_app_without_migrations(self):
|
||||
msg = "App 'unmigrated_app_syncdb' does not have migrations."
|
||||
with self.assertRaisesMessage(CommandError, msg):
|
||||
call_command('migrate', app_label='unmigrated_app_syncdb')
|
||||
|
||||
@override_settings(MIGRATION_MODULES={'migrations': 'migrations.test_migrations_clashing_prefix'})
|
||||
def test_ambigious_prefix(self):
|
||||
msg = (
|
||||
"More than one migration matches 'a' in app 'migrations'. Please "
|
||||
"be more specific."
|
||||
)
|
||||
with self.assertRaisesMessage(CommandError, msg):
|
||||
call_command('migrate', app_label='migrations', migration_name='a')
|
||||
|
||||
@override_settings(MIGRATION_MODULES={'migrations': 'migrations.test_migrations'})
|
||||
def test_unknown_prefix(self):
|
||||
msg = "Cannot find a migration matching 'nonexistent' from app 'migrations'."
|
||||
with self.assertRaisesMessage(CommandError, msg):
|
||||
call_command('migrate', app_label='migrations', migration_name='nonexistent')
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_initial_false"})
|
||||
def test_migrate_initial_false(self):
|
||||
"""
|
||||
@ -552,13 +581,18 @@ class MigrateTests(MigrationTestBase):
|
||||
For an app without migrations, editor.execute() is used for executing
|
||||
the syncdb deferred SQL.
|
||||
"""
|
||||
stdout = io.StringIO()
|
||||
with mock.patch.object(BaseDatabaseSchemaEditor, 'execute') as execute:
|
||||
call_command('migrate', run_syncdb=True, verbosity=0)
|
||||
call_command('migrate', run_syncdb=True, verbosity=1, stdout=stdout, no_color=True)
|
||||
create_table_count = len([call for call in execute.mock_calls if 'CREATE TABLE' in str(call)])
|
||||
self.assertEqual(create_table_count, 2)
|
||||
# There's at least one deferred SQL for creating the foreign key
|
||||
# index.
|
||||
self.assertGreater(len(execute.mock_calls), 2)
|
||||
stdout = stdout.getvalue()
|
||||
self.assertIn('Synchronize unmigrated apps: unmigrated_app_syncdb', stdout)
|
||||
self.assertIn('Creating tables...', stdout)
|
||||
self.assertIn('Creating table unmigrated_app_syncdb_classroom', stdout)
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_squashed"})
|
||||
def test_migrate_record_replaced(self):
|
||||
|
5
tests/migrations/test_migrations_clashing_prefix/a.py
Normal file
5
tests/migrations/test_migrations_clashing_prefix/a.py
Normal file
@ -0,0 +1,5 @@
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
pass
|
5
tests/migrations/test_migrations_clashing_prefix/ab.py
Normal file
5
tests/migrations/test_migrations_clashing_prefix/ab.py
Normal file
@ -0,0 +1,5 @@
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [('migrations', 'a')]
|
Loading…
Reference in New Issue
Block a user