summaryrefslogtreecommitdiff
path: root/tests/test_autogenerate.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_autogenerate.py')
-rw-r--r--tests/test_autogenerate.py89
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)