From: Mike Bayer Date: Sun, 2 Feb 2014 16:33:55 +0000 (-0500) Subject: - add new tests to ensure the naming convention thing works on this end X-Git-Tag: rel_0_6_3~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0a27bc488ff55b1947bbddb1b9a12902c9c818f9;p=thirdparty%2Fsqlalchemy%2Falembic.git - add new tests to ensure the naming convention thing works on this end as expected --- diff --git a/alembic/util.py b/alembic/util.py index 4bcd8b57..49fea280 100644 --- a/alembic/util.py +++ b/alembic/util.py @@ -24,6 +24,7 @@ _vers = tuple([_safe_int(x) for x in re.findall(r'(\d+|[abc]\d)', __version__)]) sqla_07 = _vers > (0, 7, 2) sqla_08 = _vers >= (0, 8, 0, 'b2') sqla_09 = _vers >= (0, 9, 0) +sqla_092 = _vers >= (0, 9, 2) if not sqla_07: raise CommandError( "SQLAlchemy 0.7.3 or greater is required. ") diff --git a/tests/__init__.py b/tests/__init__.py index 9bb40f1b..585e79bf 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -85,6 +85,12 @@ def requires_09(fn, *arg, **kw): raise SkipTest("SQLAlchemy 0.9 or greater required") return fn(*arg, **kw) +@decorator +def requires_092(fn, *arg, **kw): + if not util.sqla_092: + raise SkipTest("SQLAlchemy 0.9.2 or greater required") + return fn(*arg, **kw) + _dialects = {} def _get_dialect(name): if name is None or name == 'default': diff --git a/tests/test_autogen_render.py b/tests/test_autogen_render.py index 0d3e2b1f..c36edc10 100644 --- a/tests/test_autogen_render.py +++ b/tests/test_autogen_render.py @@ -12,7 +12,7 @@ from sqlalchemy.dialects import mysql, postgresql from sqlalchemy.sql import and_, column, literal_column from alembic import autogenerate, util, compat -from . import eq_, eq_ignore_whitespace +from . import eq_, eq_ignore_whitespace, requires_092, requires_09 py3k = sys.version_info >= (3, ) @@ -612,6 +612,8 @@ render:primary_key\n)""" "existing_server_default='5')" ) + + def test_render_enum(self): eq_ignore_whitespace( autogenerate.render._repr_type( @@ -683,6 +685,7 @@ render:primary_key\n)""" "user.MyType()" ) + @requires_09 def test_repr_dialect_type(self): from sqlalchemy.dialects.mysql import VARCHAR @@ -703,3 +706,86 @@ render:primary_key\n)""" eq_(autogen_context['imports'], set(['from sqlalchemy.dialects import mysql']) ) + +class RenderNamingConventionTest(TestCase): + + @classmethod + @requires_092 + def setup_class(cls): + cls.autogen_context = { + 'opts': { + 'sqlalchemy_module_prefix': 'sa.', + 'alembic_module_prefix': 'op.', + }, + 'dialect': postgresql.dialect() + } + + + def setUp(self): + + convention = { + "ix": 'ix_%(custom)s_%(column_0_label)s', + "uq": "uq_%(custom)s_%(table_name)s_%(column_0_name)s", + "ck": "ck_%(custom)s_%(table_name)s", + "fk": "fk_%(custom)s_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", + "pk": "pk_%(custom)s_%(table_name)s", + "custom": lambda const, table: "ct" + } + + self.metadata = MetaData( + naming_convention=convention + ) + + def test_explicit_unique_constraint(self): + t = Table('t', self.metadata, Column('c', Integer)) + eq_ignore_whitespace( + autogenerate.render._render_unique_constraint( + UniqueConstraint(t.c.c, deferrable='XYZ'), + self.autogen_context + ), + "sa.UniqueConstraint('c', deferrable='XYZ', name='uq_ct_t_c')" + ) + + def test_explicit_named_unique_constraint(self): + t = Table('t', self.metadata, Column('c', Integer)) + eq_ignore_whitespace( + autogenerate.render._render_unique_constraint( + UniqueConstraint(t.c.c, name='q'), + self.autogen_context + ), + "sa.UniqueConstraint('c', name='q')" + ) + + def test_implicit_unique_constraint(self): + t = Table('t', self.metadata, Column('c', Integer, unique=True)) + uq = [c for c in t.constraints if isinstance(c, UniqueConstraint)][0] + eq_ignore_whitespace( + autogenerate.render._render_unique_constraint(uq, + self.autogen_context + ), + "sa.UniqueConstraint('c', name='uq_ct_t_c')" + ) + + def test_inline_pk_constraint(self): + t = Table('t', self.metadata, Column('c', Integer, primary_key=True)) + eq_ignore_whitespace( + autogenerate.render._add_table(t, self.autogen_context), + "op.create_table('t',sa.Column('c', sa.Integer(), nullable=False)," + "sa.PrimaryKeyConstraint('c', name='pk_ct_t'))" + ) + + def test_inline_ck_constraint(self): + t = Table('t', self.metadata, Column('c', Integer), CheckConstraint("c > 5")) + eq_ignore_whitespace( + autogenerate.render._add_table(t, self.autogen_context), + "op.create_table('t',sa.Column('c', sa.Integer(), nullable=True)," + "sa.CheckConstraint('c > 5', name='ck_ct_t'))" + ) + + def test_inline_fk(self): + t = Table('t', self.metadata, Column('c', Integer, ForeignKey('q.id'))) + eq_ignore_whitespace( + autogenerate.render._add_table(t, self.autogen_context), + "op.create_table('t',sa.Column('c', sa.Integer(), nullable=True)," + "sa.ForeignKeyConstraint(['c'], ['q.id'], name='fk_ct_t_c_q'))" + )