]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
- add new tests to ensure the naming convention thing works on this end
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 2 Feb 2014 16:33:55 +0000 (11:33 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 2 Feb 2014 16:33:55 +0000 (11:33 -0500)
as expected

alembic/util.py
tests/__init__.py
tests/test_autogen_render.py

index 4bcd8b57c854d8acdb04b2e7e63f6284e355e770..49fea280eb0b630ae2cfdcf702d229fa7fa8a59b 100644 (file)
@@ -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. ")
index 9bb40f1b6371ca229cb0e4059cfa104b738e9338..585e79bf54fe35227357ff5711f150c7e3c32280 100644 (file)
@@ -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':
index 0d3e2b1fbed253cb6fe6acb53ed50aa16b75cfc8..c36edc1096045e63b76782d122abb28665cea158 100644 (file)
@@ -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'))"
+        )