Merge lp:~matiasb/payclient/update-credit-card-3d into lp:payclient

Proposed by Matias Bordese
Status: Merged
Approved by: Matias Bordese
Approved revision: 15
Merged at revision: 11
Proposed branch: lp:~matiasb/payclient/update-credit-card-3d
Merge into: lp:payclient
Diff against target: 107 lines (+36/-7)
2 files modified
src/payclient/client.py (+5/-2)
src/payclient/tests/test_client.py (+31/-5)
To merge this branch: bzr merge lp:~matiasb/payclient/update-credit-card-3d
Reviewer Review Type Date Requested Status
Natalia Bidart (community) Approve
Review via email: mp+231763@code.launchpad.net

Commit message

Updated new credit card API request/response.

To post a comment you must log in.
Revision history for this message
Natalia Bidart (nataliabidart) wrote :

Looks good, added a question inline.

review: Approve
Revision history for this message
Matias Bordese (matiasb) wrote :

Replied question.

14. By Matias Bordese

Updated responses.

15. By Matias Bordese

Update from review.

Revision history for this message
Natalia Bidart (nataliabidart) wrote :

Looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/payclient/client.py'
2--- src/payclient/client.py 2014-08-08 21:04:36 +0000
3+++ src/payclient/client.py 2014-08-25 18:45:35 +0000
4@@ -39,9 +39,11 @@
5 'card_ccv',
6 'card_expiration_month',
7 'card_expiration_year',
8+ 'info3d',
9 'make_unattended_default',
10 'billing_address',
11 )
12+ info3d = None
13 make_unattended_default = False
14
15 @classmethod
16@@ -134,8 +136,9 @@
17 @classmethod
18 def from_dict(cls, data):
19 obj = super(CreditCardResponse, cls).from_dict(data)
20- # cast date/datetime fields
21- if obj.expiration:
22+ status = data.get('status')
23+ if status == 'COMPLETED' and obj.expiration:
24+ # cast expiration date as date object
25 obj.expiration = parser.parse(obj.expiration)
26 return obj
27
28
29=== modified file 'src/payclient/tests/test_client.py'
30--- src/payclient/tests/test_client.py 2014-08-08 21:04:36 +0000
31+++ src/payclient/tests/test_client.py 2014-08-25 18:45:35 +0000
32@@ -49,6 +49,7 @@
33 'card_ccv',
34 'card_expiration_month',
35 'card_expiration_year',
36+ 'info3d',
37 'make_unattended_default',
38 'billing_address',
39 ))
40@@ -185,18 +186,31 @@
41
42 class CreditCardResponseTestCase(TestCase):
43 def setUp(self):
44- self.data = {
45+ self.data_ok = {
46+ 'status': 'COMPLETED',
47 'masked_number': '1111',
48 'expiration': '2012-1-1',
49 'card_type': 'Visa',
50 }
51+ self.data_3dsecure = {
52+ 'status': '3DSECURE',
53+ 'payment_id': '123',
54+ 'info3d': {'foo': 'bar'},
55+ }
56
57- def test_from_dict(self):
58- response = CreditCardResponse.from_dict(self.data)
59- self.assertEqual(response.masked_number, self.data['masked_number'])
60+ def test_from_dict_ok(self):
61+ response = CreditCardResponse.from_dict(self.data_ok)
62+ self.assertEqual(response.masked_number, self.data_ok['masked_number'])
63 expiration_date = datetime(2012, 1, 1, 0, 0)
64 self.assertEqual(response.expiration, expiration_date)
65- self.assertEqual(response.card_type, self.data['card_type'])
66+ self.assertEqual(response.card_type, self.data_ok['card_type'])
67+ self.assertEqual(response.status, self.data_ok['status'])
68+
69+ def test_from_dict_3dsecure(self):
70+ response = CreditCardResponse.from_dict(self.data_3dsecure)
71+ self.assertEqual(response.status, self.data_3dsecure['status'])
72+ self.assertEqual(response.payment_id, self.data_3dsecure['payment_id'])
73+ self.assertEqual(response.info3d, self.data_3dsecure['info3d'])
74
75
76 class PaymentResponseTestCase(TestCase):
77@@ -404,11 +418,18 @@
78 self.auth_api._put = Mock()
79
80 self.mock_card_response_body = json.dumps({
81+ 'status': 'COMPLETED',
82 'masked_number': '1111',
83 'expiration': '2012-01-01',
84 'card_type': 'Visa',
85 })
86
87+ self.mock_card_3d_response_body = json.dumps({
88+ 'status': '3DSECURE',
89+ 'payment_id': '12345',
90+ 'info3d': {'url': 'https://3dsecure.url'},
91+ })
92+
93 self.mock_payment_response_body = json.dumps({
94 'total': '1.00',
95 'total_vat': None,
96@@ -579,6 +600,11 @@
97 self.assert_return_value(CreditCardResponse, 'new_credit_card',
98 data=CreditCardRequest())
99
100+ def test_new_card_3dsecure_return_value(self):
101+ self.auth_api._post.return_value = self.mock_card_3d_response_body
102+ self.assert_return_value(CreditCardResponse, 'new_credit_card',
103+ data=CreditCardRequest())
104+
105 def test_get_payment_protected(self):
106 self.assert_protected('get_payment', payment_id='foo',
107 api_method='_get')

Subscribers

People subscribed via source and target branches