source: main/waeup.sirp/trunk/src/waeup/sirp/applicants/jambtables/tests/test_jambtables.py @ 5799

Last change on this file since 5799 was 5797, checked in by uli, 14 years ago

Add test case for JAMBData root.

File size: 6.2 KB
Line 
1##
2## test_jambtables.py
3## Login : <uli@pu.smp.net>
4## Started on  Thu Jun 24 08:08:12 2010 Uli Fouquet
5## $Id$
6##
7## Copyright (C) 2010 Uli Fouquet
8## This program is free software; you can redistribute it and/or modify
9## it under the terms of the GNU General Public License as published by
10## the Free Software Foundation; either version 2 of the License, or
11## (at your option) any later version.
12##
13## This program is distributed in the hope that it will be useful,
14## but WITHOUT ANY WARRANTY; without even the implied warranty of
15## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16## GNU General Public License for more details.
17##
18## You should have received a copy of the GNU General Public License
19## along with this program; if not, write to the Free Software
20## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21##
22"""
23Tests for JAMB tables.
24
25"""
26import logging
27import os
28import shutil
29import tempfile
30import unittest
31
32import grok
33
34from cStringIO import StringIO
35from datetime import datetime
36
37from zope.interface.verify import verifyClass, verifyObject
38from zope.site import LocalSiteManager
39from zope.site.hooks import setSite, clearSite
40
41from waeup.sirp.app import University
42from waeup.sirp.datacenter import DataCenter
43from waeup.sirp.applicants.jambtables import (
44    JAMBDataPlugin, JAMBDataRoot,
45    )
46from waeup.sirp.applicants.jambtables.interfaces import (
47    IJAMBDataRoot,
48    )
49
50class FakeSite(dict):
51    pass
52
53class JAMBTableTestCaseBase(unittest.TestCase):
54
55    def setUp(self):
56        self.tempdir = tempfile.mkdtemp()
57        self.datafile = os.path.join(
58            self.tempdir, 'jambsample.csv'
59            )
60        open(self.datafile, 'wb').write(
61            'reg_no,fst_sit_fname,lastname,firstname,middlenames,sex,date_of_birth,jamb_state,jamb_lga,course1,screening_date,screening_venue,entry_session,screening_type,ignore_this_col\n' +
62            '91100546DD,ISUOSUO MOSES ODOMERO,ISUOSUO,MOSES,ODOMERO,M,25/5/1982,DEL,ISO-S,BSCPOL,2009/09/25 09:00:00 GMT+1,REPRINT SLIP AS FROM WED 23/09/2009,9,pde,blah\n' +
63            '91111834CC,DURUIHEOMA AUGUSTINA ADANNA,DURUIHEOMA,AUGUSTINA,ADANNA,F,15/4/1986,IMO,MBAIT,BSCPOL,2009/09/25 09:00:00 GMT+1,REPRINT SLIP AS FROM WED 23/09/2009,9,pde,blah\n' +
64            '91109351AC,ARISERE EBIKEBUNA COMFORT,ARISERE,EBIKEBUNA,COMFORT,F,6/1/1984,EDO,OV-SW,BSCPOL,2009/09/25 09:00:00 GMT+1,REPRINT SLIP AS FROM WED 23/09/2009,9,pde,blah\n'
65            )
66        setSite()
67        return
68
69    def tearDown(self):
70        shutil.rmtree(self.tempdir)
71        return
72
73class JAMBDataRootTestCase(unittest.TestCase):
74
75    def test_interfaces(self):
76        # Make sure the correct interfaces are implemented.
77        self.assertTrue(
78            verifyClass(IJAMBDataRoot, JAMBDataRoot)
79            )
80        self.assertTrue(
81            verifyObject(IJAMBDataRoot, JAMBDataRoot())
82            )
83        return
84
85class JAMBDataPluginTestCase(unittest.TestCase):
86    def create_logger(self):
87        # create a logger suitable for local tests.
88        test_logger = logging.getLogger('waeup.sirp.jambdata.testlogger')
89        log = StringIO()
90        handler = logging.StreamHandler(log)
91        handler.setLevel(logging.DEBUG)
92        test_logger.addHandler(handler)
93        test_logger.setLevel(logging.DEBUG)
94        self.logger = test_logger
95        self.log = log
96        self.handler = handler
97        return self.logger
98
99    def remove_logger(self):
100        del self.handler
101        del self.logger
102        del self.log
103        pass
104
105    def get_log(self):
106        self.log.seek(0)
107        return self.log.read()
108
109    def setUp(self):
110        self.create_logger()
111        return
112
113    def tearDown(self):
114        self.remove_logger()
115        return
116
117    # Real tests start here...
118    def test_pluginsetup(self):
119        # Make sure we can add ApplicantsRoot to sites.
120        site = FakeSite()
121        plugin = JAMBDataPlugin()
122        plugin.setup(site, 'blah', self.logger)
123        self.assertTrue('jambdata' in site.keys())
124        log = self.get_log()
125        self.assertTrue('JAMBDataPlugin: Installed JAMB data root.' in log)
126        return
127
128    def test_update_new(self):
129        # Run update on a site without applicants root.
130        site = FakeSite()
131        plugin = JAMBDataPlugin()
132        plugin.update(site, 'blah', self.logger)
133        self.assertTrue('jambdata' in site.keys())
134        log = self.get_log()
135        self.assertTrue('Updating site at <Unnamed Site>' in log)
136        self.assertTrue('Installed JAMB data root.' in log)
137        return
138
139    def test_update_outdated(self):
140        # Run update on a site with outdated applicants root.
141        site = FakeSite()
142        root = object() # # This is not a proper applicants root
143        site['jambdata'] = root
144        plugin = JAMBDataPlugin()
145        plugin.update(site, 'blah', self.logger)
146        self.assertTrue(site['jambdata'] is not root)
147        self.assertTrue(isinstance(site['jambdata'], JAMBDataRoot))
148        log = self.get_log()
149        self.assertTrue('Outdated JAMB data folder detected' in log)
150        self.assertTrue('Updating site at <Unnamed Site>' in log)
151        self.assertTrue('Installed JAMB data root.' in log)
152        return
153
154    def test_update_uptodate(self):
155        # Run update on a site with proper applicants root.
156        site = FakeSite()
157        root = JAMBDataRoot()
158        site['jambdata'] = root
159        plugin = JAMBDataPlugin()
160        plugin.update(site, 'blah', self.logger)
161        self.assertTrue(site['jambdata'] is root)
162        log = self.get_log()
163        self.assertTrue('Updating site at <Unnamed Site>' in log)
164        self.assertTrue('Nothing to do' in log)
165        return
166
167    def test_update_log(self):
168        # Check that sitename is used in log messages on updates.
169        site = FakeSite()
170        site.__name__ = 'my_site'
171        plugin = JAMBDataPlugin()
172        plugin.update(site, 'blah', self.logger)
173        log = self.get_log()
174        self.assertTrue('Updating site at my_site.' in log)
175        return
176
177       
178def test_suite():
179    suite = unittest.TestSuite()
180    for testcase in [
181        JAMBDataRootTestCase, JAMBDataPluginTestCase,
182        ]:
183        suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
184                testcase
185                )
186        )
187    return suite
Note: See TracBrowser for help on using the repository browser.