source: main/waeup.sirp/trunk/src/waeup/sirp/university/tests/test_certificatescontainer.py @ 10687

Last change on this file since 10687 was 7333, checked in by Henrik Bettermann, 13 years ago

Rename certificatecontainer, coursecontainer and facultycontainer. Now we have e.g. a container for faculties. Synonyms are 'facultiescontainer', 'faculties', 'academics' or 'Academic Section'. The faculty container is the faculty itself which contains the departments.

  • Property svn:keywords set to Id
File size: 5.1 KB
Line 
1## $Id: test_certificatescontainer.py 7333 2011-12-12 07:01:54Z henrik $
2##
3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
4## This program is free software; you can redistribute it and/or modify
5## it under the terms of the GNU General Public License as published by
6## the Free Software Foundation; either version 2 of the License, or
7## (at your option) any later version.
8##
9## This program is distributed in the hope that it will be useful,
10## but WITHOUT ANY WARRANTY; without even the implied warranty of
11## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12## GNU General Public License for more details.
13##
14## You should have received a copy of the GNU General Public License
15## along with this program; if not, write to the Free Software
16## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17##
18"""
19Tests for certificate containers and related components.
20"""
21import shutil
22import tempfile
23import unittest
24from zope.component.hooks import setSite, clearSite
25from zope.interface.verify import verifyClass, verifyObject
26
27from waeup.sirp.app import University
28from waeup.sirp.interfaces import DuplicationError
29from waeup.sirp.testing import (
30    FunctionalLayer, doctestsuite_for_module, FunctionalTestCase)
31from waeup.sirp.university.certificate import Certificate
32from waeup.sirp.university.certificatescontainer import CertificatesContainer
33from waeup.sirp.university.interfaces import ICertificatesContainer
34
35
36class CertificatesContainerTests(FunctionalTestCase):
37
38    layer = FunctionalLayer
39
40    def setUp(self):
41        super(CertificatesContainerTests, self).setUp()
42
43        # Setup a sample site for each test
44        app = University()
45        self.dc_root = tempfile.mkdtemp()
46        app['datacenter'].setStoragePath(self.dc_root)
47
48        # Prepopulate the ZODB...
49        self.getRootFolder()['app'] = app
50        self.app = self.getRootFolder()['app']
51        setSite(self.app)
52
53    def tearDown(self):
54        super(CertificatesContainerTests, self).tearDown()
55        clearSite()
56        shutil.rmtree(self.dc_root)
57
58    def test_create(self):
59        # we can create instances
60        container = CertificatesContainer()
61        result = isinstance(container, CertificatesContainer)
62        assert result is True
63
64    def test_provides_icertificatescontainer(self):
65        # instances tell they provide their main interface
66        container = CertificatesContainer()
67        result = ICertificatesContainer.providedBy(container)
68        assert result is True
69
70    def test_interfaces(self):
71        # class and instances comply with their main interface
72        container = CertificatesContainer()
73        self.assertTrue(verifyClass(ICertificatesContainer, CertificatesContainer))
74        self.assertTrue(verifyObject(ICertificatesContainer, container))
75
76    def test_add_certificate_non_icertificate(self):
77        # we cannot add certificates that do not implement ICertificate.
78        container = CertificatesContainer()
79        self.assertRaises(
80            TypeError, container.addCertificate, 'some_string')
81
82    def test_add_certificate_no_duplicate_entry(self):
83        # we cannot add certificates that are registered already.
84        container = CertificatesContainer()
85        # We must place this container in the ZODB to make catalogs work.
86        self.app['certs'] = container
87        cert1 = Certificate(code="CERT1")
88        cert2 = Certificate(code="CERT1")
89        container.addCertificate(cert1)
90        self.assertRaises(
91            DuplicationError,
92            container.addCertificate, cert2)
93
94    def test_setitem_duplicate_entry(self):
95        # we cannot add certificates whose code exists already in catalog
96        container1 = CertificatesContainer()
97        container2 = CertificatesContainer()
98        self.app['certs1'] = container1 # enable catalogs
99        self.app['certs2'] = container2
100        cert1 = Certificate(code="CERT1")
101        cert2 = Certificate(code="CERT1")
102        self.app['certs1']['CERT1'] = cert1
103        self.assertRaises(
104            DuplicationError,
105            self.app['certs2'].__setitem__, 'CERT1', cert2)
106        assert len(container2) == 0
107
108    def test_setitem_name_unequal_code(self):
109        # we cannot add certificates whose code != key
110        container = CertificatesContainer()
111        self.app['certs'] = container # enable catalogs
112        cert1 = Certificate(code="CERT1")
113        self.assertRaises(
114            ValueError,
115            container.__setitem__, 'OtherKey', cert1)
116        assert len(container) == 0
117
118    def test_clear(self):
119        # clear() really empties the container.
120        container = CertificatesContainer()
121        self.app['certs'] = container # enable catalogs
122        cert1 = Certificate(code="CERT1")
123        cert2 = Certificate(code="CERT2")
124        container['CERT1'] = cert1
125        container['CERT2'] = cert2
126        container.clear()
127        assert len(container) == 0
128
129
130def test_suite():
131    suite = unittest.TestSuite((
132        unittest.makeSuite(CertificatesContainerTests),
133        doctestsuite_for_module(
134                'waeup.sirp.university.certificatescontainer'),
135        ))
136    return suite
137
138if __name__=='__main__':
139    unittest.main(defaultTest='test_suite')
Note: See TracBrowser for help on using the repository browser.