source: main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_root.py

Last change on this file was 7811, checked in by uli, 13 years ago

Rename all non-locales stuff from sirp to kofa.

  • Property svn:keywords set to Id
File size: 6.7 KB
RevLine 
[7193]1## $Id: test_root.py 7811 2012-03-08 19:00:51Z uli $
[5646]2##
[7193]3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
[5646]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.
[7193]8##
[5646]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.
[7193]13##
[5646]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"""
[5676]19Test applicants root.
[5646]20"""
[5659]21import logging
[6120]22import shutil
23import tempfile
[5646]24import unittest
[5659]25from StringIO import StringIO
[6659]26from zope.component.hooks import setSite, clearSite
[5646]27from zope.interface.verify import verifyClass, verifyObject
[7811]28from waeup.kofa.app import University
29from waeup.kofa.applicants import (
[7375]30    interfaces, Applicant, ApplicantsContainer,
[5808]31    )
[7811]32from waeup.kofa.applicants.root import (
[5676]33    ApplicantsRoot, ApplicantsPlugin,
[5659]34    )
[7811]35from waeup.kofa.testing import (
[7063]36    FunctionalLayer, FunctionalTestCase, remove_logger)
[5646]37
[5808]38
[5659]39class FakeSite(dict):
40    pass
41
[6442]42class ApplicantsRootTestCase(FunctionalTestCase):
[5646]43
[6442]44    layer = FunctionalLayer
45
46    def setUp(self):
[7811]47        remove_logger('waeup.kofa.app.applicants')
[6442]48        super(ApplicantsRootTestCase, self).setUp()
49        # Setup a sample site for each test
50        # Prepopulate the ZODB...
[6578]51        app = University()
[6442]52        self.getRootFolder()['app'] = app
53        self.app = self.getRootFolder()['app']
54        setSite(self.app)
[6578]55        self.dc_root = tempfile.mkdtemp()
56        app['datacenter'].setStoragePath(self.dc_root)
[6442]57        return
58
59    def tearDown(self):
60        super(ApplicantsRootTestCase, self).tearDown()
61        shutil.rmtree(self.dc_root)
[6658]62        clearSite()
[6442]63        return
64
[5646]65    def test_interfaces(self):
66        # Make sure the correct interfaces are implemented.
67        self.assertTrue(
68            verifyClass(
[5676]69                interfaces.IApplicantsRoot, ApplicantsRoot)
[5646]70            )
71        self.assertTrue(
72            verifyObject(
[5676]73                interfaces.IApplicantsRoot, ApplicantsRoot())
[5646]74            )
75        return
76
[6442]77    def test_logger(self):
78        # We can get a logger from root
79        logger = self.app['applicants'].logger
80        assert logger is not None
[7811]81        assert logger.name == 'waeup.kofa.app.applicants'
[6442]82        handlers = logger.handlers
83        assert len(handlers) == 1
84        filename = logger.handlers[0].baseFilename
85        assert filename.endswith('applicants.log')
86        assert filename.startswith(self.dc_root)
87
[6443]88    def test_logger_multiple(self):
89        # Make sure the logger is still working after 2nd call
90        # First time we call it, it might be registered
91        logger = self.app['applicants'].logger
92        # At second call the already registered logger should be returned
93        logger = self.app['applicants'].logger
94        assert logger is not None
[7811]95        assert logger.name == 'waeup.kofa.app.applicants'
[6443]96        handlers = logger.handlers
97        assert len(handlers) == 1
98        filename = logger.handlers[0].baseFilename
99        assert filename.endswith('applicants.log')
100        assert filename.startswith(self.dc_root)
101
[5676]102class ApplicantsRootPluginTestCase(unittest.TestCase):
[5659]103    def create_logger(self):
104        # create a logger suitable for local tests.
[7811]105        test_logger = logging.getLogger('waeup.kofa.applicants.testlogger')
[5659]106        log = StringIO()
107        handler = logging.StreamHandler(log)
108        handler.setLevel(logging.DEBUG)
109        test_logger.addHandler(handler)
110        test_logger.setLevel(logging.DEBUG)
111        self.logger = test_logger
112        self.log = log
113        self.handler = handler
114        return self.logger
115
116    def remove_logger(self):
117        del self.handler
118        del self.logger
119        del self.log
120        pass
121
122    def get_log(self):
123        self.log.seek(0)
124        return self.log.read()
125
126    def setUp(self):
127        self.create_logger()
128        return
129
130    def tearDown(self):
131        self.remove_logger()
132        return
133
134    # Real tests start here...
135    def test_pluginsetup(self):
[5676]136        # Make sure we can add ApplicantsRoot to sites.
[5659]137        site = FakeSite()
[5676]138        plugin = ApplicantsPlugin()
[5659]139        plugin.setup(site, 'blah', self.logger)
[5676]140        self.assertTrue('applicants' in site.keys())
[5659]141        log = self.get_log()
[5676]142        self.assertTrue('Installed applicants root.' in log)
[5659]143        return
144
145    def test_update_new(self):
[5676]146        # Run update on a site without applicants root.
[5659]147        site = FakeSite()
[5676]148        plugin = ApplicantsPlugin()
[5659]149        plugin.update(site, 'blah', self.logger)
[5676]150        self.assertTrue('applicants' in site.keys())
[5659]151        log = self.get_log()
[5684]152        self.assertTrue('Updating site at <Unnamed Site>' in log)
[5676]153        self.assertTrue('Installed applicants root.' in log)
[5659]154        return
155
156    def test_update_outdated(self):
[5676]157        # Run update on a site with outdated applicants root.
[5659]158        site = FakeSite()
[5676]159        root = object() # # This is not a proper applicants root
160        site['applicants'] = root
161        plugin = ApplicantsPlugin()
[5659]162        plugin.update(site, 'blah', self.logger)
[5676]163        self.assertTrue(site['applicants'] is not root)
164        self.assertTrue(isinstance(site['applicants'], ApplicantsRoot))
[5659]165        log = self.get_log()
[5676]166        self.assertTrue('Outdated applicants folder detected' in log)
[5684]167        self.assertTrue('Updating site at <Unnamed Site>' in log)
[5676]168        self.assertTrue('Installed applicants root.' in log)
[5659]169        return
170
171    def test_update_uptodate(self):
[5676]172        # Run update on a site with proper applicants root.
[5659]173        site = FakeSite()
[5676]174        root = ApplicantsRoot()
175        site['applicants'] = root
176        plugin = ApplicantsPlugin()
[5659]177        plugin.update(site, 'blah', self.logger)
[5676]178        self.assertTrue(site['applicants'] is root)
[5659]179        log = self.get_log()
[5684]180        self.assertTrue('Updating site at <Unnamed Site>' in log)
[5659]181        self.assertTrue('Nothing to do' in log)
182        return
183
184    def test_update_log(self):
185        # Check that sitename is used in log messages on updates.
186        site = FakeSite()
187        site.__name__ = 'my_site'
[5676]188        plugin = ApplicantsPlugin()
[5659]189        plugin.update(site, 'blah', self.logger)
190        log = self.get_log()
191        self.assertTrue('Updating site at my_site.' in log)
192        return
[5766]193
[5646]194def suite():
195    suite = unittest.TestSuite()
[5659]196    for testcase in [
[5676]197            ApplicantsRootTestCase,
198            ApplicantsRootPluginTestCase,
[5659]199            ]:
[5809]200        suite.addTests(unittest.makeSuite(testcase))
[5646]201    return suite
202
203test_suite = suite
Note: See TracBrowser for help on using the repository browser.