X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=tests%2Fdbtest_fingerprint.py;h=8d57ea0f5c7e56e9890be4b3cab5add7b317ff1b;hb=7c5adcf962fe99d6a42307595f263f47d0112fbc;hp=efd994d3267dec5f1b8f9b9ad9290ccc016d8742;hpb=3c40fa78b8c13b5212247bef6b9f83e7ce921945;p=dak.git diff --git a/tests/dbtest_fingerprint.py b/tests/dbtest_fingerprint.py index efd994d3..8d57ea0f 100755 --- a/tests/dbtest_fingerprint.py +++ b/tests/dbtest_fingerprint.py @@ -2,23 +2,68 @@ from db_test import DBDakTestCase -from daklib.dbconn import Fingerprint +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): - fingerprint = Fingerprint() - fingerprint.fingerprint = 'deadbeefdeadbeef' + """ + 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) - self.session.commit query = self.session.query(Fingerprint) self.assertEqual(1, query.count()) self.assertEqual('deadbeefdeadbeef', query.one().fingerprint) + fingerprint.uid = Uid(uid = 'ftp-master@debian.org', name = 'ftpteam') + uid = self.session.query(Uid).one() + self.assertEqual('ftp-master@debian.org', uid.uid) + self.assertEqual('ftpteam', uid.name) + 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 tearDown(self): - self.session.query(Fingerprint).delete() - super(FingerprintTestCase, self).tearDown() + 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()