'Tests basic usage of the migrate command when a model uses Geodjango
fields (#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 (#23030).'

def test_migrate_gis(self):

    self.assertTableExists('gis_migrations_neighborhood')
    self.assertTableExists('gis_migrations_household')
    self.assertTableExists('gis_migrations_family')
    if connection.features.supports_raster:
        self.assertTableExists('gis_migrations_heatmap')
    call_command('migrate', 'gis_migrations', 'zero', verbosity=0)
    self.assertTableNotExists('gis_migrations_neighborhood')
    self.assertTableNotExists('gis_migrations_household')
    self.assertTableNotExists('gis_migrations_family')
    if connection.features.supports_raster:
        self.assertTableNotExists('gis_migrations_heatmap')
    try:
        GeoColumn = connection.ops.geometry_columns()
    except NotImplementedError:
        pass
    else:
        qs = GeoColumn.objects.filter(**{('%s__in' % GeoColumn.table_name_col()): ['gis_neighborhood', 'gis_household']})
        self.assertEqual(qs.count(), 0)
    call_command('migrate', 'gis_migrations', verbosity=0)
