source: main/kofacustom.wdu/trunk/src/kofacustom/wdu/applicants/tests/test_browser.py @ 13630

Last change on this file since 13630 was 13593, checked in by Henrik Bettermann, 9 years ago

Adjust tests.

  • Property svn:keywords set to Id
File size: 9.8 KB
Line 
1## $Id: test_browser.py 13593 2016-01-11 09:34:58Z henrik $
2##
3## Copyright (C) 2013 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"""
19Test the applicant-related UI components.
20"""
21import os
22import datetime
23from zope.component import createObject, getUtility
24from zope.catalog.interfaces import ICatalog
25from zope.intid.interfaces import IIntIds
26from hurry.workflow.interfaces import IWorkflowState
27from kofacustom.wdu.testing import FunctionalLayer
28from waeup.kofa.browser.tests.test_pdf import samples_dir
29from waeup.kofa.applicants.tests.test_browser import ApplicantsFullSetup
30from waeup.kofa.applicants.tests.test_batching import ApplicantImportExportSetup
31from kofacustom.wdu.applicants.export import CustomApplicantExporter
32from kofacustom.wdu.applicants.batching import CustomApplicantProcessor
33
34class CustomApplicantUITests(ApplicantsFullSetup):
35    # Tests for uploading/browsing the passport image of appplicants
36
37    layer = FunctionalLayer
38
39class ApplicantExporterTest(ApplicantImportExportSetup):
40
41    layer = FunctionalLayer
42
43    def setUp(self):
44        super(ApplicantExporterTest, self).setUp()
45        self.outfile = os.path.join(self.workdir, 'myoutput.csv')
46        self.cat = getUtility(ICatalog, name='applicants_catalog')
47        self.intids = getUtility(IIntIds)
48        return
49
50    def setup_applicant(self, applicant):
51        # set predictable values for `applicant`
52        applicant.reg_number = u'123456'
53        applicant.applicant_id = u'dp2011_654321'
54        applicant.firstname = u'Anna'
55        applicant.lastname = u'Tester'
56        applicant.middlename = u'M.'
57        applicant.nationality = u'NG'
58        applicant.date_of_birth = datetime.date(1981, 2, 4)
59        applicant.sex = 'f'
60        applicant.email = 'anna@sample.com'
61        applicant.phone = u'+234-123-12345'
62        applicant.course1 = self.certificate
63        applicant.course2 = self.certificate
64        applicant.course_admitted = self.certificate
65        applicant.notice = u'Some notice\nin lines.'
66        applicant.screening_score = 98
67        applicant.screening_venue = u'Exam Room'
68        applicant.screening_date = u'Saturday, 16th June 2012 2:00:00 PM'
69        applicant.password = 'any password'
70        return applicant
71
72    def test_export_reimport_all(self):
73        # we can export all applicants in a portal
74        # set values we can expect in export file
75        self.applicant = self.setup_applicant(self.applicant)
76        exporter = CustomApplicantExporter()
77        exporter.export_all(self.app, self.outfile)
78        result = open(self.outfile, 'rb').read()
79        self.assertMatches(result,
80            'aggregate,applicant_id,application_date,application_number,'
81            'body_responsible_address,container_code,course1,course2,'
82            'course_admitted,date_of_birth,display_fullname,email,emp2_end,'
83            'emp2_position,emp2_reason,emp2_start,emp_end,emp_position,'
84            'emp_reason,emp_start,employer,employer2,firstname,fst_sit_date,'
85            'fst_sit_fname,fst_sit_no,fst_sit_results,fst_sit_type,history,'
86            'hq_degree,hq_disc,hq_fname,hq_matric_no,hq_school,hq_session,'
87            'hq_type,jamb_reg_number,jamb_score,jamb_subjects,lastname,'
88            'lga,locked,marit_stat,middlename,nationality,next_kin_address,'
89            'notice,nysc_lga,nysc_year,olevel_exam_date,olevel_exam_date2,'
90            'olevel_exam_number,olevel_exam_number2,olevel_results,'
91            'olevel_results2,olevel_school,olevel_school2,olevel_type,'
92            'olevel_type2,password,phone,presently_inst,reg_number,religion,'
93            'result_uploaded,scd_sit_date,scd_sit_fname,scd_sit_no,'
94            'scd_sit_results,scd_sit_type,screening_date,screening_score,'
95            'screening_venue,sex,special,special_application,state,'
96            'student_id,suspended,translated_state\r\n,'
97            'dp2011_654321,,654321,,dp2011,CERT1,CERT1,CERT1,'
98            '1981-02-04#,Anna M. Tester,anna@sample.com,,,,,,,,,,,Anna,,,,,,'
99            '[u\'2016-01-11 10:28:58 WAT - Application initialized by system\']'
100            ',,,,,,,,,,,Tester,,0,,M.,NG,,"Some notice\nin lines.",,,,,,,,,,,,,'
101            'any password,+234-123-12345#,,123456,,,,,,,,'
102            '"Saturday, 16th June 2012 2:00:00 PM",98,Exam Room,'
103            'f,,,initialized,,0,initialized\r\n')
104        # We can import the same file if we ignore some columns.
105        # Since the applicants_catalog hasn't been notified, the same
106        # record with same reg_number can be imported twice.
107        processor = CustomApplicantProcessor()
108        result = processor.doImport(
109            self.outfile,
110            ['aggregate','ignore_applicant_id','application_date','ignore_application_number',
111            'body_responsible_address','container_code','course1','course2',
112            'course_admitted','date_of_birth','ignore_display_fullname','email',
113            'emp2_end','emp2_position','emp2_reason','emp2_start','emp_end',
114            'emp_position','emp_reason','emp_start','employer','employer2',
115            'firstname','fst_sit_date','fst_sit_fname','fst_sit_no',
116            'fst_sit_results','fst_sit_type','ignore_history','hq_degree','hq_disc',
117            'hq_fname','hq_matric_no','hq_school','hq_session','hq_type',
118            'jamb_reg_number','jamb_score','jamb_subjects','lastname','lga',
119            'locked','marit_stat','middlename','nationality','next_kin_address',
120            'notice','nysc_lga','nysc_year','olevel_exam_date',
121            'olevel_exam_date2','olevel_exam_number','olevel_exam_number2',
122            'olevel_results','olevel_results2','olevel_school','olevel_school2',
123            'olevel_type','olevel_type2','password','phone','presently_inst',
124            'reg_number','religion','result_uploaded','scd_sit_date',
125            'scd_sit_fname','scd_sit_no','scd_sit_results','scd_sit_type',
126            'screening_date','screening_score','screening_venue','sex',
127            'ignore_special','special_application','state','student_id',
128            'suspended','ignore_translated_state'],
129            mode='create')
130        num_succ, num_fail, finished_path, failed_path = result
131        self.assertEqual(num_succ,1)
132        self.assertEqual(num_fail,0)
133        # Now we ignore also the container_code and import the same file
134        # in update mode which means that INigeriaApplicantUpdateByRegNo
135        # is used for field conversion. applicant_id must be ignored
136        # too since the previous import has notified the applicants_catalog
137        # so that the portal 'knows' that reg_number is in use.
138        processor = CustomApplicantProcessor()
139        result = processor.doImport(
140            self.outfile,
141            ['aggregate','ignore_applicant_id','application_date','ignore_application_number',
142            'body_responsible_address','ignore_container_code','course1','course2',
143            'course_admitted','date_of_birth','ignore_display_fullname','email',
144            'emp2_end','emp2_position','emp2_reason','emp2_start','emp_end',
145            'emp_position','emp_reason','emp_start','employer','employer2',
146            'firstname','fst_sit_date','fst_sit_fname','fst_sit_no',
147            'fst_sit_results','fst_sit_type','ignore_history','hq_degree','hq_disc',
148            'hq_fname','hq_matric_no','hq_school','hq_session','hq_type',
149            'jamb_reg_number','jamb_score','jamb_subjects','lastname','lga',
150            'locked','marit_stat','middlename','nationality','next_kin_address',
151            'notice','nysc_lga','nysc_year','olevel_exam_date',
152            'olevel_exam_date2','olevel_exam_number','olevel_exam_number2',
153            'olevel_results','olevel_results2','olevel_school','olevel_school2',
154            'olevel_type','olevel_type2','password','phone','presently_inst',
155            'reg_number','religion','result_uploaded','scd_sit_date',
156            'scd_sit_fname','scd_sit_no','scd_sit_results','scd_sit_type',
157            'screening_date','screening_score','screening_venue','sex',
158            'ignore_special','special_application','state','student_id',
159            'suspended','ignore_translated_state'],
160            mode='update')
161        num_succ, num_fail, finished_path, failed_path = result
162        self.assertEqual(num_succ,1)
163        self.assertEqual(num_fail,0)
164        return
165
166
167class ApplicantsContainerUITests(ApplicantsFullSetup):
168    # Tests for ApplicantsContainer class views and pages
169
170    layer = FunctionalLayer
171
172    def test_application_slip(self):
173        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
174        self.slip_path = self.view_path + '/application_slip.pdf'
175        self.browser.open(self.manage_path)
176        self.assertEqual(self.browser.headers['Status'], '200 Ok')
177        self.fill_correct_values()
178        self.browser.getControl("Save").click()
179        IWorkflowState(self.applicant).setState('submitted')
180        self.browser.open(self.manage_path)
181        self.browser.getLink("Download application slip").click()
182        self.assertEqual(self.browser.headers['Status'], '200 Ok')
183        self.assertEqual(self.browser.headers['Content-Type'],
184                         'application/pdf')
185        path = os.path.join(samples_dir(), 'application_slip.pdf')
186        open(path, 'wb').write(self.browser.contents)
187        print "Sample application_slip.pdf written to %s" % path
Note: See TracBrowser for help on using the repository browser.