diff options
Diffstat (limited to 'tests/test_autogenerate.py')
-rw-r--r-- | tests/test_autogenerate.py | 89 |
1 files changed, 62 insertions, 27 deletions
diff --git a/tests/test_autogenerate.py b/tests/test_autogenerate.py index 7351f79..4fb3a53 100644 --- a/tests/test_autogenerate.py +++ b/tests/test_autogenerate.py @@ -14,6 +14,7 @@ from alembic.testing import config from alembic.testing.mock import Mock from alembic.testing.env import staging_env, clear_staging_env from alembic.testing import eq_ +from alembic.ddl.base import _fk_spec py3k = sys.version_info >= (3, ) @@ -37,7 +38,41 @@ def new_table(table, parent): names_in_this_test.add(table.name) -class AutogenTest(object): +class _ComparesFKs(object): + def _assert_fk_diff( + self, diff, type_, source_table, source_columns, + target_table, target_columns, name=None, conditional_name=None, + source_schema=None): + # the public API for ForeignKeyConstraint was not very rich + # in 0.7, 0.8, so here we use the well-known but slightly + # private API to get at its elements + (fk_source_schema, fk_source_table, + fk_source_columns, fk_target_schema, fk_target_table, + fk_target_columns) = _fk_spec(diff[1]) + + eq_(diff[0], type_) + eq_(fk_source_table, source_table) + eq_(fk_source_columns, source_columns) + eq_(fk_target_table, target_table) + eq_(fk_source_schema, source_schema) + + eq_([elem.column.name for elem in diff[1].elements], + target_columns) + if conditional_name is not None: + if config.requirements.no_fk_names.enabled: + eq_(diff[1].name, None) + elif conditional_name == 'servergenerated': + fks = Inspector.from_engine(self.bind).\ + get_foreign_keys(source_table) + server_fk_name = fks[0]['name'] + eq_(diff[1].name, server_fk_name) + else: + eq_(diff[1].name, conditional_name) + else: + eq_(diff[1].name, name) + + +class AutogenTest(_ComparesFKs): @classmethod def _get_bind(cls): @@ -88,7 +123,7 @@ class AutogenTest(object): self.conn.close() -class AutogenFixtureTest(object): +class AutogenFixtureTest(_ComparesFKs): def _fixture( self, m1, m2, include_schemas=False, @@ -425,11 +460,11 @@ class AutogenerateDiffTest(ModelOne, AutogenTest, TestBase): eq_(repr(diffs[5][0][5]), "NUMERIC(precision=8, scale=2)") eq_(repr(diffs[5][0][6]), "Numeric(precision=10, scale=2)") - eq_(diffs[6][0], 'add_fk') - eq_(diffs[6][1].column.name, 'id') - eq_(diffs[6][1].parent.table.name, 'order') - eq_(diffs[6][2].referred_table, 'user') - eq_(diffs[6][2].constrained_columns, ('user_id',)) + self._assert_fk_diff( + diffs[6], "add_fk", + "order", ["user_id"], + "user", ["id"] + ) eq_(diffs[7][0][0], "modify_default") eq_(diffs[7][0][1], None) @@ -524,7 +559,7 @@ nullable=True)) type_=sa.Numeric(precision=10, scale=2), nullable=True, existing_server_default=sa.text('0')) - op.create_foreign_key(None, order, user, ['user_id'], ['id'], schema=None) + op.create_foreign_key(None, order, user, ['user_id'], ['id']) op.alter_column('user', 'a1', existing_type=sa.TEXT(), server_default='x', @@ -548,14 +583,14 @@ nullable=True)) existing_type=sa.TEXT(), server_default=None, existing_nullable=True) - op.drop_constraint(None, order, type_='foreignkey') + op.drop_constraint(None, 'order', type_='foreignkey') op.alter_column('order', 'amount', existing_type=sa.Numeric(precision=10, scale=2), type_=sa.NUMERIC(precision=8, scale=2), nullable=False, existing_server_default=sa.text('0')) op.drop_column('order', 'user_id') - op.drop_constraint('uq_email', 'address') + op.drop_constraint('uq_email', 'address', type_='unique') op.drop_column('address', 'street') op.create_table('extra', sa.Column('x', sa.CHAR(), nullable=True), @@ -595,7 +630,7 @@ nullable=True)) type_=sa.Numeric(precision=10, scale=2), nullable=True, existing_server_default=sa.text('0')) - batch_op.create_foreign_key(None, order, user, ['user_id'], ['id'], schema=None) + batch_op.create_foreign_key(None, order, user, ['user_id'], ['id']) with op.batch_alter_table('user', schema=None) as batch_op: batch_op.alter_column('a1', @@ -624,7 +659,7 @@ nullable=True)) existing_nullable=True) with op.batch_alter_table('order', schema=None) as batch_op: - batch_op.drop_constraint(None, order, type_='foreignkey') + batch_op.drop_constraint(None, type_='foreignkey') batch_op.alter_column('amount', existing_type=sa.Numeric(precision=10, scale=2), type_=sa.NUMERIC(precision=8, scale=2), @@ -633,7 +668,7 @@ nullable=True)) batch_op.drop_column('user_id') with op.batch_alter_table('address', schema=None) as batch_op: - batch_op.drop_constraint('uq_email') + batch_op.drop_constraint('uq_email', type_='unique') batch_op.drop_column('street') op.create_table('extra', @@ -815,12 +850,12 @@ class AutogenerateDiffTestWSchema(ModelOne, AutogenTest, TestBase): eq_(repr(diffs[5][0][5]), "NUMERIC(precision=8, scale=2)") eq_(repr(diffs[5][0][6]), "Numeric(precision=10, scale=2)") - eq_(diffs[6][0], 'add_fk') - eq_(diffs[6][1].column.name, 'id') - eq_(diffs[6][1].parent.table.name, 'order') - eq_(diffs[6][1].parent.table.schema, config.test_schema) - eq_(diffs[6][2].referred_table, 'user') - eq_(diffs[6][2].constrained_columns, ('user_id',)) + self._assert_fk_diff( + diffs[6], "add_fk", + "order", ["user_id"], + "user", ["id"], + source_schema=config.test_schema + ) eq_(diffs[7][0][0], "modify_default") eq_(diffs[7][0][1], self.schema) @@ -900,7 +935,7 @@ schema='%(schema)s') existing_server_default=sa.text('0'), schema='%(schema)s') op.create_foreign_key(None, order, user, ['user_id'], ['id'], \ -schema='%(schema)s') +source_schema='%(schema)s', referent_schema='%(schema)s') op.alter_column('user', 'a1', existing_type=sa.TEXT(), server_default='x', @@ -928,7 +963,7 @@ autoincrement=False, nullable=True), schema='%(schema)s') server_default=None, existing_nullable=True, schema='%(schema)s') - op.drop_constraint(None, order, type_='foreignkey') + op.drop_constraint(None, 'order', schema='%(schema)s', type_='foreignkey') op.alter_column('order', 'amount', existing_type=sa.Numeric(precision=10, scale=2), type_=sa.NUMERIC(precision=8, scale=2), @@ -936,7 +971,7 @@ autoincrement=False, nullable=True), schema='%(schema)s') existing_server_default=sa.text('0'), schema='%(schema)s') op.drop_column('order', 'user_id', schema='%(schema)s') - op.drop_constraint('uq_email', 'address', schema='test_schema') + op.drop_constraint('uq_email', 'address', schema='test_schema', type_='unique') op.drop_column('address', 'street', schema='%(schema)s') op.create_table('extra', sa.Column('x', sa.CHAR(length=1), autoincrement=False, nullable=True), @@ -1226,11 +1261,11 @@ class CompareMetadataTest(ModelOne, AutogenTest, TestBase): eq_(repr(diffs[5][0][5]), "NUMERIC(precision=8, scale=2)") eq_(repr(diffs[5][0][6]), "Numeric(precision=10, scale=2)") - eq_(diffs[6][0], 'add_fk') - eq_(diffs[6][1].column.name, 'id') - eq_(diffs[6][1].parent.table.name, 'order') - eq_(diffs[6][2].referred_table, 'user') - eq_(diffs[6][2].constrained_columns, ('user_id',)) + self._assert_fk_diff( + diffs[6], "add_fk", + "order", ["user_id"], + "user", ["id"] + ) eq_(diffs[7][0][0], "modify_default") eq_(diffs[7][0][1], None) |