diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-04-24 13:46:03 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-04-26 20:30:33 -0400 |
commit | 3c93a7ea8ac63fbad94f35950c497a1353616e5f (patch) | |
tree | 9a81e57d432585cc9e9c9d3e97aaabc395461061 /tests/test_revision.py | |
parent | 90330cc0f5f4baa9aaaa5d82229dedbef6d7cbf7 (diff) | |
download | alembic-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.py | 34 |
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: [ |