From c32c220881ebca2be7b7bb5bec6ca4b25d1d6454 Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Thu, 28 Aug 2014 14:12:49 -0400 Subject: [1.7.x] Fixed #23379 -- Corrected a referencing issue in sql_create. Thanks to Trac alias flakfizer for the report. Backport of 1e404180c1 from master --- tests/commands_sql/tests.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'tests/commands_sql') diff --git a/tests/commands_sql/tests.py b/tests/commands_sql/tests.py index 8360648e51..d057883728 100644 --- a/tests/commands_sql/tests.py +++ b/tests/commands_sql/tests.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +import re + from django.apps import apps from django.core.management.color import no_style from django.core.management.sql import (sql_create, sql_delete, sql_indexes, @@ -19,11 +21,25 @@ class SQLCommandsTestCase(TestCase): def test_sql_create(self): app_config = apps.get_app_config('commands_sql') output = sql_create(app_config, no_style(), connections[DEFAULT_DB_ALIAS]) - create_tables = [o for o in output if o.startswith('CREATE TABLE')] - self.assertEqual(len(create_tables), 3) - # Lower so that Oracle's upper case tbl names wont break - sql = create_tables[-1].lower() - six.assertRegex(self, sql, r'^create table .commands_sql_book.*') + + tables = set() + create_table_re = re.compile(r'^create table .(?P[\w_]+).*', re.IGNORECASE) + reference_re = re.compile(r'.* references .(?P
[\w_]+).*', re.IGNORECASE) + for statement in output: + create_table = create_table_re.match(statement) + if create_table: + tables.add(create_table.group('table')) + continue + reference = reference_re.match(statement) + if reference: + table = reference.group('table') + self.assertIn( + table, tables, "The table %s is referenced before its creation." % table + ) + + self.assertEqual(tables, { + 'commands_sql_comment', 'commands_sql_book', 'commands_sql_book_comments' + }) def test_sql_delete(self): app_config = apps.get_app_config('commands_sql') -- cgit v1.3