summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/testing
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-02-06 15:49:32 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2013-02-06 15:49:32 -0500
commit2121c1690a17090a4027874751e90d02b4126fd2 (patch)
tree964a461f3d2ae21c6fcb3dd425d94e1274ee2776 /lib/sqlalchemy/testing
parent17790c9896e8ace4276b12b5f2cfcd366afae7e9 (diff)
downloadsqlalchemy-2121c1690a17090a4027874751e90d02b4126fd2.tar.gz
- add an "empty_inserts" requirement target plus a suite test
- add suite tests for basic explicit Sequence support, result-row column access (tests that name_normalize is set correctly among many other things)
Diffstat (limited to 'lib/sqlalchemy/testing')
-rw-r--r--lib/sqlalchemy/testing/requirements.py10
-rw-r--r--lib/sqlalchemy/testing/suite/__init__.py2
-rw-r--r--lib/sqlalchemy/testing/suite/test_insert.py18
-rw-r--r--lib/sqlalchemy/testing/suite/test_results.py69
-rw-r--r--lib/sqlalchemy/testing/suite/test_sequence.py54
5 files changed, 153 insertions, 0 deletions
diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py
index 2fb1b3143..f7d00afb2 100644
--- a/lib/sqlalchemy/testing/requirements.py
+++ b/lib/sqlalchemy/testing/requirements.py
@@ -69,6 +69,16 @@ class SuiteRequirements(Requirements):
return exclusions.open()
@property
+ def empty_inserts(self):
+ """target platform supports INSERT with no values, i.e.
+ INSERT DEFAULT VALUES or equivalent."""
+
+ return exclusions.only_if(
+ lambda: self.config.db.dialect.supports_empty_insert,
+ "empty inserts not supported"
+ )
+
+ @property
def returning(self):
"""target platform supports RETURNING."""
diff --git a/lib/sqlalchemy/testing/suite/__init__.py b/lib/sqlalchemy/testing/suite/__init__.py
index bb0465c9e..f65dd1a34 100644
--- a/lib/sqlalchemy/testing/suite/__init__.py
+++ b/lib/sqlalchemy/testing/suite/__init__.py
@@ -1,6 +1,8 @@
from sqlalchemy.testing.suite.test_ddl import *
from sqlalchemy.testing.suite.test_insert import *
+from sqlalchemy.testing.suite.test_sequence import *
+from sqlalchemy.testing.suite.test_results import *
from sqlalchemy.testing.suite.test_update_delete import *
from sqlalchemy.testing.suite.test_reflection import *
from sqlalchemy.testing.suite.test_types import *
diff --git a/lib/sqlalchemy/testing/suite/test_insert.py b/lib/sqlalchemy/testing/suite/test_insert.py
index b2b2a0aa8..e3ef2b206 100644
--- a/lib/sqlalchemy/testing/suite/test_insert.py
+++ b/lib/sqlalchemy/testing/suite/test_insert.py
@@ -107,6 +107,24 @@ class InsertBehaviorTest(fixtures.TablesTest):
assert r.is_insert
assert not r.returns_rows
+ @requirements.empty_inserts
+ def test_empty_insert(self):
+ r = config.db.execute(
+ self.tables.autoinc_pk.insert(),
+ )
+ assert r.closed
+
+ r = config.db.execute(
+ self.tables.autoinc_pk.select()
+ )
+
+ eq_(
+ r.fetchall(),
+ [(1, None)]
+ )
+
+
+
class ReturningTest(fixtures.TablesTest):
run_deletes = 'each'
diff --git a/lib/sqlalchemy/testing/suite/test_results.py b/lib/sqlalchemy/testing/suite/test_results.py
new file mode 100644
index 000000000..f81e30e0b
--- /dev/null
+++ b/lib/sqlalchemy/testing/suite/test_results.py
@@ -0,0 +1,69 @@
+from .. import fixtures, config
+from ..config import requirements
+from .. import exclusions
+from ..assertions import eq_
+from .. import engines
+
+from sqlalchemy import Integer, String, select, util
+
+from ..schema import Table, Column
+
+
+class RowFetchTest(fixtures.TablesTest):
+
+ @classmethod
+ def define_tables(cls, metadata):
+ Table('plain_pk', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('data', String(50))
+ )
+
+ @classmethod
+ def insert_data(cls):
+ config.db.execute(
+ cls.tables.plain_pk.insert(),
+ [
+ {"id":1, "data":"d1"},
+ {"id":2, "data":"d2"},
+ {"id":3, "data":"d3"},
+ ]
+ )
+
+ def test_via_string(self):
+ row = config.db.execute(
+ self.tables.plain_pk.select().\
+ order_by(self.tables.plain_pk.c.id)
+ ).first()
+
+ eq_(
+ row['id'], 1
+ )
+ eq_(
+ row['data'], "d1"
+ )
+
+ def test_via_int(self):
+ row = config.db.execute(
+ self.tables.plain_pk.select().\
+ order_by(self.tables.plain_pk.c.id)
+ ).first()
+
+ eq_(
+ row[0], 1
+ )
+ eq_(
+ row[1], "d1"
+ )
+
+ def test_via_col_object(self):
+ row = config.db.execute(
+ self.tables.plain_pk.select().\
+ order_by(self.tables.plain_pk.c.id)
+ ).first()
+
+ eq_(
+ row[self.tables.plain_pk.c.id], 1
+ )
+ eq_(
+ row[self.tables.plain_pk.c.data], "d1"
+ ) \ No newline at end of file
diff --git a/lib/sqlalchemy/testing/suite/test_sequence.py b/lib/sqlalchemy/testing/suite/test_sequence.py
new file mode 100644
index 000000000..0b60aa5b7
--- /dev/null
+++ b/lib/sqlalchemy/testing/suite/test_sequence.py
@@ -0,0 +1,54 @@
+from .. import fixtures, config
+from ..config import requirements
+from ..assertions import eq_
+
+from sqlalchemy import Integer, String, Sequence
+
+from ..schema import Table, Column
+
+class SequenceTest(fixtures.TablesTest):
+ __requires__ = ('sequences',)
+
+ run_create_tables = 'each'
+
+ @classmethod
+ def define_tables(cls, metadata):
+ Table('seq_pk', metadata,
+ Column('id', Integer, Sequence('tab_id_seq'), primary_key=True),
+ Column('data', String(50))
+ )
+
+ def test_insert_roundtrip(self):
+ config.db.execute(
+ self.tables.seq_pk.insert(),
+ data="some data"
+ )
+ self._assert_round_trip(self.tables.seq_pk, config.db)
+
+ def test_insert_lastrowid(self):
+ r = config.db.execute(
+ self.tables.seq_pk.insert(),
+ data="some data"
+ )
+ eq_(
+ r.inserted_primary_key,
+ [1]
+ )
+
+ def test_nextval_direct(self):
+ r = config.db.execute(
+ self.tables.seq_pk.c.id.default
+ )
+ eq_(
+ r, 1
+ )
+
+
+
+ def _assert_round_trip(self, table, conn):
+ row = conn.execute(table.select()).first()
+ eq_(
+ row,
+ (1, "some data")
+ )
+