1 | import unittest |
---|
2 | from zope.component import queryUtility |
---|
3 | from zope.component.hooks import setSite |
---|
4 | from zope.interface.verify import verifyClass, verifyObject |
---|
5 | from waeup.ikoba.testing import ( |
---|
6 | FunctionalLayer, FunctionalTestCase, |
---|
7 | ) |
---|
8 | from waeup.ikoba.payments.interfaces import ( |
---|
9 | IPaymentGatewayService, IPayment, STATE_UNPAID, |
---|
10 | ) |
---|
11 | from waeup.ikoba.app import Company |
---|
12 | from waeup.ikoba.payments.payment import Payer, Payee, Payment |
---|
13 | from waeup.ikoba.payments.demo_provider import ( |
---|
14 | DemoCreditcardPaymentService, RE_CC_NUMBER, RE_CSC, |
---|
15 | ) |
---|
16 | from waeup.ikoba.payments.tests.test_payment import FakePayer, FakePayable |
---|
17 | |
---|
18 | |
---|
19 | class TestDemoProviderHelpers(unittest.TestCase): |
---|
20 | |
---|
21 | def test_re_cc_number(self): |
---|
22 | # we recognize valid numbers |
---|
23 | assert RE_CC_NUMBER.match('a') is None |
---|
24 | assert RE_CC_NUMBER.match('12345678') is None |
---|
25 | assert RE_CC_NUMBER.match('1234a5678') is None |
---|
26 | assert RE_CC_NUMBER.match('132456789') is not None |
---|
27 | assert RE_CC_NUMBER.match('123456789012345') is not None |
---|
28 | |
---|
29 | def test_re_csc(self): |
---|
30 | # we recognize security numbers |
---|
31 | assert RE_CSC.match('12') is None |
---|
32 | assert RE_CSC.match('123') is not None |
---|
33 | assert RE_CSC.match('1234') is not None |
---|
34 | assert RE_CSC.match('12345') is None |
---|
35 | assert RE_CSC.match('12A2') is None |
---|
36 | |
---|
37 | |
---|
38 | class DemoCreditcardPaymentServiceTests(FunctionalTestCase): |
---|
39 | |
---|
40 | layer = FunctionalLayer |
---|
41 | |
---|
42 | def setUp(self): |
---|
43 | super(DemoCreditcardPaymentServiceTests, self).setUp() |
---|
44 | self.app = Company() |
---|
45 | self.getRootFolder()['app'] = self.app |
---|
46 | setSite(self.app) |
---|
47 | |
---|
48 | def test_iface(self): |
---|
49 | # we fullfill all interface contracts |
---|
50 | service = DemoCreditcardPaymentService() |
---|
51 | verifyClass(IPaymentGatewayService, DemoCreditcardPaymentService) |
---|
52 | verifyObject(IPaymentGatewayService, service) |
---|
53 | |
---|
54 | def test_create_payment(self): |
---|
55 | # we can get payments from payment gateways |
---|
56 | service = DemoCreditcardPaymentService() |
---|
57 | payer, payable, payee = Payer(), FakePayable(), Payee() |
---|
58 | payer.payer_id = u'SOME_PAYER_ID' |
---|
59 | result = service.create_payment(payer, payable, payee) |
---|
60 | assert IPayment.providedBy(result) |
---|
61 | assert result.gateway_service == u'demo_creditcard' |
---|
62 | assert result.state == STATE_UNPAID |
---|
63 | |
---|
64 | def test_create_payment_honors_payer(self): |
---|
65 | # we inspect payers when creating their payments |
---|
66 | service = DemoCreditcardPaymentService() |
---|
67 | payer, payable, payee = Payer(), FakePayable(), Payee() |
---|
68 | payer.payer_id = u'SOME_PAYER_ID' |
---|
69 | result = service.create_payment(payer, payable, payee) |
---|
70 | assert result.payer_id == payer.payer_id |
---|
71 | |
---|
72 | def test_get_service_by_utility_name(self): |
---|
73 | # we can get the demo credit card service by its utility name |
---|
74 | service = queryUtility( |
---|
75 | IPaymentGatewayService, name="demo_creditcard") |
---|
76 | assert service is not None |
---|
77 | |
---|
78 | def test_next_step_invalid_id(self): |
---|
79 | # we cannot go to non-existent payments |
---|
80 | service = DemoCreditcardPaymentService() |
---|
81 | result = service.next_step('not-existent-payment-id') |
---|
82 | assert result == (None, None) |
---|
83 | |
---|
84 | def test_next_step(self): |
---|
85 | # we are redirected to 'index' in the beginning |
---|
86 | service = DemoCreditcardPaymentService() |
---|
87 | p1 = Payment(FakePayer(), FakePayable()) |
---|
88 | self.app['payments']['1'] = p1 |
---|
89 | p_id = p1.payment_id |
---|
90 | result = service.next_step(p_id) |
---|
91 | assert result == (p1, 'demo_cc1') |
---|