diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2017-09-13 20:12:32 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-09-13 20:12:32 +0200 |
| commit | c6a1faecc3d6e25597a7105df74f11678f2f2aac (patch) | |
| tree | 84f7d7ce04ec478ba9652ecdf3728a259538864a /tests | |
| parent | c2ecef869ce46349e79c39610cd66a576d78289e (diff) | |
Refs #27090 -- Added real database sequence introspection.
Thanks Mariusz Felisiak for the Oracle part and Tim Graham for the
review.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/backends/oracle/test_introspection.py | 29 | ||||
| -rw-r--r-- | tests/backends/postgresql/test_introspection.py | 23 | ||||
| -rw-r--r-- | tests/introspection/tests.py | 5 |
3 files changed, 55 insertions, 2 deletions
diff --git a/tests/backends/oracle/test_introspection.py b/tests/backends/oracle/test_introspection.py new file mode 100644 index 0000000000..ac084e93df --- /dev/null +++ b/tests/backends/oracle/test_introspection.py @@ -0,0 +1,29 @@ +import unittest + +from django.db import connection +from django.test import TransactionTestCase + +from ..models import Person + + +@unittest.skipUnless(connection.vendor == 'oracle', 'Oracle tests') +class DatabaseSequenceTests(TransactionTestCase): + available_apps = [] + + def test_get_sequences(self): + with connection.cursor() as cursor: + seqs = connection.introspection.get_sequences(cursor, Person._meta.db_table, Person._meta.local_fields) + self.assertEqual(len(seqs), 1) + self.assertIsNotNone(seqs[0]['name']) + self.assertEqual(seqs[0]['table'], Person._meta.db_table) + self.assertEqual(seqs[0]['column'], 'id') + + def test_get_sequences_manually_created_index(self): + with connection.cursor() as cursor: + with connection.schema_editor() as editor: + editor._drop_identity(Person._meta.db_table, 'id') + seqs = connection.introspection.get_sequences(cursor, Person._meta.db_table, Person._meta.local_fields) + self.assertEqual(seqs, [{'table': Person._meta.db_table, 'column': 'id'}]) + # Recreate model, because adding identity is impossible. + editor.delete_model(Person) + editor.create_model(Person) diff --git a/tests/backends/postgresql/test_introspection.py b/tests/backends/postgresql/test_introspection.py new file mode 100644 index 0000000000..cfa801a77f --- /dev/null +++ b/tests/backends/postgresql/test_introspection.py @@ -0,0 +1,23 @@ +import unittest + +from django.db import connection +from django.test import TestCase + +from ..models import Person + + +@unittest.skipUnless(connection.vendor == 'postgresql', "Test only for PostgreSQL") +class DatabaseSequenceTests(TestCase): + def test_get_sequences(self): + cursor = connection.cursor() + seqs = connection.introspection.get_sequences(cursor, Person._meta.db_table) + self.assertEqual( + seqs, + [{'table': Person._meta.db_table, 'column': 'id', 'name': 'backends_person_id_seq'}] + ) + cursor.execute('ALTER SEQUENCE backends_person_id_seq RENAME TO pers_seq') + seqs = connection.introspection.get_sequences(cursor, Person._meta.db_table) + self.assertEqual( + seqs, + [{'table': Person._meta.db_table, 'column': 'id', 'name': 'pers_seq'}] + ) diff --git a/tests/introspection/tests.py b/tests/introspection/tests.py index c449b6de82..ed10927b2a 100644 --- a/tests/introspection/tests.py +++ b/tests/introspection/tests.py @@ -61,8 +61,9 @@ class IntrospectionTests(TransactionTestCase): def test_sequence_list(self): sequences = connection.introspection.sequence_list() - expected = {'table': Reporter._meta.db_table, 'column': 'id'} - self.assertIn(expected, sequences, 'Reporter sequence not found in sequence_list()') + reporter_seqs = [seq for seq in sequences if seq['table'] == Reporter._meta.db_table] + self.assertEqual(len(reporter_seqs), 1, 'Reporter sequence not found in sequence_list()') + self.assertEqual(reporter_seqs[0]['column'], 'id') def test_get_table_description_names(self): with connection.cursor() as cursor: |
