Unverified Kaydet (Commit) 8d4ab0c4 authored tarafından Tim Graham's avatar Tim Graham Kaydeden (comit) GitHub

Added tests for migrate logging and error messages.

üst 15641950
...@@ -36,7 +36,11 @@ class MigrateTests(MigrationTestBase): ...@@ -36,7 +36,11 @@ class MigrateTests(MigrationTestBase):
self.assertTableNotExists("migrations_tribble") self.assertTableNotExists("migrations_tribble")
self.assertTableNotExists("migrations_book") self.assertTableNotExists("migrations_book")
# Run the migrations to 0001 only # 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 # The correct tables exist
self.assertTableExists("migrations_author") self.assertTableExists("migrations_author")
self.assertTableExists("migrations_tribble") self.assertTableExists("migrations_tribble")
...@@ -48,7 +52,11 @@ class MigrateTests(MigrationTestBase): ...@@ -48,7 +52,11 @@ class MigrateTests(MigrationTestBase):
self.assertTableNotExists("migrations_tribble") self.assertTableNotExists("migrations_tribble")
self.assertTableExists("migrations_book") self.assertTableExists("migrations_book")
# Unmigrate everything # 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 # Tables are gone
self.assertTableNotExists("migrations_author") self.assertTableNotExists("migrations_author")
self.assertTableNotExists("migrations_tribble") self.assertTableNotExists("migrations_tribble")
...@@ -64,6 +72,27 @@ class MigrateTests(MigrationTestBase): ...@@ -64,6 +72,27 @@ class MigrateTests(MigrationTestBase):
call_command('migrate', skip_checks=False, no_color=True, stdout=out) call_command('migrate', skip_checks=False, no_color=True, stdout=out)
self.assertIn('Apply all migrations: migrated_app', out.getvalue()) 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"}) @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_initial_false"})
def test_migrate_initial_false(self): def test_migrate_initial_false(self):
""" """
...@@ -552,13 +581,18 @@ class MigrateTests(MigrationTestBase): ...@@ -552,13 +581,18 @@ class MigrateTests(MigrationTestBase):
For an app without migrations, editor.execute() is used for executing For an app without migrations, editor.execute() is used for executing
the syncdb deferred SQL. the syncdb deferred SQL.
""" """
stdout = io.StringIO()
with mock.patch.object(BaseDatabaseSchemaEditor, 'execute') as execute: 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)]) create_table_count = len([call for call in execute.mock_calls if 'CREATE TABLE' in str(call)])
self.assertEqual(create_table_count, 2) self.assertEqual(create_table_count, 2)
# There's at least one deferred SQL for creating the foreign key # There's at least one deferred SQL for creating the foreign key
# index. # index.
self.assertGreater(len(execute.mock_calls), 2) 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"}) @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_squashed"})
def test_migrate_record_replaced(self): def test_migrate_record_replaced(self):
......
from django.db import migrations
class Migration(migrations.Migration):
pass
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [('migrations', 'a')]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment