From 8bcca47e8356521f52f0738d9633befd53007cae Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Wed, 15 Apr 2020 02:20:46 -0700 Subject: Added test coverage for DatabaseOperations.sql_flush(). --- tests/backends/sqlite/test_operations.py | 94 ++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 tests/backends/sqlite/test_operations.py (limited to 'tests/backends/sqlite') diff --git a/tests/backends/sqlite/test_operations.py b/tests/backends/sqlite/test_operations.py new file mode 100644 index 0000000000..34c4d823da --- /dev/null +++ b/tests/backends/sqlite/test_operations.py @@ -0,0 +1,94 @@ +import unittest + +from django.core.management.color import no_style +from django.db import connection +from django.test import TestCase + +from ..models import Person, Tag + + +@unittest.skipUnless(connection.vendor == 'sqlite', 'SQLite tests.') +class SQLiteOperationsTests(TestCase): + def test_sql_flush(self): + self.assertEqual( + connection.ops.sql_flush( + no_style(), + [Person._meta.db_table, Tag._meta.db_table], + [], + ), + [ + 'DELETE FROM "backends_person";', + 'DELETE FROM "backends_tag";', + ], + ) + + def test_sql_flush_allow_cascade(self): + statements = connection.ops.sql_flush( + no_style(), + [Person._meta.db_table, Tag._meta.db_table], + [], + allow_cascade=True, + ) + self.assertEqual( + # The tables are processed in an unordered set. + sorted(statements), + [ + 'DELETE FROM "backends_person";', + 'DELETE FROM "backends_tag";', + 'DELETE FROM "backends_verylongmodelnamezzzzzzzzzzzzzzzzzzzzzz' + 'zzzzzzzzzzzzzzzzzzzz_m2m_also_quite_long_zzzzzzzzzzzzzzzzzzzz' + 'zzzzzzzzzzzzzzzzzzzzzzz";', + ], + ) + + def test_sql_flush_sequences(self): + # sequences doesn't change statements on SQLite. + self.assertEqual( + connection.ops.sql_flush( + no_style(), + [Person._meta.db_table, Tag._meta.db_table], + [ + { + 'table': Person._meta.db_table, + 'column': Person._meta.pk.db_column, + }, + { + 'table': Tag._meta.db_table, + 'column': Tag._meta.pk.db_column, + }, + ], + ), + [ + 'DELETE FROM "backends_person";', + 'DELETE FROM "backends_tag";', + ], + ) + + def test_sql_flush_sequences_allow_cascade(self): + # sequences doesn't change statements on SQLite. + statements = connection.ops.sql_flush( + no_style(), + [Person._meta.db_table, Tag._meta.db_table], + [ + { + 'table': Person._meta.db_table, + 'column': Person._meta.pk.db_column, + }, + { + 'table': Tag._meta.db_table, + 'column': Tag._meta.pk.db_column, + }, + ], + allow_cascade=True, + ) + self.assertEqual( + # The tables are processed in an unordered set. + sorted(statements), + [ + 'DELETE FROM "backends_person";', + 'DELETE FROM "backends_tag";', + 'DELETE FROM "backends_verylongmodelnamezzzzzzzzzzzzzzzzzzzzzz' + 'zzzzzzzzzzzzzzzzzzzz_m2m_also_quite_long_zzzzzzzzzzzzzzzzzzzz' + 'zzzzzzzzzzzzzzzzzzzzzzz";', + ], + ) -- cgit v1.3