source: main/waeup.sirp/branches/ulif-fasttables/src/waeup/sirp/jambtables/tests/test_jambtables.py @ 5252

Last change on this file since 5252 was 5250, checked in by uli, 15 years ago

Add interface compliance tests.

File size: 6.4 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 os
27import shutil
28import tempfile
29import unittest
30
31import grok
32
33from datetime import datetime
34
35from zope.interface.verify import verifyClass, verifyObject
36from zope.site import LocalSiteManager
37from zope.site.hooks import setSite, clearSite
38
39from waeup.sirp.app import University
40from waeup.sirp.datacenter import DataCenter
41from waeup.sirp.jambtables import JAMBDataTable
42from waeup.sirp.jambtables.interfaces import IJAMBDataTable
43
44
45class JAMBTableTestCaseBase(unittest.TestCase):
46
47    def setUp(self):
48        self.tempdir = tempfile.mkdtemp()
49        self.datafile = os.path.join(
50            self.tempdir, 'jambsample.csv'
51            )
52        open(self.datafile, 'wb').write(
53            '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' +
54            '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' +
55            '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' +
56            '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'
57            )
58        setSite()
59        return
60
61    def tearDown(self):
62        shutil.rmtree(self.tempdir)
63        return
64
65class JAMBTableTestCase(JAMBTableTestCaseBase):
66    def test_createJAMBTable(self):
67        table = JAMBDataTable()
68        self.assertEqual(table._data_len, 0)
69        self.assertEqual(table._temporary, False)
70        self.assertEqual(table._datafile_path, None)
71        return
72
73    def test_iterator(self):
74        table = JAMBDataTable()
75        self.assertEqual(len(list(table)), 0)
76        table.importFromCSV(self.datafile)
77        self.assertEqual(len(list(table)), 3)
78
79    def test_import(self):
80        table = JAMBDataTable()
81        self.assertEqual(table.import_datetime, None)
82        table.importFromCSV(self.datafile)
83        self.assertNotEqual(table.import_datetime, None)
84
85    def test_clear(self):
86        table = JAMBDataTable()
87        table.importFromCSV(self.datafile)
88        path = table._datafile_path
89        table.clear()
90        exists = os.path.exists(path)
91        self.assertEqual(exists, False)
92        self.assertEqual(0, len(list(table)))
93
94    def test_import_datetime(self):
95        table = JAMBDataTable()
96        self.assertTrue(table.import_datetime is None)
97        table.importFromCSV(self.datafile)
98        now = datetime.now()
99        diff = now - table.import_datetime
100        self.assertTrue(diff.seconds < 5)
101        table.clear()
102        self.assertTrue(table.import_datetime is None)
103
104    def test_keys(self):
105        table = JAMBDataTable()
106        self.assertFalse('91100546DD' in table.keys())
107        table.importFromCSV(self.datafile)
108        self.assertTrue('91100546DD' in table.keys())
109        self.assertFalse('91100546DE' in table.keys())
110
111    def test_items(self):
112        table = JAMBDataTable()
113        self.assertEqual([], list(table.items()))
114        table.importFromCSV(self.datafile)
115        self.assertNotEqual([], list(table.items()))
116
117    def test_interface_compliance(self):
118        self.assertTrue(verifyClass(IJAMBDataTable, JAMBDataTable))
119        table = JAMBDataTable()
120        self.assertTrue(verifyObject(IJAMBDataTable, table))
121        table.importFromCSV(self.datafile)
122        self.assertTrue(verifyObject(IJAMBDataTable, table))
123       
124class JAMBTableFunctionalTestCase(JAMBTableTestCaseBase):
125    """A test case where we check JAMB tables inside a site.
126    """
127
128    def setUp(self):
129        super(JAMBTableFunctionalTestCase, self).setUp()
130       
131        # We need at least these to register factories for a University.
132        grok.testing.grok('waeup.sirp.student')
133        grok.testing.grok('waeup.sirp.hostel')
134        grok.testing.grok('waeup.sirp.university')
135
136        self.site = University()
137        sm = LocalSiteManager(self.site)
138        self.site.setSiteManager(sm)
139        self.datacenter_dir = tempfile.mkdtemp()
140        self.datacenter = self.site['datacenter']
141        self.datacenter.setStoragePath(self.datacenter_dir)
142        # If the old datacenter already had a jambtables dir, remove it...
143        if os.path.isdir(
144            os.path.join(self.datacenter_dir, 'jambdata')
145            ):
146            shutil.rmtree(os.path.join(self.datacenter_dir, 'jambdata'))
147        return
148
149    def tearDown(self):
150        shutil.rmtree(self.tempdir)
151        shutil.rmtree(self.datacenter_dir)
152        # Unregister site...
153        setSite()
154        return
155
156    def test_createJAMBTableInSite(self):
157        table = JAMBDataTable()
158        self.assertEqual(table._data_len, 0)
159        self.assertEqual(table._temporary, False)
160        self.assertEqual(table._datafile_path, None)
161        table.importFromCSV(self.datafile)
162        return
163
164    def test_createJAMBTableOutsideSite(self):
165        clearSite(self.site)
166        table = JAMBDataTable()
167        self.assertEqual(table._data_len, 0)
168        self.assertEqual(table._temporary, False)
169        self.assertEqual(table._datafile_path, None)
170        table.importFromCSV(self.datafile)
171        return
172
173       
174def test_suite():
175    suite = unittest.TestSuite()
176    for testcase in [
177        JAMBTableTestCase,
178        JAMBTableFunctionalTestCase,
179        ]:
180        suite.addTest(unittest.TestLoader().loadTestsFromTestCase(
181                testcase
182                )
183        )
184    return suite
Note: See TracBrowser for help on using the repository browser.