From: Maarten van Schaik Date: Wed, 28 Aug 2013 21:43:52 +0000 (+0200) Subject: Simplified tests X-Git-Tag: rel_0_6_1~34^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3adc6a02b87c0b183c205e2299226c07cf00b52d;p=thirdparty%2Fsqlalchemy%2Falembic.git Simplified tests --- diff --git a/tests/test_autogenerate.py b/tests/test_autogenerate.py index 71d6b6fa..8566c7f6 100644 --- a/tests/test_autogenerate.py +++ b/tests/test_autogenerate.py @@ -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):