diff options
Diffstat (limited to 'oslo_db/tests/sqlalchemy/test_utils.py')
-rw-r--r-- | oslo_db/tests/sqlalchemy/test_utils.py | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/oslo_db/tests/sqlalchemy/test_utils.py b/oslo_db/tests/sqlalchemy/test_utils.py index 6ab2c70..9911b12 100644 --- a/oslo_db/tests/sqlalchemy/test_utils.py +++ b/oslo_db/tests/sqlalchemy/test_utils.py @@ -31,6 +31,7 @@ from sqlalchemy.engine import url as sa_url from sqlalchemy.exc import OperationalError from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.hybrid import hybrid_property +from sqlalchemy.orm import mapper from sqlalchemy.orm import Session from sqlalchemy.sql import select from sqlalchemy.types import UserDefinedType, NullType @@ -115,6 +116,20 @@ class FakeTableWithIndexes(Base): ) +class FakeTableClassicalyMapped(object): + pass + + +fake_table = Table( + 'fake_table_classically_mapped', + Base.metadata, + Column('id', Integer, primary_key=True), + Column('key', String(50)) +) + +mapper(FakeTableClassicalyMapped, fake_table) + + class FakeModel(object): def __init__(self, values): self.values = values @@ -304,11 +319,19 @@ class Test_UnstableSortingOrder(test_base.BaseTestCase): utils._stable_sorting_order( FakeTableWithMultipleKeys, ['key1', 'key2'])) + def test_classically_mapped_primary_keys_stable(self): + self.assertTrue( + utils._stable_sorting_order(FakeTableClassicalyMapped, ['id'])) + def test_multiple_primary_keys_unstable(self): self.assertFalse( utils._stable_sorting_order( FakeTableWithMultipleKeys, ['key1', 'key3'])) + def test_unknown_primary_keys_stable(self): + self.assertIsNone( + utils._stable_sorting_order(object, ['key1', 'key2'])) + def test_unique_index_stable(self): self.assertTrue( utils._stable_sorting_order( @@ -331,6 +354,9 @@ class TestGetUniqueKeys(test_base.BaseTestCase): [{'id'}, {'key1', 'key2'}], utils._get_unique_keys(FakeTableWithIndexes)) + def test_unknown_primary_keys(self): + self.assertIsNone(utils._get_unique_keys(object)) + def test_cache(self): class CacheTable(object): @@ -349,21 +375,24 @@ class TestGetUniqueKeys(test_base.BaseTestCase): return [] class CacheModel(object): - __table__ = CacheTable() + pass + table = CacheTable() + mock_inspect = mock.Mock(return_value=mock.Mock(mapped_table=table)) model = CacheModel() self.assertNotIn('oslodb_unique_keys', CacheTable.info) - utils._get_unique_keys(model) + with mock.patch("oslo_db.sqlalchemy.utils.inspect", mock_inspect): + utils._get_unique_keys(model) self.assertIn('oslodb_unique_keys', CacheTable.info) - self.assertEqual(1, model.__table__.constraints_called) - self.assertEqual(1, model.__table__.indexes_called) + self.assertEqual(1, table.constraints_called) + self.assertEqual(1, table.indexes_called) for i in range(10): utils._get_unique_keys(model) - self.assertEqual(1, model.__table__.constraints_called) - self.assertEqual(1, model.__table__.indexes_called) + self.assertEqual(1, table.constraints_called) + self.assertEqual(1, table.indexes_called) class TestPaginateQueryActualSQL(test_base.BaseTestCase): |