source: main/waeup.futminna/trunk/src/waeup/futminna/interswitch/tests.py @ 9750

Last change on this file since 9750 was 9714, checked in by Henrik Bettermann, 12 years ago

Change acceptance fee calculation. This way penalty fees can be added or payment can be disabled via the UI.

  • Property svn:keywords set to Id
File size: 7.8 KB
Line 
1## $Id: tests.py 9714 2012-11-23 10:51:00Z 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 zope.component import getUtility
19from zope.catalog.interfaces import ICatalog
20from hurry.workflow.interfaces import IWorkflowState
21from waeup.kofa.students.tests.test_browser import StudentsFullSetup
22from waeup.kofa.applicants.tests.test_browser import ApplicantsFullSetup
23from waeup.kofa.configuration import SessionConfiguration
24from waeup.futminna.testing import FunctionalLayer
25
26# Also run tests that send requests to external servers?
27#   If you enable this, please make sure the external services
28#   do exist really and are not bothered by being spammed by a test programme.
29EXTERNAL_TESTS = False
30
31def external_test(func):
32    if not EXTERNAL_TESTS:
33        myself = __file__
34        if myself.endswith('.pyc'):
35            myself = myself[:-2]
36        print "WARNING: external tests are skipped!"
37        print "WARNING: edit %s to enable them." % myself
38        return
39    return func
40
41
42class InterswitchTestsStudents(StudentsFullSetup):
43    """Tests for the Interswitch payment gateway.
44    """
45
46    layer = FunctionalLayer
47
48    def setUp(self):
49        super(InterswitchTestsStudents, self).setUp()
50        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
51        self.browser.open(self.payments_path)
52        IWorkflowState(self.student).setState('cleared')
53        self.browser.open(self.payments_path + '/addop')
54        self.browser.getControl(name="form.p_category").value = ['schoolfee']
55        self.browser.getControl("Create ticket").click()
56        self.assertMatches('...Payment ticket created...',
57                           self.browser.contents)
58        ctrl = self.browser.getControl(name='val_id')
59        value = ctrl.options[0]
60        self.browser.getLink(value).click()
61        self.assertMatches('...Amount Authorized...',
62                           self.browser.contents)
63        self.assertMatches(
64            '...<span>131500.0</span>...',
65            self.browser.contents)
66        self.payment_url = self.browser.url
67
68    def test_interswitch_form(self):
69        # Manager can access InterswitchForm
70        self.browser.getLink("CollegePAY", index=0).click()
71        # The total amount to be processed by Interswitch
72        # has been reduced by the Interswitch fee of 150 Nairas
73        self.assertMatches('...Total Amount Authorized:...',
74                           self.browser.contents)
75        self.assertMatches(
76            '...<input type="hidden" name="amount" value="13150000.0" />...',
77            self.browser.contents)
78        self.assertMatches(
79            '...item_name="School Fee" item_amt="12970000" bank_id="31" acct_num="0021030851"...',
80            self.browser.contents)
81        self.assertMatches(
82            '...item_name="BT Education" item_amt="150000" bank_id="31" acct_num="0026781725"...',
83            self.browser.contents)
84
85        # Create clearance fee ticket
86        self.browser.open(self.payments_path + '/addop')
87        self.browser.getControl(name="form.p_category").value = ['clearance']
88        self.browser.getControl("Create ticket").click()
89        self.assertMatches('...ticket created...',
90                           self.browser.contents)
91        ctrl = self.browser.getControl(name='val_id')
92        value = ctrl.options[1]
93        self.browser.getLink(value).click()
94        self.assertMatches('...Amount Authorized...',
95                           self.browser.contents)
96        self.assertMatches(
97            '...<span>3456.0</span>...',
98            self.browser.contents)
99        # Manager can access InterswitchForm
100        self.browser.getLink("CollegePAY", index=0).click()
101        # The total amount to be processed by Interswitch
102        # has been reduced by the Interswitch fee of 150 Nairas
103        self.assertMatches('...Total Amount Authorized:...',
104                           self.browser.contents)
105        self.assertMatches(
106            '...<input type="hidden" name="amount" value="345600.0" />...',
107            self.browser.contents)
108        self.assertMatches(
109            '...item_name="Acceptance Fee" item_amt="315600" bank_id="120" acct_num="1750005063"...',
110            self.browser.contents)
111        # BT does nor charge a fee for clearance
112        self.assertFalse("BT Education" in self.browser.contents)
113
114        # Create hostel maintenance ticket
115        self.browser.open(self.payments_path + '/addop')
116        self.browser.getControl(name="form.p_category").value = ['hostel_maintenance']
117        self.browser.getControl("Create ticket").click()
118        self.assertMatches('...You have not yet booked accommodation...',
119                           self.browser.contents)
120        # Students have to book bed first
121        self.browser.open(self.acco_path)
122        IWorkflowState(self.student).setState('admitted')
123        self.browser.getLink("Book accommodation").click()
124        self.assertFalse('Activation Code:' in self.browser.contents)
125        self.browser.getControl("Create bed ticket").click()
126        # Bed is randomly selected but, since there is only
127        # one bed for this student, we know that ...
128        self.assertMatches('...Hall 1, Block A, Room 101, Bed A...',
129                           self.browser.contents)
130        self.browser.open(self.payments_path + '/addop')
131        self.browser.getControl(name="form.p_category").value = ['hostel_maintenance']
132        self.browser.getControl("Create ticket").click()
133        self.assertMatches('...ticket created...',
134                           self.browser.contents)
135        ctrl = self.browser.getControl(name='val_id')
136        value = ctrl.options[2]
137        self.browser.getLink(value).click()
138        self.assertMatches('...Amount Authorized...',
139                           self.browser.contents)
140        self.assertMatches(
141            '...<span>10000.0</span>...',
142            self.browser.contents)
143        # Manager can access InterswitchForm
144        self.browser.getLink("CollegePAY", index=0).click()
145        # The total amount to be processed by Interswitch
146        # has been reduced by the Interswitch fee of 150 Nairas
147        self.assertMatches('...Total Amount Authorized:...',
148                           self.browser.contents)
149        self.assertMatches(
150            '...<input type="hidden" name="amount" value="1000000.0" />...',
151            self.browser.contents)
152        self.assertMatches(
153            '...item_name="Hostel Maintenance Fee" item_amt="970000" bank_id="8" acct_num="2018856637"...',
154            self.browser.contents)
155        # BT does nor charge a fee for clearance
156        self.assertFalse("BT Education" in self.browser.contents)
157
158
159    @external_test
160    def test_webservice(self):
161        self.browser.open(self.payment_url + '/request_webservice')
162        self.assertMatches('...Unsuccessful callback...',
163                          self.browser.contents)
164        # The payment is now in state failed ...
165        self.assertMatches('...<span>Failed</span>...',
166                          self.browser.contents)
167        # ... and the catalog has been updated
168        cat = getUtility(ICatalog, name='payments_catalog')
169        results = list(
170            cat.searchResults(p_state=('failed', 'failed')))
171        self.assertEqual(len(results), 1)
172        self.assertEqual(results[0].p_state, 'failed')
Note: See TracBrowser for help on using the repository browser.