summaryrefslogtreecommitdiff
path: root/tests/test_revision.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2019-04-24 13:46:03 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2019-04-26 20:30:33 -0400
commit3c93a7ea8ac63fbad94f35950c497a1353616e5f (patch)
tree9a81e57d432585cc9e9c9d3e97aaabc395461061 /tests/test_revision.py
parent90330cc0f5f4baa9aaaa5d82229dedbef6d7cbf7 (diff)
downloadalembic-3c93a7ea8ac63fbad94f35950c497a1353616e5f.tar.gz
Raise for non-string revision identifier
Added an assertion in :meth:`.RevisionMap.get_revisions` and other methods which ensures revision numbers are passed as strings or collections of strings. Driver issues particularly on MySQL may inadvertently be passing bytes here which leads to failures later on. Change-Id: Id80c958f0a082fed26cac2cf838cb7507b8d814c Fixes: #551
Diffstat (limited to 'tests/test_revision.py')
-rw-r--r--tests/test_revision.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/test_revision.py b/tests/test_revision.py
index 20eb309..41d8b42 100644
--- a/tests/test_revision.py
+++ b/tests/test_revision.py
@@ -3,12 +3,46 @@ from alembic.script.revision import Revision
from alembic.script.revision import RevisionError
from alembic.script.revision import RevisionMap
from alembic.testing import assert_raises_message
+from alembic.testing import config
from alembic.testing import eq_
from alembic.testing.fixtures import TestBase
from . import _large_map
class APITest(TestBase):
+ @config.requirements.python3
+ def test_invalid_datatype(self):
+ map_ = RevisionMap(
+ lambda: [
+ Revision("a", ()),
+ Revision("b", ("a",)),
+ Revision("c", ("b",)),
+ ]
+ )
+ assert_raises_message(
+ RevisionError,
+ "revision identifier b'12345' is not a string; "
+ "ensure database driver settings are correct",
+ map_.get_revisions, b'12345'
+ )
+
+ assert_raises_message(
+ RevisionError,
+ "revision identifier b'12345' is not a string; "
+ "ensure database driver settings are correct",
+ map_.get_revision, b'12345'
+ )
+
+ assert_raises_message(
+ RevisionError,
+ r"revision identifier \(b'12345',\) is not a string; "
+ "ensure database driver settings are correct",
+ map_.get_revision, (b'12345', )
+ )
+
+ map_.get_revision(("a", ))
+ map_.get_revision("a")
+
def test_add_revision_one_head(self):
map_ = RevisionMap(
lambda: [