diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-04-30 10:03:14 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-04-30 10:03:14 -0400 |
| commit | be523db4a2409ebf2d2979896f08e8ae77c8ee03 (patch) | |
| tree | ef06f3078742794d3eae68e5d0b3f803582e7222 /test | |
| parent | e082ca503c6aa91d3fe7ac466457045af0439f71 (diff) | |
| parent | 0c4f0f891654a378913c060da38829e81327097a (diff) | |
| download | sqlalchemy-be523db4a2409ebf2d2979896f08e8ae77c8ee03.tar.gz | |
merge default
Diffstat (limited to 'test')
| -rw-r--r-- | test/engine/test_reconnect.py | 4 | ||||
| -rw-r--r-- | test/orm/test_transaction.py | 64 |
2 files changed, 65 insertions, 3 deletions
diff --git a/test/engine/test_reconnect.py b/test/engine/test_reconnect.py index 2b2824cb2..3dec01c69 100644 --- a/test/engine/test_reconnect.py +++ b/test/engine/test_reconnect.py @@ -618,11 +618,11 @@ class InvalidateDuringResultTest(fixtures.TestBase): engine.dispose() @testing.fails_if([ - '+mysqlconnector', '+mysqldb' + '+mysqlconnector', '+mysqldb', '+cymysql', '+pymysql', '+pg8000' ], "Buffers the result set and doesn't check for " "connection close") - @testing.fails_if('+informixdb', + @testing.fails_on('+informixdb', "Wrong error thrown, fix in informixdb?") def test_invalidate_on_results(self): conn = engine.connect() diff --git a/test/orm/test_transaction.py b/test/orm/test_transaction.py index 64b05a131..2866ab4ab 100644 --- a/test/orm/test_transaction.py +++ b/test/orm/test_transaction.py @@ -1,4 +1,4 @@ - +from __future__ import with_statement from sqlalchemy.testing import eq_, assert_raises, \ assert_raises_message, assert_warnings from sqlalchemy import * @@ -83,6 +83,8 @@ class SessionTransactionTest(FixtureTest): conn.close() raise + + @testing.requires.savepoints def test_heavy_nesting(self): users = self.tables.users @@ -620,6 +622,66 @@ class CleanSavepointTest(FixtureTest): synchronize_session='fetch') self._run_test(update_fn) +class ContextManagerTest(FixtureTest): + run_inserts = None + + @testing.requires.savepoints + @engines.close_open_connections + def test_contextmanager_nested_rollback(self): + users, User = self.tables.users, self.classes.User + + mapper(User, users) + + sess = Session() + def go(): + with sess.begin_nested(): + sess.add(User()) # name can't be null + sess.flush() + + # and not InvalidRequestError + assert_raises( + sa_exc.DBAPIError, + go + ) + + with sess.begin_nested(): + sess.add(User(name='u1')) + + eq_(sess.query(User).count(), 1) + + def test_contextmanager_commit(self): + users, User = self.tables.users, self.classes.User + + mapper(User, users) + + sess = Session(autocommit=True) + with sess.begin(): + sess.add(User(name='u1')) + + sess.rollback() + eq_(sess.query(User).count(), 1) + + def test_contextmanager_rollback(self): + users, User = self.tables.users, self.classes.User + + mapper(User, users) + + sess = Session(autocommit=True) + def go(): + with sess.begin(): + sess.add(User()) # name can't be null + assert_raises( + sa_exc.DBAPIError, + go + ) + + eq_(sess.query(User).count(), 0) + + with sess.begin(): + sess.add(User(name='u1')) + eq_(sess.query(User).count(), 1) + + class AutoExpireTest(_LocalFixture): def test_expunge_pending_on_rollback(self): |
