diff options
| author | Nick Pope <nick.pope@flightdataservices.com> | 2017-12-05 09:43:56 +0000 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2018-08-02 10:39:18 -0400 |
| commit | d526b07784d8caa208055c1f2bd1cedc88fb52dc (patch) | |
| tree | 884e5bc8f02320833854f393715049ab5a7da4ab /tests/postgres_tests | |
| parent | 2092206bee3281e6809a8fddb5230d80902a02b4 (diff) | |
Fixed #26974 -- Added HashIndex to django.contrib.postgres.
Thanks Akshesh Doshi for the initial implementation.
Diffstat (limited to 'tests/postgres_tests')
| -rw-r--r-- | tests/postgres_tests/test_indexes.py | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/tests/postgres_tests/test_indexes.py b/tests/postgres_tests/test_indexes.py index defab8530a..dcb285cc1c 100644 --- a/tests/postgres_tests/test_indexes.py +++ b/tests/postgres_tests/test_indexes.py @@ -1,4 +1,6 @@ -from django.contrib.postgres.indexes import BrinIndex, GinIndex, GistIndex +from django.contrib.postgres.indexes import ( + BrinIndex, GinIndex, GistIndex, HashIndex, +) from django.db import connection from django.test import skipUnlessDBFeature @@ -83,6 +85,20 @@ class GistIndexTests(IndexTestMixin, PostgreSQLTestCase): }) +class HashIndexTests(IndexTestMixin, PostgreSQLTestCase): + index_class = HashIndex + + def test_suffix(self): + self.assertEqual(HashIndex.suffix, 'hash') + + def test_deconstruction(self): + index = HashIndex(fields=['title'], name='test_title_hash', fillfactor=80) + path, args, kwargs = index.deconstruct() + self.assertEqual(path, 'django.contrib.postgres.indexes.HashIndex') + self.assertEqual(args, ()) + self.assertEqual(kwargs, {'fields': ['title'], 'name': 'test_title_hash', 'fillfactor': 80}) + + class SchemaTests(PostgreSQLTestCase): def get_constraints(self, table): @@ -173,3 +189,31 @@ class SchemaTests(PostgreSQLTestCase): with connection.schema_editor() as editor: editor.remove_index(CharFieldModel, index) self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table)) + + def test_hash_index(self): + # Ensure the table is there and doesn't have an index. + self.assertNotIn('field', self.get_constraints(CharFieldModel._meta.db_table)) + # Add the index. + index_name = 'char_field_model_field_hash' + index = HashIndex(fields=['field'], name=index_name) + with connection.schema_editor() as editor: + editor.add_index(CharFieldModel, index) + constraints = self.get_constraints(CharFieldModel._meta.db_table) + # The index was added. + self.assertEqual(constraints[index_name]['type'], HashIndex.suffix) + # Drop the index. + with connection.schema_editor() as editor: + editor.remove_index(CharFieldModel, index) + self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table)) + + def test_hash_parameters(self): + index_name = 'integer_array_hash_fillfactor' + index = HashIndex(fields=['field'], name=index_name, fillfactor=80) + with connection.schema_editor() as editor: + editor.add_index(CharFieldModel, index) + constraints = self.get_constraints(CharFieldModel._meta.db_table) + self.assertEqual(constraints[index_name]['type'], HashIndex.suffix) + self.assertEqual(constraints[index_name]['options'], ['fillfactor=80']) + with connection.schema_editor() as editor: + editor.remove_index(CharFieldModel, index) + self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table)) |
