[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dak/master] Really fix the DebVersion type in dbconn.py.



Signed-off-by: Torsten Werner <twerner@debian.org>
---
 daklib/dbconn.py            |    3 +-
 tests/dbtest_debversion.py  |   62 +++++++++++++++++++++++++++++++++++++++++++
 tests/dbtest_fingerprint.py |    4 +++
 3 files changed, 68 insertions(+), 1 deletions(-)
 create mode 100755 tests/dbtest_debversion.py

diff --git a/daklib/dbconn.py b/daklib/dbconn.py
index bae2bb3..d72f002 100755
--- a/daklib/dbconn.py
+++ b/daklib/dbconn.py
@@ -78,7 +78,8 @@ class DebVersion(UserDefinedType):
     def bind_processor(self, dialect):
         return None
 
-    def result_processor(self, dialect):
+    # ' = None' is needed for sqlalchemy 0.5:
+    def result_processor(self, dialect, coltype = None):
         return None
 
 sa_major_version = sqlalchemy.__version__[0:3]
diff --git a/tests/dbtest_debversion.py b/tests/dbtest_debversion.py
new file mode 100755
index 0000000..86dd3d2
--- /dev/null
+++ b/tests/dbtest_debversion.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+
+from db_test import DBDakTestCase
+
+from daklib.dbconn import DBConn, DebVersion
+
+from sqlalchemy import Table, Column, Integer, func
+from sqlalchemy.orm import mapper
+import unittest
+
+class Version(object):
+    def __init__(self, version):
+        self.version = version
+
+    def __repr__(self):
+        return "<Version('%s')>" % self.version
+
+class DebVersionTestCase(DBDakTestCase):
+    """
+    The DebVersionTestCase tests both comparison (<=, ==, >, !=), the in_()
+    method and aggregate functions (min, max) for the DebVersion type. To
+    simplify the test it creates a separate table 'version' which is not used
+    by dak itself.
+    """
+
+    def setUp(self):
+        super(DebVersionTestCase, self).setUp()
+        self.version_table = Table('version', self.metadata, \
+            Column('id', Integer, primary_key = True), \
+            Column('version', DebVersion), \
+            )
+        self.version_table.create(checkfirst = True)
+        mapper(Version, self.version_table)
+
+    def test_debversion(self):
+        v = Version('0.5~')
+        self.session.add(v)
+        v = Version('0.5')
+        self.session.add(v)
+        v = Version('1.0')
+        self.session.add(v)
+        q = self.session.query(Version)
+        self.assertEqual(3, q.count())
+        self.assertEqual(2, q.filter(Version.version <= '0.5').count())
+        self.assertEqual(1, q.filter(Version.version == '0.5').count())
+        self.assertEqual(2, q.filter(Version.version > '0.5~').count())
+        self.assertEqual(1, q.filter(Version.version > '0.5').count())
+        self.assertEqual(0, q.filter(Version.version > '1.0').count())
+        self.assertEqual(2, q.filter(Version.version != '1.0').count())
+        self.assertEqual(2, q.filter(Version.version.in_(['0.5~', '1.0'])).count())
+        q = self.session.query(func.min(Version.version))
+        self.assertEqual('0.5~', q.one()[0])
+        q = self.session.query(func.max(Version.version))
+        self.assertEqual('1.0', q.one()[0])
+
+    def tearDown(self):
+        self.session.close()
+        self.version_table.drop()
+        super(DebVersionTestCase, self).tearDown()
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/dbtest_fingerprint.py b/tests/dbtest_fingerprint.py
index c0d2352..efd994d 100755
--- a/tests/dbtest_fingerprint.py
+++ b/tests/dbtest_fingerprint.py
@@ -16,5 +16,9 @@ class FingerprintTestCase(DBDakTestCase):
         self.assertEqual(1, query.count())
         self.assertEqual('deadbeefdeadbeef', query.one().fingerprint)
 
+    def tearDown(self):
+        self.session.query(Fingerprint).delete()
+        super(FingerprintTestCase, self).tearDown()
+
 if __name__ == '__main__':
     unittest.main()
-- 
1.5.6.5


Reply to: