source: main/waeup.aaue/trunk/src/waeup/aaue/etranzact/tests.py @ 13969

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

Resolve ticket #228:

  1. The first column should be the Serial number.
  2. Under the column for Full name, surname should come first in capital letter with a coma before the other names.
  3. The heading for ‘score’ column should be renamed ‘exam score’.
  4. CA column should come before exam score column
  5. The column for Total should be added after exam score column.
  6. Extra column for letter grade should come after the ‘total’ column.
  • Property svn:keywords set to Id
File size: 13.2 KB
Line 
1## $Id: tests.py 13963 2016-06-21 06:30:07Z henrik $
2##
3## Copyright (C) 2011 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##
18from hurry.workflow.interfaces import IWorkflowState
19from waeup.kofa.students.tests.test_browser import StudentsFullSetup
20from waeup.kofa.applicants.tests.test_browser import (
21    ApplicantsFullSetup, session_1)
22from waeup.kofa.configuration import SessionConfiguration
23from waeup.aaue.testing import FunctionalLayer
24from waeup.aaue.etranzact.browser import ERROR_PART1, ERROR_PART2
25
26
27# Also run tests that send requests to external servers?
28#   If you enable this, please make sure the external services
29#   do exist really and are not bothered by being spammed by a test programme.
30EXTERNAL_TESTS = False
31
32def external_test(func):
33    if not EXTERNAL_TESTS:
34        myself = __file__
35        if myself.endswith('.pyc'):
36            myself = myself[:-2]
37        print "WARNING: external tests are skipped!"
38        print "WARNING: edit %s to enable them." % myself
39        return
40    return func
41
42class EtranzactTestsStudent(StudentsFullSetup):
43    """Tests for the eTranzact payment gateway.
44    """
45
46    layer = FunctionalLayer
47
48    CONFIRMATION_NO = '500856521315472785095'
49
50    def setUp(self):
51        super(EtranzactTestsStudent, self).setUp()
52        # Managers can add online payment tickets
53        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
54        self.student['studycourse'].certificate.school_fee_1 = 1234.0
55        self.browser.open(self.payments_path)
56        IWorkflowState(self.student).setState('cleared')
57        self.student.nationality = u'NG'
58        self.browser.open(self.payments_path + '/addop')
59        self.browser.getControl(name="form.p_category").value = ['clearance_incl']
60        self.browser.getControl("Create ticket").click()
61        self.assertMatches('...ticket created...',
62                           self.browser.contents)
63        ctrl = self.browser.getControl(name='val_id')
64        value1 = ctrl.options[0]
65
66        self.browser.open(self.payments_path + '/addop')
67        self.browser.getControl(name="form.p_category").value = ['schoolfee_incl']
68        self.browser.getControl("Create ticket").click()
69        self.assertMatches('...ticket created...',
70                           self.browser.contents)
71        ctrl = self.browser.getControl(name='val_id')
72        value2 = ctrl.options[1]
73        self.p_id = value2
74        self.payment = self.student['payments'][value2]
75        self.browser.getLink(value2).click()
76        self.assertMatches('...Amount Authorized...',
77                           self.browser.contents)
78        self.payment_url = self.browser.url
79
80    def test_enterpin(self):
81        self.student['studycourse'].entry_session = 2013
82        self.browser.open(self.payment_url)
83        self.browser.getLink("Query eTranzact History").click()
84        self.assertTrue(
85            'Please pay acceptance fee firs' in self.browser.contents)
86        self.assertFalse(
87            'Confirmation Number (PIN)' in self.browser.contents)
88        self.student['payments'].values()[0].approve()
89        self.browser.getLink("Query eTranzact History").click()
90        self.assertFalse(
91            'Please pay acceptance fee firs' in self.browser.contents)
92        self.assertTrue(
93            'Confirmation Number (PIN)' in self.browser.contents)
94
95    def test_webservice(self):
96        self.browser.open(
97            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=SCHOOL-FEE-PLUS-NEW'
98            % self.p_id)
99        self.assertEqual(self.browser.contents,
100            'PayeeName=TESTER, Anna~'
101            'Faculty=fac1~'
102            'Department=dep1~'
103            'Level=100~'
104            'ProgrammeType=CERT1~'
105            'StudyType=ug_ft~'
106            'Session=2004/2005~'
107            'PayeeID=%s~'
108            'Amount=1234.0~'
109            'FeeStatus=unpaid~'
110            'Semester=N/A~'
111            'PaymentType=School Fee Plus~'
112            'MatricNumber=E1000000~'
113            'Email=aa@aa.ng~'
114            'PhoneNumber=1234' % self.p_id)
115
116        self.browser.open('http://localhost/app/feerequest')
117        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Missing PAYEE_ID' + ERROR_PART2)
118
119        self.browser.open('http://localhost/app/feerequest?NONSENSE=nonsense')
120        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Missing PAYEE_ID' + ERROR_PART2)
121
122        self.browser.open(
123            'http://localhost/app/feerequest?PAYEE_ID=nonsense&PAYMENT_TYPE=SCHOOL-FEE-NEW')
124        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Invalid PAYEE_ID' + ERROR_PART2)
125
126        self.browser.open(
127            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=NONSENSE'
128            % self.p_id)
129        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Invalid PAYMENT_TYPE' + ERROR_PART2)
130
131        self.browser.open(
132            'http://localhost/app/feerequest?PAYEE_ID=%s'
133            % self.p_id)
134        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Invalid PAYMENT_TYPE' + ERROR_PART2)
135
136        self.browser.open(
137            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=ACCEPTANCE-FEE'
138            % self.p_id)
139        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Wrong PAYMENT_TYPE' + ERROR_PART2)
140
141        self.browser.open(
142            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=APPLICATION-FEE'
143            % self.p_id)
144        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Wrong PAYMENT_TYPE' + ERROR_PART2)
145
146        # Change payment state
147        self.student['payments'][self.p_id].p_state = 'paid'
148
149        self.browser.open(
150            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=SCHOOL-FEE-NEW'
151            % self.p_id)
152        self.assertEqual(self.browser.contents, ERROR_PART1 + 'PAYEE_ID already used' + ERROR_PART2)
153
154        # Change workflow state and payment state
155        IWorkflowState(self.student).setState('returning')
156        self.student['payments'][self.p_id].p_state = 'unpaid'
157
158        self.browser.open(
159            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=SCHOOL-FEE-NEW'
160            % self.p_id)
161        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Wrong PAYMENT_TYPE' + ERROR_PART2)
162
163        self.browser.open(
164            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=SCHOOL-FEE-BALANCE'
165            % self.p_id)
166        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Not a balance payment' + ERROR_PART2)
167
168        # Change payment item
169        self.payment.p_item = u'Balance'
170
171        self.browser.open(
172            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=SCHOOL-FEE-PLUS-RETURNING'
173            % self.p_id)
174        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Balance payment' + ERROR_PART2)
175
176        # Change study mode
177        self.certificate.study_mode = 'special_pg_ft'
178
179        self.browser.open(
180            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=SCHOOL-FEE-BALANCE'
181            % self.p_id)
182        self.assertEqual(self.browser.contents,
183            'PayeeName=TESTER, Anna~'
184            'Faculty=fac1~'
185            'Department=dep1~'
186            'Level=100~'
187            'ProgrammeType=Balance~'
188            'StudyType=special_pg_ft~'
189            'Session=2004/2005~'
190            'PayeeID=%s~'
191            'Amount=1234.0~'
192            'FeeStatus=unpaid~'
193            'Semester=N/A~'
194            'PaymentType=School Fee Plus~'
195            'MatricNumber=E1000000~'
196            'Email=aa@aa.ng~'
197            'PhoneNumber=1234' % self.p_id)
198
199        # Change payment item
200        self.payment.p_item = u'CERT1'
201
202        self.browser.open(
203            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=SCHOOL-FEE-PLUS-RETURNING'
204            % self.p_id)
205        self.assertEqual(self.browser.contents, ERROR_PART1 + 'Postgrad student' + ERROR_PART2)
206
207        # Cange payment category and study mode
208        self.payment.p_category = 'schoolfee'
209        self.certificate.study_mode = 'ug_ft'
210       
211        self.browser.open(
212            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=SCHOOL-FEE-RETURNING'
213            % self.p_id)
214        self.assertEqual(self.browser.contents,
215            'PayeeName=TESTER, Anna~'
216            'Faculty=fac1~'
217            'Department=dep1~'
218            'Level=100~'
219            'ProgrammeType=CERT1~'
220            'StudyType=ug_ft~'
221            'Session=2004/2005~'
222            'PayeeID=%s~'
223            'Amount=1234.0~'
224            'FeeStatus=unpaid~'
225            'Semester=N/A~'
226            'PaymentType=School Fee~'
227            'MatricNumber=E1000000~'
228            'Email=aa@aa.ng~'
229            'PhoneNumber=1234' % self.p_id)
230
231    @external_test
232    def test_etranzact_query_history(self):
233
234        self.browser.open(self.payment_url + '/query_history?confirmation_number=%s'
235            % self.CONFIRMATION_NO)
236        self.assertMatches('...Invalid or unsuccessful callback:...',
237                          self.browser.contents)
238        #self.assertMatches('...Wrong amount...',
239        #                  self.browser.contents)
240        #self.student['payments'][value].amount_auth = self.student[
241        #    'payments'][value].r_amount_approved
242        #self.browser.open(self.payment_url + '/query_history?confirmation_number=%s'
243        #    % self.CONFIRMATION_NO)
244        #self.assertMatches('...Wrong transaction id...',
245        #                  self.browser.contents)
246
247class EtranzactTestsApplicants(ApplicantsFullSetup):
248    """Tests for the Interswitch payment gateway.
249    """
250
251    layer = FunctionalLayer
252
253    CONFIRMATION_NO = '500856521315472785095'
254
255    def setUp(self):
256        super(EtranzactTestsApplicants, self).setUp()
257        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
258        self.browser.open(self.manage_path)
259        #IWorkflowState(self.student).setState('started')
260        super(EtranzactTestsApplicants, self).fill_correct_values()
261        self.browser.getControl(name="transition").value = ['start']
262        self.browser.getControl(name="form.nationality").value = ['NG']
263        self.browser.getControl(name="form.programme_type").value = ['direct']
264        self.browser.getControl("Save").click()
265        self.browser.getControl("Add online").click()
266        self.assertTrue(
267            'Session configuration object is not available'
268            in self.browser.contents)
269        configuration = SessionConfiguration()
270        configuration.academic_session = session_1
271        self.applicantscontainer.application_fee = 1000.0
272        self.app['configuration'].addSessionConfiguration(configuration)
273        self.browser.open(self.manage_path)
274        self.browser.getControl("Add online").click()
275        self.assertMatches('...ticket created...',
276                           self.browser.contents)
277        self.assertMatches('...Amount Authorized...',
278                           self.browser.contents)
279        self.assertMatches(
280            '...<span>1000.0</span>...',
281            self.browser.contents)
282        self.payment_url = self.browser.url
283        self.browser.open(self.manage_path)
284        ctrl = self.browser.getControl(name='val_id')
285        value = ctrl.options[0]
286        self.p_id = value
287
288    def test_webservice(self):
289        self.browser.open(
290            'http://localhost/app/feerequest?PAYEE_ID=%s&PAYMENT_TYPE=APPLICATION-FEE'
291            % self.p_id)
292        self.assertEqual(self.browser.contents,
293            'PayeeName=TESTER, John Anthony~'
294            'Faculty=N/A~'
295            'Department=N/A~'
296            'Level=N/A~'
297            'ProgrammeType=This is the app%s container~'
298            'StudyType=N/A~'
299            'Session=%s/%s~'
300            'PayeeID=%s~'
301            'Amount=1000.0~'
302            'FeeStatus=unpaid~'
303            'Semester=N/A~'
304            'PaymentType=Application Fee~'
305            'MatricNumber=%s~'
306            'Email=xx@yy.zz~'
307            'PhoneNumber=None' % (
308                session_1, session_1, session_1+1,
309                self.p_id,self.applicant.applicant_id))
310
311    @external_test
312    def test_etranzact_query_history(self):
313
314        self.browser.open(self.payment_url + '/query_history?confirmation_number=%s'
315            % self.CONFIRMATION_NO)
316        self.assertMatches('...Invalid or unsuccessful callback:...',
317                          self.browser.contents)
318        #self.assertMatches('...Wrong amount...',
319        #                  self.browser.contents)
320        #self.applicant[value].amount_auth = self.applicant[
321        #    value].r_amount_approved
322        #self.browser.open(self.payment_url + '/query_history?confirmation_number=%s'
323        #    % self.CONFIRMATION_NO)
324        #self.assertMatches('...Wrong transaction id...',
325        #                  self.browser.contents)
Note: See TracBrowser for help on using the repository browser.