jeancochrane / pytest-flask-sqlalchemy

A pytest plugin for preserving test isolation in Flask-SQLAlchemy using database transactions.
MIT License
255 stars 45 forks source link

Fix SesstionTransaction._connection_for_bind call. Fixes #53 #54

Open cybergrind opened 3 years ago

cybergrind commented 3 years ago

Fixes #53 Also fixes extra savepoints from #45

_connection_for_bind caches not bind directly but conn and conn.engine https://github.com/sqlalchemy/sqlalchemy/blob/rel_1_3_24/lib/sqlalchemy/orm/session.py#L453

because we're mocking session.bind with MagicMock it never gets into the _connections (conn.engine is an actual Engine instance in the end) and we're open nested transactions for every call of _connection_for_bind (#45) but also SA overwrite _connections on every call, thus we lose actual savepoint and always reset it to the most recent one. And because we always open transactions usually we rollback nothing.