From bf8b625a3bb6c2cb5f1be3713f3bafe2c1050366 Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Wed, 12 Sep 2018 01:23:35 +0100 Subject: Refs #29722 -- Added introspection of materialized views for PostgreSQL. --- tests/inspectdb/tests.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tests') diff --git a/tests/inspectdb/tests.py b/tests/inspectdb/tests.py index 83c49eb7e3..849773ef9e 100644 --- a/tests/inspectdb/tests.py +++ b/tests/inspectdb/tests.py @@ -310,6 +310,30 @@ class InspectDBTransactionalTests(TransactionTestCase): with connection.cursor() as cursor: cursor.execute('DROP VIEW inspectdb_people_view') + @skipUnless(connection.vendor == 'postgresql', 'PostgreSQL specific SQL') + def test_include_materialized_views(self): + """inspectdb --include-views creates models for database materialized views.""" + with connection.cursor() as cursor: + cursor.execute( + 'CREATE MATERIALIZED VIEW inspectdb_people_materialized_view AS ' + 'SELECT id, name FROM inspectdb_people' + ) + out = StringIO() + view_model = 'class InspectdbPeopleMaterializedView(models.Model):' + view_managed = 'managed = False # Created from a view.' + try: + call_command('inspectdb', table_name_filter=inspectdb_tables_only, stdout=out) + no_views_output = out.getvalue() + self.assertNotIn(view_model, no_views_output) + self.assertNotIn(view_managed, no_views_output) + call_command('inspectdb', table_name_filter=inspectdb_tables_only, include_views=True, stdout=out) + with_views_output = out.getvalue() + self.assertIn(view_model, with_views_output) + self.assertIn(view_managed, with_views_output) + finally: + with connection.cursor() as cursor: + cursor.execute('DROP MATERIALIZED VIEW IF EXISTS inspectdb_people_materialized_view') + @skipUnless(connection.vendor == 'postgresql', 'PostgreSQL specific SQL') def test_foreign_data_wrapper(self): with connection.cursor() as cursor: -- cgit v1.3