summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-04-30 10:03:14 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-04-30 10:03:14 -0400
commitbe523db4a2409ebf2d2979896f08e8ae77c8ee03 (patch)
treeef06f3078742794d3eae68e5d0b3f803582e7222 /test
parente082ca503c6aa91d3fe7ac466457045af0439f71 (diff)
parent0c4f0f891654a378913c060da38829e81327097a (diff)
downloadsqlalchemy-be523db4a2409ebf2d2979896f08e8ae77c8ee03.tar.gz
merge default
Diffstat (limited to 'test')
-rw-r--r--test/engine/test_reconnect.py4
-rw-r--r--test/orm/test_transaction.py64
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):