]> git.decadent.org.uk Git - dak.git/blobdiff - tests/dbtest_fingerprint.py
Merge remote-tracking branch 'jcristau/formatone-no-tar-sig'
[dak.git] / tests / dbtest_fingerprint.py
index a42a6ce3203f3e0309028ad89763c8cc5ac9f437..8d57ea0f5c7e56e9890be4b3cab5add7b317ff1b 100755 (executable)
@@ -3,7 +3,9 @@
 from db_test import DBDakTestCase
 
 from daklib.dbconn import Fingerprint, Uid
 from db_test import DBDakTestCase
 
 from daklib.dbconn import Fingerprint, Uid
+from daklib.dak_exceptions import DBUpdateError
 
 
+from sqlalchemy.exc import IntegrityError
 import unittest
 
 class FingerprintTestCase(DBDakTestCase):
 import unittest
 
 class FingerprintTestCase(DBDakTestCase):
@@ -15,9 +17,14 @@ class FingerprintTestCase(DBDakTestCase):
     3. It fetches the Uid object from the database.
     4. It checks that the original fingerprint is assigned to the freshly
        fetched Uid object.
     3. It fetches the Uid object from the database.
     4. It checks that the original fingerprint is assigned to the freshly
        fetched Uid object.
+
+    Furthermore it checks various constraints like not null and unique.
+
+    TODO: the not null constraints should be enforced by the constructor in
+    dbconn.py. Should we check the exact format of the fingerprint?
     """
 
     """
 
-    def test_mini(self):
+    def test_relation(self):
         fingerprint = Fingerprint(fingerprint = 'deadbeefdeadbeef')
         self.session.add(fingerprint)
         query = self.session.query(Fingerprint)
         fingerprint = Fingerprint(fingerprint = 'deadbeefdeadbeef')
         self.session.add(fingerprint)
         query = self.session.query(Fingerprint)
@@ -30,5 +37,33 @@ class FingerprintTestCase(DBDakTestCase):
         self.assertEqual(1, len(uid.fingerprint))
         self.assertEqual('deadbeefdeadbeef', uid.fingerprint[0].fingerprint)
 
         self.assertEqual(1, len(uid.fingerprint))
         self.assertEqual('deadbeefdeadbeef', uid.fingerprint[0].fingerprint)
 
+    def fingerprint_no_fingerprint(self):
+        self.session.add(Fingerprint())
+        self.session.flush()
+
+    def fingerprint_duplicate_fingerprint(self):
+        self.session.add(Fingerprint(fingerprint = 'affe0815'))
+        self.session.add(Fingerprint(fingerprint = 'affe0815'))
+        self.session.flush()
+
+    def uid_no_uid(self):
+        self.session.add(Uid(name = 'foobar'))
+        self.session.flush()
+
+    def uid_duplicate_uid(self):
+        self.session.add(Uid(uid = 'duplicate'))
+        self.session.add(Uid(uid = 'duplicate'))
+        self.session.flush()
+
+    def test_exceptions(self):
+        self.assertRaises(DBUpdateError, self.fingerprint_no_fingerprint)
+        self.session.rollback()
+        self.assertRaises(IntegrityError, self.fingerprint_duplicate_fingerprint)
+        self.session.rollback()
+        self.assertRaises(DBUpdateError, self.uid_no_uid)
+        self.session.rollback()
+        self.assertRaises(IntegrityError, self.uid_duplicate_uid)
+        self.session.rollback()
+
 if __name__ == '__main__':
     unittest.main()
 if __name__ == '__main__':
     unittest.main()