mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #24550 -- Added migration operation description to sqlmigrate output
Thanks Tim Graham for the review.
This commit is contained in:
@@ -289,29 +289,64 @@ class MigrateTests(MigrationTestBase):
|
||||
)
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"})
|
||||
def test_sqlmigrate(self):
|
||||
def test_sqlmigrate_forwards(self):
|
||||
"""
|
||||
Makes sure that sqlmigrate does something.
|
||||
"""
|
||||
# Make sure the output is wrapped in a transaction
|
||||
out = six.StringIO()
|
||||
call_command("sqlmigrate", "migrations", "0001", stdout=out)
|
||||
output = out.getvalue()
|
||||
self.assertIn(connection.ops.start_transaction_sql(), output)
|
||||
self.assertIn(connection.ops.end_transaction_sql(), output)
|
||||
output = out.getvalue().lower()
|
||||
|
||||
# Test forwards. All the databases agree on CREATE TABLE, at least.
|
||||
out = six.StringIO()
|
||||
call_command("sqlmigrate", "migrations", "0001", stdout=out)
|
||||
self.assertIn("create table", out.getvalue().lower())
|
||||
index_tx_start = output.find(connection.ops.start_transaction_sql().lower())
|
||||
index_op_desc_author = output.find('-- create model author')
|
||||
index_create_table = output.find('create table')
|
||||
index_op_desc_tribble = output.find('-- create model tribble')
|
||||
index_op_desc_unique_together = output.find('-- alter unique_together')
|
||||
index_tx_end = output.find(connection.ops.end_transaction_sql().lower())
|
||||
|
||||
self.assertGreater(index_tx_start, -1, "Transaction start not found")
|
||||
self.assertGreater(index_op_desc_author, index_tx_start,
|
||||
"Operation description (author) not found or found before transaction start")
|
||||
self.assertGreater(index_create_table, index_op_desc_author,
|
||||
"CREATE TABLE not found or found before operation description (author)")
|
||||
self.assertGreater(index_op_desc_tribble, index_create_table,
|
||||
"Operation description (tribble) not found or found before CREATE TABLE (author)")
|
||||
self.assertGreater(index_op_desc_unique_together, index_op_desc_tribble,
|
||||
"Operation description (unique_together) not found or found before operation description (tribble)")
|
||||
self.assertGreater(index_tx_end, index_op_desc_unique_together,
|
||||
"Transaction end not found or found before operation description (unique_together)")
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"})
|
||||
def test_sqlmigrate_backwards(self):
|
||||
"""
|
||||
Makes sure that sqlmigrate does something.
|
||||
"""
|
||||
# Cannot generate the reverse SQL unless we've applied the migration.
|
||||
call_command("migrate", "migrations", verbosity=0)
|
||||
|
||||
# And backwards is a DROP TABLE
|
||||
out = six.StringIO()
|
||||
call_command("sqlmigrate", "migrations", "0001", stdout=out, backwards=True)
|
||||
self.assertIn("drop table", out.getvalue().lower())
|
||||
output = out.getvalue().lower()
|
||||
|
||||
index_tx_start = output.find(connection.ops.start_transaction_sql().lower())
|
||||
index_op_desc_unique_together = output.find('-- alter unique_together')
|
||||
index_op_desc_tribble = output.find('-- create model tribble')
|
||||
index_op_desc_author = output.find('-- create model author')
|
||||
index_drop_table = output.rfind('drop table')
|
||||
index_tx_end = output.find(connection.ops.end_transaction_sql().lower())
|
||||
|
||||
self.assertGreater(index_tx_start, -1, "Transaction start not found")
|
||||
self.assertGreater(index_op_desc_unique_together, index_tx_start,
|
||||
"Operation description (unique_together) not found or found before transaction start")
|
||||
self.assertGreater(index_op_desc_tribble, index_op_desc_unique_together,
|
||||
"Operation description (tribble) not found or found before operation description (unique_together)")
|
||||
self.assertGreater(index_op_desc_author, index_op_desc_tribble,
|
||||
"Operation description (author) not found or found before operation description (tribble)")
|
||||
|
||||
self.assertGreater(index_drop_table, index_op_desc_author,
|
||||
"DROP TABLE not found or found before operation description (author)")
|
||||
self.assertGreater(index_tx_end, index_op_desc_unique_together,
|
||||
"Transaction end not found or found before DROP TABLE")
|
||||
|
||||
# Cleanup by unmigrating everything
|
||||
call_command("migrate", "migrations", "zero", verbosity=0)
|
||||
|
||||
Reference in New Issue
Block a user