diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-11-10 13:20:40 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-11-10 13:20:40 -0500 |
commit | afaba66ea550d9aefc823b7025d0e2b56d4a37fa (patch) | |
tree | df7ac3c6ae6929400a28549b23b4529ec165c0ae /tests/test_version_traversal.py | |
parent | 43febf137b926c86d42b2d144075846c707e3b99 (diff) | |
download | alembic-afaba66ea550d9aefc823b7025d0e2b56d4a37fa.tar.gz |
- reorganize tests that deal with running scripts
and reading scripts; try to put tests against common themes together, improve names
Diffstat (limited to 'tests/test_version_traversal.py')
-rw-r--r-- | tests/test_version_traversal.py | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/tests/test_version_traversal.py b/tests/test_version_traversal.py new file mode 100644 index 0000000..82fe9b6 --- /dev/null +++ b/tests/test_version_traversal.py @@ -0,0 +1,147 @@ +from alembic.testing.env import clear_staging_env, staging_env +from alembic.testing import assert_raises_message, eq_ +from alembic import util +from alembic.testing.fixtures import TestBase + + +env = None +a, b, c, d, e = None, None, None, None, None +cfg = None + + +class RevisionPathTest(TestBase): + + @classmethod + def setup_class(cls): + global env + env = staging_env() + global a, b, c, d, e + a = env.generate_revision(util.rev_id(), '->a', refresh=True) + b = env.generate_revision(util.rev_id(), 'a->b', refresh=True) + c = env.generate_revision(util.rev_id(), 'b->c', refresh=True) + d = env.generate_revision(util.rev_id(), 'c->d', refresh=True) + e = env.generate_revision(util.rev_id(), 'd->e', refresh=True) + + @classmethod + def teardown_class(cls): + clear_staging_env() + + def test_upgrade_path(self): + + eq_( + env._upgrade_revs(e.revision, c.revision), + [ + (d.module.upgrade, c.revision, d.revision, d.doc), + (e.module.upgrade, d.revision, e.revision, e.doc), + ] + ) + + eq_( + env._upgrade_revs(c.revision, None), + [ + (a.module.upgrade, None, a.revision, a.doc), + (b.module.upgrade, a.revision, b.revision, b.doc), + (c.module.upgrade, b.revision, c.revision, c.doc), + ] + ) + + def test_relative_upgrade_path(self): + eq_( + env._upgrade_revs("+2", a.revision), + [ + (b.module.upgrade, a.revision, b.revision, b.doc), + (c.module.upgrade, b.revision, c.revision, c.doc), + ] + ) + + eq_( + env._upgrade_revs("+1", a.revision), + [ + (b.module.upgrade, a.revision, b.revision, b.doc), + ] + ) + + eq_( + env._upgrade_revs("+3", b.revision), + [ + (c.module.upgrade, b.revision, c.revision, c.doc), + (d.module.upgrade, c.revision, d.revision, d.doc), + (e.module.upgrade, d.revision, e.revision, e.doc), + ] + ) + + def test_invalid_relative_upgrade_path(self): + assert_raises_message( + util.CommandError, + "Relative revision -2 didn't produce 2 migrations", + env._upgrade_revs, "-2", b.revision + ) + + assert_raises_message( + util.CommandError, + r"Relative revision \+5 didn't produce 5 migrations", + env._upgrade_revs, "+5", b.revision + ) + + def test_downgrade_path(self): + + eq_( + env._downgrade_revs(c.revision, e.revision), + [ + (e.module.downgrade, e.revision, e.down_revision, e.doc), + (d.module.downgrade, d.revision, d.down_revision, d.doc), + ] + ) + + eq_( + env._downgrade_revs(None, c.revision), + [ + (c.module.downgrade, c.revision, c.down_revision, c.doc), + (b.module.downgrade, b.revision, b.down_revision, b.doc), + (a.module.downgrade, a.revision, a.down_revision, a.doc), + ] + ) + + def test_relative_downgrade_path(self): + eq_( + env._downgrade_revs("-1", c.revision), + [ + (c.module.downgrade, c.revision, c.down_revision, c.doc), + ] + ) + + eq_( + env._downgrade_revs("-3", e.revision), + [ + (e.module.downgrade, e.revision, e.down_revision, e.doc), + (d.module.downgrade, d.revision, d.down_revision, d.doc), + (c.module.downgrade, c.revision, c.down_revision, c.doc), + ] + ) + + def test_invalid_relative_downgrade_path(self): + assert_raises_message( + util.CommandError, + "Relative revision -5 didn't produce 5 migrations", + env._downgrade_revs, "-5", b.revision + ) + + assert_raises_message( + util.CommandError, + r"Relative revision \+2 didn't produce 2 migrations", + env._downgrade_revs, "+2", b.revision + ) + + def test_invalid_move_rev_to_none(self): + assert_raises_message( + util.CommandError, + "Revision %s is not an ancestor of base" % b.revision, + env._downgrade_revs, b.revision[0:3], None + ) + + def test_invalid_move_higher_to_lower(self): + assert_raises_message( + util.CommandError, + "Revision %s is not an ancestor of %s" % (c.revision, b.revision), + env._downgrade_revs, c.revision[0:4], b.revision + ) |