source: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_export.py @ 8408

Last change on this file since 8408 was 8402, checked in by uli, 13 years ago

Import study courses from original location.

  • Property svn:keywords set to Id
File size: 13.2 KB
Line 
1import datetime
2from zope.component import queryUtility
3from zope.interface.verify import verifyObject, verifyClass
4from waeup.kofa.interfaces import ICSVExporter
5from waeup.kofa.students.export import (
6    StudentsExporter, StudentStudyCourseExporter, StudentStudyLevelExporter,
7    CourseTicketExporter, PaymentsExporter)
8from waeup.kofa.students.payments import StudentOnlinePayment
9from waeup.kofa.students.studycourse import StudentStudyCourse
10from waeup.kofa.students.studylevel import StudentStudyLevel, CourseTicket
11from waeup.kofa.students.tests.test_batching import StudentImportExportSetup
12from waeup.kofa.testing import FunctionalLayer
13
14class StudentsExporterTest(StudentImportExportSetup):
15
16    layer = FunctionalLayer
17
18    def setUp(self):
19        super(StudentsExporterTest, self).setUp()
20        self.setup_for_export()
21        return
22
23    def test_ifaces(self):
24        # make sure we fullfill interface contracts
25        obj = StudentsExporter()
26        verifyObject(ICSVExporter, obj)
27        verifyClass(ICSVExporter, StudentsExporter)
28        return
29
30    def test_get_as_utility(self):
31        # we can get an student exporter as utility
32        result = queryUtility(ICSVExporter, name="students")
33        self.assertTrue(result is not None)
34        return
35
36    def test_export(self):
37        # we can really export students
38        # set values we can expect in export file
39        self.setup_student(self.student)
40        exporter = StudentsExporter()
41        exporter.export([self.student], self.outfile)
42        result = open(self.outfile, 'rb').read()
43        self.assertEqual(
44            result,
45            'adm_code,clearance_locked,clr_code,date_of_birth,email,employer,'
46            'firstname,lastname,matric_number,middlename,nationality,'
47            'perm_address,phone,reg_number,sex,student_id\r\n'
48
49            'my adm code,0,my clr code,1981-02-04#,anna@sample.com,,Anna,'
50            'Tester,M123456,M.,NG,"Studentroad 21\nLagos 123456\n",'
51            '+234-123-12345,123456,f,A111111\r\n'
52            )
53        return
54
55    def test_export_all(self):
56        # we can really export students
57        # set values we can expect in export file
58        self.setup_student(self.student)
59        exporter = StudentsExporter()
60        exporter.export_all(self.app, self.outfile)
61        result = open(self.outfile, 'rb').read()
62        self.assertEqual(
63            result,
64            'adm_code,clearance_locked,clr_code,date_of_birth,email,employer,'
65            'firstname,lastname,matric_number,middlename,nationality,'
66            'perm_address,phone,reg_number,sex,student_id\r\n'
67
68            'my adm code,0,my clr code,1981-02-04#,anna@sample.com,,Anna,'
69            'Tester,M123456,M.,NG,"Studentroad 21\nLagos 123456\n",'
70            '+234-123-12345,123456,f,A111111\r\n'
71            )
72        return
73
74class StudentStudyCourseExporterTest(StudentImportExportSetup):
75
76    layer = FunctionalLayer
77
78    def setUp(self):
79        super(StudentStudyCourseExporterTest, self).setUp()
80        self.setup_for_export()
81        return
82
83    def test_ifaces(self):
84        # make sure we fullfill interface contracts
85        obj = StudentStudyCourseExporter()
86        verifyObject(ICSVExporter, obj)
87        verifyClass(ICSVExporter, StudentStudyCourseExporter)
88        return
89
90    def test_get_as_utility(self):
91        # we can get an student exporter as utility
92        result = queryUtility(ICSVExporter, name="studentstudycourses")
93        self.assertTrue(result is not None)
94        return
95
96    def test_export_empty(self):
97        # we can export a nearly empty study course
98        study_course = StudentStudyCourse()
99        exporter = StudentStudyCourseExporter()
100        exporter.export([study_course], self.outfile)
101        result = open(self.outfile, 'rb').read()
102        self.assertEqual(
103            result,
104            'certificate,current_level,current_session,current_verdict,'
105            'entry_mode,entry_session,previous_verdict\r\n'
106
107            ',,,0,,,0\r\n'
108            )
109        return
110
111    def test_export(self):
112        # we can really export study courses.
113        # set values we can expect in export file
114        self.setup_student(self.student)
115        study_course = self.student.get('studycourse')
116        exporter = StudentStudyCourseExporter()
117        exporter.export([study_course], self.outfile)
118        result = open(self.outfile, 'rb').read()
119        self.assertEqual(
120            result,
121            'certificate,current_level,current_session,current_verdict,'
122            'entry_mode,entry_session,previous_verdict\r\n'
123
124            'CERT1,200,2012,0,ug_ft,2010,0\r\n'
125            )
126        return
127
128    def test_export_all(self):
129        # we can really export students
130        # set values we can expect in export file
131        self.setup_student(self.student)
132        exporter = StudentStudyCourseExporter()
133        exporter.export_all(self.app, self.outfile)
134        result = open(self.outfile, 'rb').read()
135        self.assertEqual(
136            result,
137            'certificate,current_level,current_session,current_verdict,'
138            'entry_mode,entry_session,previous_verdict\r\n'
139
140            'CERT1,200,2012,0,ug_ft,2010,0\r\n'
141            )
142        return
143
144class StudentStudyLevelExporterTest(StudentImportExportSetup):
145
146    layer = FunctionalLayer
147
148    def setUp(self):
149        super(StudentStudyLevelExporterTest, self).setUp()
150        self.setup_for_export()
151        return
152
153    def test_ifaces(self):
154        # make sure we fullfill interface contracts
155        obj = StudentStudyLevelExporter()
156        verifyObject(ICSVExporter, obj)
157        verifyClass(ICSVExporter, StudentStudyLevelExporter)
158        return
159
160    def test_get_as_utility(self):
161        # we can get an student exporter as utility
162        result = queryUtility(ICSVExporter, name="studentstudylevels")
163        self.assertTrue(result is not None)
164        return
165
166    def test_export_empty(self):
167        # we can export a nearly empty study level
168        study_level = StudentStudyLevel()
169        exporter = StudentStudyLevelExporter()
170        exporter.export([study_level], self.outfile)
171        result = open(self.outfile, 'rb').read()
172        self.assertEqual(
173            result,
174            'level,level_session,level_verdict,matric_number,reg_number\r\n'
175            ',,0,,\r\n'
176            )
177        return
178
179    def test_export(self):
180        # we can really export study levels.
181        # set values we can expect in export file
182        self.setup_student(self.student)
183        study_course = self.student.get('studycourse')
184        study_level = study_course[study_course.keys()[0]]
185        exporter = StudentStudyLevelExporter()
186        exporter.export([study_level], self.outfile)
187        result = open(self.outfile, 'rb').read()
188        self.assertEqual(
189            result,
190            'level,level_session,level_verdict,matric_number,reg_number\r\n'
191            '100,2012,A,M123456,123456\r\n'
192            )
193        return
194
195    def test_export_all(self):
196        # we can really export study levels
197        # set values we can expect in export file
198        self.setup_student(self.student)
199        exporter = StudentStudyLevelExporter()
200        exporter.export_all(self.app, self.outfile)
201        result = open(self.outfile, 'rb').read()
202        self.assertEqual(
203            result,
204            'level,level_session,level_verdict,matric_number,reg_number\r\n'
205            '100,2012,A,M123456,123456\r\n'
206            )
207        return
208
209class CourseTicketExporterTest(StudentImportExportSetup):
210
211    layer = FunctionalLayer
212
213    def setUp(self):
214        super(CourseTicketExporterTest, self).setUp()
215        self.setup_for_export()
216        return
217
218    def test_ifaces(self):
219        # make sure we fullfill interface contracts
220        obj = CourseTicketExporter()
221        verifyObject(ICSVExporter, obj)
222        verifyClass(ICSVExporter, CourseTicketExporter)
223        return
224
225    def test_get_as_utility(self):
226        # we can get an student exporter as utility
227        result = queryUtility(ICSVExporter, name="coursetickets")
228        self.assertTrue(result is not None)
229        return
230
231    def test_export_empty(self):
232        # we can export a nearly empty course ticket
233        ticket = CourseTicket()
234        exporter = CourseTicketExporter()
235        exporter.export([ticket], self.outfile)
236        result = open(self.outfile, 'rb').read()
237        self.assertEqual(
238            result,
239            'automatic,carry_over,code,credits,dcode,fcode,level,mandatory,'
240            'matric_number,passmark,reg_number,score,semester,title\r\n'
241            '0,0,,,,,,0,,,,0,,\r\n'
242            )
243        return
244
245    def test_export(self):
246        # we can really export course tickets.
247        # set values we can expect in export file
248        self.setup_student(self.student)
249        study_course = self.student.get('studycourse')
250        study_level = study_course[study_course.keys()[0]]
251        ticket = study_level['CRS1']
252        exporter = CourseTicketExporter()
253        exporter.export([ticket], self.outfile)
254        result = open(self.outfile, 'rb').read()
255        self.assertEqual(
256            result,
257            'automatic,carry_over,code,credits,dcode,fcode,level,mandatory,'
258            'matric_number,passmark,reg_number,score,semester,title\r\n'
259            '1,1,CRS1,100,DEP1,FAC1,100,0,M123456,100,123456,0,2,Course 1\r\n'
260            )
261        return
262
263    def test_export_all(self):
264        # we can really export all course tickets
265        # set values we can expect in export file
266        self.setup_student(self.student)
267        exporter = CourseTicketExporter()
268        exporter.export_all(self.app, self.outfile)
269        result = open(self.outfile, 'rb').read()
270        self.assertEqual(
271            result,
272            'automatic,carry_over,code,credits,dcode,fcode,level,mandatory,'
273            'matric_number,passmark,reg_number,score,semester,title\r\n'
274            '1,1,CRS1,100,DEP1,FAC1,100,0,M123456,100,123456,0,2,Course 1\r\n'
275            )
276        return
277
278class PaymentsExporterTest(StudentImportExportSetup):
279
280    layer = FunctionalLayer
281
282    def setUp(self):
283        super(PaymentsExporterTest, self).setUp()
284        self.setup_for_export()
285        return
286
287    def get_payment(self):
288        # get a payment with all fields set
289        payment = StudentOnlinePayment()
290        payment.creation_date = datetime.datetime(2012, 4, 1, 13, 12, 1)
291        payment.p_id = 'my-id'
292        payment.ac = u'666'
293        payment.p_item = u'p-item'
294        payment.p_level = 100
295        payment.p_session = 2012
296        payment.payment_date = datetime.datetime(2012, 4, 1, 14, 12, 1)
297        payment.r_amount_approved = 12.12
298        payment.r_code = u'r-code'
299        # XXX: there is no addPayment method to give predictable names
300        self.student['payments']['my-payment'] = payment
301        return payment
302
303    def test_ifaces(self):
304        # make sure we fullfill interface contracts
305        obj = PaymentsExporter()
306        verifyObject(ICSVExporter, obj)
307        verifyClass(ICSVExporter, PaymentsExporter)
308        return
309
310    def test_get_as_utility(self):
311        # we can get a payments exporter as utility
312        result = queryUtility(ICSVExporter, name="studentpayments")
313        self.assertTrue(result is not None)
314        return
315
316    def test_export_empty(self):
317        # we can export a nearly empty payment
318        payment = StudentOnlinePayment()
319        payment.creation_date = datetime.datetime(2012, 4, 1, 13, 12, 1)
320        exporter = PaymentsExporter()
321        exporter.export([payment], self.outfile)
322        result = open(self.outfile, 'rb').read()
323        self.assertEqual(
324            result,
325            'ac,amount_auth,creation_date,matric_number,p_category,p_id,'
326            'p_item,p_level,p_session,p_state,payment_date,r_amount_approved,'
327            'r_code,reg_number\r\n'
328
329            ',0.0,2012-04-01 13:12:01,,schoolfee,,,,,unpaid,,0.0,,\r\n'
330            )
331        return
332
333    def test_export(self):
334        # we can really export student payments.
335        # set values we can expect in export file
336        self.setup_student(self.student)
337        payment = self.get_payment()
338        exporter = PaymentsExporter()
339        exporter.export([payment], self.outfile)
340        result = open(self.outfile, 'rb').read()
341        self.assertEqual(
342            result,
343            'ac,amount_auth,creation_date,matric_number,p_category,p_id,'
344            'p_item,p_level,p_session,p_state,payment_date,r_amount_approved,'
345            'r_code,reg_number\r\n'
346
347            '666,0.0,2012-04-01 13:12:01,M123456,schoolfee,my-id,'
348            'p-item,100,2012,unpaid,2012-04-01 14:12:01,12.12,'
349            'r-code,123456\r\n'
350            )
351        return
352
353    def test_export_all(self):
354        # we can really export all payments
355        # set values we can expect in export file
356        self.setup_student(self.student)
357        self.get_payment() # adds new payment to student
358        exporter = PaymentsExporter()
359        exporter.export_all(self.app, self.outfile)
360        result = open(self.outfile, 'rb').read()
361        self.assertEqual(
362            result,
363            'ac,amount_auth,creation_date,matric_number,p_category,p_id,'
364            'p_item,p_level,p_session,p_state,payment_date,r_amount_approved,'
365            'r_code,reg_number\r\n'
366
367            '666,0.0,2012-04-01 13:12:01,M123456,schoolfee,my-id,'
368            'p-item,100,2012,unpaid,2012-04-01 14:12:01,12.12,'
369            'r-code,123456\r\n'
370            )
371        return
Note: See TracBrowser for help on using the repository browser.