From ff9543b351e79de78e7867f255ad15e51555ba4a Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Tue, 5 Dec 2017 09:15:22 +0000 Subject: Refs #25809, #28990 -- Added PostgreSQL version check for BrinIndex support. --- tests/postgres_tests/test_indexes.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'tests/postgres_tests') diff --git a/tests/postgres_tests/test_indexes.py b/tests/postgres_tests/test_indexes.py index 96ff829807..f4ac359a3a 100644 --- a/tests/postgres_tests/test_indexes.py +++ b/tests/postgres_tests/test_indexes.py @@ -1,7 +1,10 @@ +from unittest import mock + from django.contrib.postgres.indexes import ( BrinIndex, BTreeIndex, GinIndex, GistIndex, HashIndex, SpGistIndex, ) from django.db import connection +from django.db.utils import NotSupportedError from django.test import skipUnlessDBFeature from . import PostgreSQLTestCase @@ -208,6 +211,25 @@ class SchemaTests(PostgreSQLTestCase): editor.remove_index(CharFieldModel, index) self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table)) + def test_brin_index_not_supported(self): + index_name = 'brin_index_exception' + index = BrinIndex(fields=['field'], name=index_name) + with self.assertRaisesMessage(NotSupportedError, 'BRIN indexes require PostgreSQL 9.5+.'): + with mock.patch('django.db.connection.features.has_brin_index_support', False): + with connection.schema_editor() as editor: + editor.add_index(CharFieldModel, index) + self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table)) + + @skipUnlessDBFeature('has_brin_index_support') + def test_brin_autosummarize_not_supported(self): + index_name = 'brin_options_exception' + index = BrinIndex(fields=['field'], name=index_name, autosummarize=True) + with self.assertRaisesMessage(NotSupportedError, 'BRIN option autosummarize requires PostgreSQL 10+.'): + with mock.patch('django.db.connection.features.has_brin_autosummarize', False): + with connection.schema_editor() as editor: + editor.add_index(CharFieldModel, index) + self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table)) + def test_btree_index(self): # Ensure the table is there and doesn't have an index. self.assertNotIn('field', self.get_constraints(CharFieldModel._meta.db_table)) -- cgit v1.3