From 4086ff9ecbf4824cc5c0cc94e4c13ef474a22b9b Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Thu, 15 Dec 2016 13:31:08 -0500 Subject: [PATCH] [1.10.x] Refs #27558 -- Isolated indexes test on MySQL. MySQL schema changes must be done in TransactionTestCase. Backport of f94475e5262abe78d9771bc353f741b20cc3c725 from master --- tests/indexes/tests.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/tests/indexes/tests.py b/tests/indexes/tests.py index 8db3adc66e..37cdcc06a4 100644 --- a/tests/indexes/tests.py +++ b/tests/indexes/tests.py @@ -3,7 +3,7 @@ from unittest import skipUnless from django.db import connection from django.db.models.deletion import CASCADE from django.db.models.fields.related import ForeignKey -from django.test import TestCase +from django.test import TestCase, TransactionTestCase from .models import Article, ArticleTranslation, IndexTogetherSingleList @@ -60,7 +60,11 @@ class SchemaIndexesTests(TestCase): index_sql = connection.schema_editor()._model_indexes_sql(Article) self.assertEqual(len(index_sql), 1) - @skipUnless(connection.vendor == 'mysql', "This is a mysql-specific issue") + +@skipUnless(connection.vendor == 'mysql', 'MySQL tests') +class SchemaIndexesMySQLTests(TransactionTestCase): + available_apps = ['indexes'] + def test_no_index_for_foreignkey(self): """ MySQL on InnoDB already creates indexes automatically for foreign keys. @@ -79,12 +83,18 @@ class SchemaIndexesTests(TestCase): # The index also shouldn't be created if the ForeignKey is added after # the model was created. - with connection.schema_editor() as editor: - new_field = ForeignKey(Article, CASCADE) - new_field.set_attributes_from_name('new_foreign_key') - editor.add_field(ArticleTranslation, new_field) - self.assertEqual(editor.deferred_sql, [ - 'ALTER TABLE `indexes_articletranslation` ' - 'ADD CONSTRAINT `indexes_articl_new_foreign_key_id_d27a9146_fk_indexes_article_id` ' - 'FOREIGN KEY (`new_foreign_key_id`) REFERENCES `indexes_article` (`id`)' - ]) + field_created = False + try: + with connection.schema_editor() as editor: + new_field = ForeignKey(Article, CASCADE) + new_field.set_attributes_from_name('new_foreign_key') + editor.add_field(ArticleTranslation, new_field) + self.assertEqual(editor.deferred_sql, [ + 'ALTER TABLE `indexes_articletranslation` ' + 'ADD CONSTRAINT `indexes_articl_new_foreign_key_id_d27a9146_fk_indexes_article_id` ' + 'FOREIGN KEY (`new_foreign_key_id`) REFERENCES `indexes_article` (`id`)' + ]) + finally: + if field_created: + with connection.schema_editor() as editor: + editor.remove_field(ArticleTranslation, new_field)