Refs #27558 -- Isolated indexes test on MySQL.

MySQL schema changes must be done in TransactionTestCase.
This commit is contained in:
Tim Graham 2016-12-15 13:31:08 -05:00 committed by GitHub
parent ebb85d1e79
commit f94475e526
1 changed files with 22 additions and 11 deletions

View File

@ -3,7 +3,7 @@ from unittest import skipUnless
from django.db import connection from django.db import connection
from django.db.models.deletion import CASCADE from django.db.models.deletion import CASCADE
from django.db.models.fields.related import ForeignKey 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 from .models import Article, ArticleTranslation, IndexTogetherSingleList
@ -84,7 +84,11 @@ class SchemaIndexesTests(TestCase):
index_sql = connection.schema_editor()._model_indexes_sql(Article) index_sql = connection.schema_editor()._model_indexes_sql(Article)
self.assertEqual(len(index_sql), 1) 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): def test_no_index_for_foreignkey(self):
""" """
MySQL on InnoDB already creates indexes automatically for foreign keys. MySQL on InnoDB already creates indexes automatically for foreign keys.
@ -103,12 +107,19 @@ class SchemaIndexesTests(TestCase):
# The index also shouldn't be created if the ForeignKey is added after # The index also shouldn't be created if the ForeignKey is added after
# the model was created. # the model was created.
with connection.schema_editor() as editor: field_created = False
new_field = ForeignKey(Article, CASCADE) try:
new_field.set_attributes_from_name('new_foreign_key') with connection.schema_editor() as editor:
editor.add_field(ArticleTranslation, new_field) new_field = ForeignKey(Article, CASCADE)
self.assertEqual(editor.deferred_sql, [ new_field.set_attributes_from_name('new_foreign_key')
'ALTER TABLE `indexes_articletranslation` ' editor.add_field(ArticleTranslation, new_field)
'ADD CONSTRAINT `indexes_articletrans_new_foreign_key_id_d27a9146_fk_indexes_a` ' field_created = True
'FOREIGN KEY (`new_foreign_key_id`) REFERENCES `indexes_article` (`id`)' self.assertEqual(editor.deferred_sql, [
]) 'ALTER TABLE `indexes_articletranslation` '
'ADD CONSTRAINT `indexes_articletrans_new_foreign_key_id_d27a9146_fk_indexes_a` '
'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)