summaryrefslogtreecommitdiff
path: root/tests/gis_tests/gis_migrations/test_commands.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gis_tests/gis_migrations/test_commands.py')
-rw-r--r--tests/gis_tests/gis_migrations/test_commands.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/gis_tests/gis_migrations/test_commands.py b/tests/gis_tests/gis_migrations/test_commands.py
new file mode 100644
index 0000000000..b4fe597bca
--- /dev/null
+++ b/tests/gis_tests/gis_migrations/test_commands.py
@@ -0,0 +1,61 @@
+from __future__ import unicode_literals
+
+from django.core.management import call_command
+from django.db import connection
+from django.test import TransactionTestCase, skipUnlessDBFeature
+
+
+@skipUnlessDBFeature("gis_enabled")
+class MigrateTests(TransactionTestCase):
+ """
+ Tests running the migrate command in Geodjango.
+ """
+ available_apps = ["gis_tests.gis_migrations"]
+
+ def get_table_description(self, table):
+ with connection.cursor() as cursor:
+ return connection.introspection.get_table_description(cursor, table)
+
+ def assertTableExists(self, table):
+ with connection.cursor() as cursor:
+ self.assertIn(table, connection.introspection.table_names(cursor))
+
+ def assertTableNotExists(self, table):
+ with connection.cursor() as cursor:
+ self.assertNotIn(table, connection.introspection.table_names(cursor))
+
+ def test_migrate_gis(self):
+ """
+ Tests basic usage of the migrate command when a model uses Geodjango
+ fields. Regression test for ticket #22001:
+ https://code.djangoproject.com/ticket/22001
+
+ It's also used to showcase an error in migrations where spatialite is
+ enabled and geo tables are renamed resulting in unique constraint
+ failure on geometry_columns. Regression for ticket #23030:
+ https://code.djangoproject.com/ticket/23030
+ """
+ # Make sure the right tables exist
+ self.assertTableExists("gis_migrations_neighborhood")
+ self.assertTableExists("gis_migrations_household")
+ self.assertTableExists("gis_migrations_family")
+ # Unmigrate everything
+ call_command("migrate", "gis_migrations", "zero", verbosity=0)
+ # Make sure it's all gone
+ self.assertTableNotExists("gis_migrations_neighborhood")
+ self.assertTableNotExists("gis_migrations_household")
+ self.assertTableNotExists("gis_migrations_family")
+ # Even geometry columns metadata
+ try:
+ GeoColumn = connection.ops.geometry_columns()
+ except NotImplementedError:
+ # Not all GIS backends have geometry columns model
+ pass
+ else:
+ self.assertEqual(
+ GeoColumn.objects.filter(
+ **{'%s__in' % GeoColumn.table_name_col(): ["gis_neighborhood", "gis_household"]}
+ ).count(),
+ 0)
+ # Revert the "unmigration"
+ call_command("migrate", "gis_migrations", verbosity=0)