X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=tests%2Fdbtest_fingerprint.py;h=8d57ea0f5c7e56e9890be4b3cab5add7b317ff1b;hb=7452ea84e72920178f3af1a717e7f034b5164449;hp=581795a5a987199170c8b237ec9e3db38340122c;hpb=83d12a41d882629937ed7fa6d65735d8f1e3e0a5;p=dak.git diff --git a/tests/dbtest_fingerprint.py b/tests/dbtest_fingerprint.py index 581795a5..8d57ea0f 100755 --- a/tests/dbtest_fingerprint.py +++ b/tests/dbtest_fingerprint.py @@ -3,11 +3,28 @@ 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): - def test_mini(self): + """ + The FingerprintTestCase tests the relation between Fingerprint and Uid + objects. + 1. It creates a fresh Fingerprint object. + 2. It assigns a fresh Uid object to the Fingerprint 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_relation(self): fingerprint = Fingerprint(fingerprint = 'deadbeefdeadbeef') self.session.add(fingerprint) query = self.session.query(Fingerprint) @@ -20,5 +37,33 @@ class FingerprintTestCase(DBDakTestCase): 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()