summaryrefslogtreecommitdiff
path: root/tests/test_environment.py
diff options
context:
space:
mode:
authorCaselIT <cfederico87@gmail.com>2020-10-19 23:23:08 +0200
committerMike Bayer <mike_mp@zzzcomputing.com>2021-01-11 23:41:43 -0500
commit365283aac593698fa483b54554f9443db3fe4933 (patch)
tree08cfa15232ef2e63b444d506f5750a704f97901e /tests/test_environment.py
parentebc1ea35b127bd56c48dcae43d226471fd6bf6c0 (diff)
downloadalembic-365283aac593698fa483b54554f9443db3fe4933.tar.gz
Accommodate SQLAlchemy 1.4/2.0
To accommodate SQLAlchemy 1.4 and 2.0, the migration model now no longer assumes that the SQLAlchemy Connection will autocommit an individual operation. This essentially means that for databases that use non-transactional DDL (pysqlite current driver behavior, MySQL), there is still a BEGIN/COMMIT block that will surround each individual migration. Databases that support transactional DDL should continue to have the same flow, either per migration or per-entire run, depending on the value of the :paramref:`.Environment.configure.transaction_per_migration` flag. Compatibility is established such that the entire library should not generate any SQLAlchemy 2.0 deprecation warnings and SQLALCHEMY_WARN_20 is part of conftest.py. (one warning remains for the moment that needs to be resolved on the SQLAlchemy side) The test suite requires SQLAlchemy 1.4.0b2 for testing 1.4; 1.4.0b1 won't work. Test suite / setup also being modernized, as we are at SQLAlchemy 1.3 we can now remove the majority of the testing suite plugin. Change-Id: If55b1ea3c12ead66405ab3fadc76d15d89dabb90
Diffstat (limited to 'tests/test_environment.py')
-rw-r--r--tests/test_environment.py29
1 files changed, 11 insertions, 18 deletions
diff --git a/tests/test_environment.py b/tests/test_environment.py
index 4fb6bbe..63de6cd 100644
--- a/tests/test_environment.py
+++ b/tests/test_environment.py
@@ -1,6 +1,7 @@
#!coding: utf-8
from alembic import command
from alembic import testing
+from alembic import util
from alembic.environment import EnvironmentContext
from alembic.migration import MigrationContext
from alembic.script import ScriptDirectory
@@ -11,7 +12,7 @@ from alembic.testing import is_
from alembic.testing import is_false
from alembic.testing import is_true
from alembic.testing import mock
-from alembic.testing.assertions import expect_warnings
+from alembic.testing.assertions import expect_raises_message
from alembic.testing.env import _no_sql_testing_config
from alembic.testing.env import _sqlite_file_db
from alembic.testing.env import clear_staging_env
@@ -94,10 +95,11 @@ def upgrade():
command.upgrade(self.cfg, "arev", sql=True)
assert "do some SQL thing with a % percent sign %" in buf.getvalue()
+ @config.requirements.legacy_engine
@testing.uses_deprecated(
r"The Engine.execute\(\) function/method is considered legacy"
)
- def test_warning_on_passing_engine(self):
+ def test_error_on_passing_engine(self):
env = self._fixture()
engine = _sqlite_file_db()
@@ -131,18 +133,15 @@ def downgrade():
migration_fn(rev, context)
return env.script._upgrade_revs(a_rev, rev)
- with expect_warnings(
+ with expect_raises_message(
+ util.CommandError,
r"'connection' argument to configure\(\) is "
- r"expected to be a sqlalchemy.engine.Connection "
+ r"expected to be a sqlalchemy.engine.Connection ",
):
env.configure(
connection=engine, fn=upgrade, transactional_ddl=False
)
- env.run_migrations()
-
- eq_(migration_fn.mock_calls, [mock.call((), env._migration_context)])
-
class MigrationTransactionTest(TestBase):
__backend__ = True
@@ -238,7 +237,7 @@ class MigrationTransactionTest(TestBase):
with context.begin_transaction():
is_false(self.conn.in_transaction())
with context.begin_transaction(_per_migration=True):
- is_false(self.conn.in_transaction())
+ is_true(self.conn.in_transaction())
is_false(self.conn.in_transaction())
is_false(self.conn.in_transaction())
@@ -264,7 +263,7 @@ class MigrationTransactionTest(TestBase):
with context.begin_transaction():
is_false(self.conn.in_transaction())
with context.begin_transaction(_per_migration=True):
- is_false(self.conn.in_transaction())
+ is_true(self.conn.in_transaction())
is_false(self.conn.in_transaction())
is_false(self.conn.in_transaction())
@@ -334,18 +333,12 @@ class MigrationTransactionTest(TestBase):
with context.begin_transaction():
is_false(self.conn.in_transaction())
with context.begin_transaction(_per_migration=True):
- if context.impl.transactional_ddl:
- is_true(self.conn.in_transaction())
- else:
- is_false(self.conn.in_transaction())
+ is_true(self.conn.in_transaction())
with context.autocommit_block():
is_false(self.conn.in_transaction())
- if context.impl.transactional_ddl:
- is_true(self.conn.in_transaction())
- else:
- is_false(self.conn.in_transaction())
+ is_true(self.conn.in_transaction())
is_false(self.conn.in_transaction())
is_false(self.conn.in_transaction())