]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
Simplified tests
authorMaarten van Schaik <maarten@byte.nl>
Wed, 28 Aug 2013 21:43:52 +0000 (23:43 +0200)
committerMaarten van Schaik <maarten@byte.nl>
Wed, 28 Aug 2013 21:43:52 +0000 (23:43 +0200)
tests/test_autogenerate.py

index 71d6b6faeaab6aa5a8a55669114ccbf542b95a9c..8566c7f6cf6573838caa16e0fc797b04d295a9c7 100644 (file)
@@ -4,7 +4,7 @@ from unittest import TestCase
 from mock import Mock, patch
 
 from sqlalchemy import MetaData, Column, Table, Integer, String, Text, \
-    Numeric, CHAR, ForeignKey, DATETIME, VARCHAR, \
+    Numeric, CHAR, ForeignKey, DATETIME, INTEGER, \
     TypeDecorator, CheckConstraint, Unicode, Enum,\
     UniqueConstraint, Boolean, ForeignKeyConstraint,\
     PrimaryKeyConstraint
@@ -744,122 +744,67 @@ class AutogenerateDiffTest(AutogenTest, TestCase):
             [('remove_table', 'extra'), ('remove_table', 'user')]
         )
 
+
+class AutogenerateCustomCompareTypeTest(AutogenTest, TestCase):
+    @classmethod
+    def _get_db_schema(cls):
+        m = MetaData()
+
+        Table('sometable', m,
+              Column('id', Integer, primary_key=True),
+              Column('value', Integer))
+        return m
+
+    @classmethod
+    def _get_model_schema(cls):
+        m = MetaData()
+
+        Table('sometable', m,
+              Column('id', Integer, primary_key=True),
+              Column('value', String))
+        return m
+
     def test_uses_custom_compare_type_function(self):
         my_compare_type = Mock()
-        my_compare_type.return_value = None
+        self.context._user_compare_type = my_compare_type
 
-        context = MigrationContext.configure(
-            connection=self.bind.connect(),
-            opts={
-                'compare_type': my_compare_type,
-                'target_metadata': self.m1,
-                'upgrade_token':"upgrades",
-                'downgrade_token':"downgrades",
-                'alembic_module_prefix':'op.',
-                'sqlalchemy_module_prefix':'sa.'
-            }
-        )
-        autogenerate._produce_migration_diffs(context, {}, set())
+        diffs = []
+        autogenerate._produce_net_changes(self.context.bind, self.m2, diffs, self.autogen_context)
+
+        first_table = self.m2.tables['sometable']
+        first_column = first_table.columns['id']
 
-        first_table = self.m1.tables['address']
-        first_column = first_table.columns['email_address']
+        eq_(len(my_compare_type.mock_calls), 2)
 
         # We'll just test the first call
         _, args, _ = my_compare_type.mock_calls[0]
-        ctx, inspected_column, metadata_column, inspected_type, metadata_type = args
-        eq_(ctx, context)
+        context, inspected_column, metadata_column, inspected_type, metadata_type = args
+        eq_(context, self.context)
         eq_(metadata_column, first_column)
         eq_(metadata_type, first_column.type)
         eq_(inspected_column.name, first_column.name)
-        eq_(type(inspected_type), VARCHAR)
+        eq_(type(inspected_type), INTEGER)
 
-    def test_fields_excluded_when_custom_compare_type_returns_False(self):
+    def test_column_type_not_modified_when_custom_compare_type_returns_False(self):
         my_compare_type = Mock()
         my_compare_type.return_value = False
+        self.context._user_compare_type = my_compare_type
 
-        context = MigrationContext.configure(
-            connection=self.bind.connect(),
-            opts={
-                'compare_type': my_compare_type,
-                'target_metadata': self.m1,
-                'upgrade_token':"upgrades",
-                'downgrade_token':"downgrades",
-                'alembic_module_prefix':'op.',
-                'sqlalchemy_module_prefix':'sa.'
-            }
-        )
-        template_args = {}
-        newtype = String(length=30)
-        with patch.object(self.m1.tables['address'].columns['email_address'], 'type', new=newtype):
-            autogenerate._produce_migration_diffs(context, template_args, set())
+        diffs = []
+        autogenerate._produce_net_changes(self.context.bind, self.m2, diffs, self.autogen_context)
 
-        eq_(re.sub(r"u'", "'", template_args['upgrades']),
-"""### commands auto generated by Alembic - please adjust! ###
-    pass
-    ### end Alembic commands ###""")
+        eq_(diffs, [])
 
-    def test_fields_included_when_custom_compare_type_returns_True(self):
+    def test_column_type_modified_when_custom_compare_type_returns_True(self):
         my_compare_type = Mock()
         my_compare_type.return_value = True
+        self.context._user_compare_type = my_compare_type
 
-        context = MigrationContext.configure(
-            connection=self.bind.connect(),
-            opts={
-                'compare_type': my_compare_type,
-                'target_metadata': self.m1,
-                'upgrade_token':"upgrades",
-                'downgrade_token':"downgrades",
-                'alembic_module_prefix':'op.',
-                'sqlalchemy_module_prefix':'sa.'
-            }
-        )
-        template_args = {}
-        autogenerate._produce_migration_diffs(context, template_args, set())
+        diffs = []
+        autogenerate._produce_net_changes(self.context.bind, self.m2, diffs, self.autogen_context)
 
-        eq_(re.sub(r"u'", "'", template_args['upgrades']),
-"""### commands auto generated by Alembic - please adjust! ###
-    op.alter_column('address', 'email_address',
-               existing_type=sa.VARCHAR(length=100),
-               type_=sa.String(length=100),
-               existing_nullable=False)
-    op.alter_column('address', 'id',
-               existing_type=sa.INTEGER(),
-               type_=sa.Integer(),
-               existing_nullable=False)
-    op.alter_column('extra', 'uid',
-               existing_type=sa.INTEGER(),
-               type_=sa.Integer(),
-               existing_nullable=True)
-    op.alter_column('extra', 'x',
-               existing_type=sa.CHAR(),
-               type_=sa.CHAR(),
-               existing_nullable=True)
-    op.alter_column('order', 'amount',
-               existing_type=sa.NUMERIC(precision=8, scale=2),
-               type_=sa.Numeric(precision=8, scale=2),
-               existing_nullable=False,
-               existing_server_default='0')
-    op.alter_column('order', 'order_id',
-               existing_type=sa.INTEGER(),
-               type_=sa.Integer(),
-               existing_nullable=False)
-    op.alter_column('user', 'a1',
-               existing_type=sa.TEXT(),
-               type_=sa.Text(),
-               existing_nullable=True)
-    op.alter_column('user', 'id',
-               existing_type=sa.INTEGER(),
-               type_=sa.Integer(),
-               existing_nullable=False)
-    op.alter_column('user', 'name',
-               existing_type=sa.VARCHAR(length=50),
-               type_=sa.String(length=50),
-               existing_nullable=True)
-    op.alter_column('user', 'pw',
-               existing_type=sa.VARCHAR(length=50),
-               type_=sa.String(length=50),
-               existing_nullable=True)
-    ### end Alembic commands ###""")
+        eq_(diffs[0][0][0], 'modify_type')
+        eq_(diffs[1][0][0], 'modify_type')
 
 
 class AutogenKeyTest(AutogenTest, TestCase):