summaryrefslogtreecommitdiff
path: root/tests/test_version_traversal.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-11-10 13:20:40 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2014-11-10 13:20:40 -0500
commitafaba66ea550d9aefc823b7025d0e2b56d4a37fa (patch)
treedf7ac3c6ae6929400a28549b23b4529ec165c0ae /tests/test_version_traversal.py
parent43febf137b926c86d42b2d144075846c707e3b99 (diff)
downloadalembic-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.py147
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
+ )