]> git.decadent.org.uk Git - dak.git/blob - tests/dbtest_fingerprint.py
Add more Fingerprint tests.
[dak.git] / tests / dbtest_fingerprint.py
1 #!/usr/bin/env python
2
3 from db_test import DBDakTestCase
4
5 from daklib.dbconn import Fingerprint, Uid
6
7 from sqlalchemy.exc import IntegrityError
8 import unittest
9
10 class FingerprintTestCase(DBDakTestCase):
11     """
12     The FingerprintTestCase tests the relation between Fingerprint and Uid
13     objects.
14     1. It creates a fresh Fingerprint object.
15     2. It assigns a fresh Uid object to the Fingerprint object.
16     3. It fetches the Uid object from the database.
17     4. It checks that the original fingerprint is assigned to the freshly
18        fetched Uid object.
19
20     Furthermore it checks various constraints like not null and unique.
21
22     TODO: the not null constraints should be enforced by the constructor in
23     dbconn.py. Should we check the exact format of the fingerprint?
24     """
25
26     def test_relation(self):
27         fingerprint = Fingerprint(fingerprint = 'deadbeefdeadbeef')
28         self.session.add(fingerprint)
29         query = self.session.query(Fingerprint)
30         self.assertEqual(1, query.count())
31         self.assertEqual('deadbeefdeadbeef', query.one().fingerprint)
32         fingerprint.uid = Uid(uid = 'ftp-master@debian.org', name = 'ftpteam')
33         uid = self.session.query(Uid).one()
34         self.assertEqual('ftp-master@debian.org', uid.uid)
35         self.assertEqual('ftpteam', uid.name)
36         self.assertEqual(1, len(uid.fingerprint))
37         self.assertEqual('deadbeefdeadbeef', uid.fingerprint[0].fingerprint)
38
39     def fingerprint_no_fingerprint(self):
40         self.session.add(Fingerprint())
41         self.session.flush()
42
43     def fingerprint_duplicate_fingerprint(self):
44         self.session.add(Fingerprint(fingerprint = 'affe0815'))
45         self.session.add(Fingerprint(fingerprint = 'affe0815'))
46         self.session.flush()
47
48     def uid_no_uid(self):
49         self.session.add(Uid(name = 'foobar'))
50         self.session.flush()
51
52     def uid_duplicate_uid(self):
53         self.session.add(Uid(uid = 'duplicate'))
54         self.session.add(Uid(uid = 'duplicate'))
55         self.session.flush()
56
57     def test_exceptions(self):
58         self.assertRaises(IntegrityError, self.fingerprint_no_fingerprint)
59         self.session.rollback()
60         self.assertRaises(IntegrityError, self.fingerprint_duplicate_fingerprint)
61         self.session.rollback()
62         self.assertRaises(IntegrityError, self.uid_no_uid)
63         self.session.rollback()
64         self.assertRaises(IntegrityError, self.uid_duplicate_uid)
65         self.session.rollback()
66
67 if __name__ == '__main__':
68     unittest.main()