From 8d73b05f7be87e349e05061adea6ab105efe609a Mon Sep 17 00:00:00 2001 From: Ryan Pineo Date: Mon, 31 Aug 2015 16:34:10 -0400 Subject: [PATCH] add testdata file with sandbox receipt --- itunesiaptests/.gitignore | 1 - itunesiaptests/__init__.py | 0 itunesiaptests/test_regression.py | 136 ++++++++++++++---------------- itunesiaptests/testdata.py | 1 + 4 files changed, 63 insertions(+), 75 deletions(-) delete mode 100644 itunesiaptests/.gitignore create mode 100644 itunesiaptests/__init__.py create mode 100644 itunesiaptests/testdata.py diff --git a/itunesiaptests/.gitignore b/itunesiaptests/.gitignore deleted file mode 100644 index 47f63ce..0000000 --- a/itunesiaptests/.gitignore +++ /dev/null @@ -1 +0,0 @@ -testdata.py diff --git a/itunesiaptests/__init__.py b/itunesiaptests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/itunesiaptests/test_regression.py b/itunesiaptests/test_regression.py index 7d851b7..60a7012 100644 --- a/itunesiaptests/test_regression.py +++ b/itunesiaptests/test_regression.py @@ -3,8 +3,10 @@ .. [#document] https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html#//apple_ref/doc/uid/TP40008267-CH104-SW1 """ +from __future__ import absolute_import + import json -from mock import patch +from mock import patch, Mock import requests from six import u import unittest @@ -13,64 +15,66 @@ from itunesiap import Request, Receipt, set_verification_mode from itunesiap import exceptions +from .testdata import sandbox_receipt + class TestsIAP(unittest.TestCase): def __init__(self, *args, **kwargs): super(TestsIAP, self).__init__(*args, **kwargs) self.iap_response = { - u'status': 0, - u'receipt': { - u'purchase_date_pst': u'2013-01-01 00:00:00 America/Los_Angeles', - u'product_id': u'TestProduction1', - u'original_transaction_id': u'1000000012345678', - u'unique_identifier': u'bcbdb3d45543920dd9sd5c79a72948001fc22a39', - u'original_purchase_date_pst': u'2013-01-01 00:00:00 America/Los_Angeles', - u'original_purchase_date': u'2013-01-01 00:00:00 Etc/GMT', - u'bvrs': u'1.0', - u'original_purchase_date_ms': u'1348200000000', - u'purchase_date': u'2013-01-01 00:00:00 Etc/GMT', - u'item_id': u'500000000', - u'purchase_date_ms': u'134820000000', - u'bid': u'org.youknowone.itunesiap', - u'transaction_id': u'1000000012345678', - u'quantity': u'1' + 'status': 0, + 'receipt': { + 'purchase_date_pst': '2013-01-01 00:00:00 America/Los_Angeles', + 'product_id': 'TestProduction1', + 'original_transaction_id': '1000000012345678', + 'unique_identifier': 'bcbdb3d45543920dd9sd5c79a72948001fc22a39', + 'original_purchase_date_pst': '2013-01-01 00:00:00 America/Los_Angeles', + 'original_purchase_date': '2013-01-01 00:00:00 Etc/GMT', + 'bvrs': '1.0', + 'original_purchase_date_ms': '1348200000000', + 'purchase_date': '2013-01-01 00:00:00 Etc/GMT', + 'item_id': '500000000', + 'purchase_date_ms': '134820000000', + 'bid': 'org.youknowone.itunesiap', + 'transaction_id': '1000000012345678', + 'quantity': '1' } } # Response with multiple in_app's self.iap_response_in_app = { - u'status': 0, - u'receipt': { - u'original_purchase_date_pst': u'2013-01-01 00:00:00 America/Los_Angeles', - u'version_external_identifier': 0, - u'original_purchase_date': u'2013-01-01 07:00:00 Etc/GMT', - u'in_app': [ + 'status': 0, + 'receipt': { + 'original_purchase_date_pst': '2013-01-01 00:00:00 America/Los_Angeles', + 'version_external_identifier': 0, + 'original_purchase_date': '2013-01-01 07:00:00 Etc/GMT', + 'in_app': [ { - u'is_trial_period': u'false', - u'purchase_date_pst': u'2013-05-18 20:21:09 America/Los_Angeles', - u'product_id': u'org.itunesiap', - u'original_transaction_id': u'1000000155715958', - u'original_purchase_date_pst': u'2013-05-18 19:29:45 America/Los_Angeles', - u'original_purchase_date': u'2013-05-19 02:29:45 Etc/GMT', - u'original_purchase_date_ms': u'1432002585000', - u'purchase_date': u'2013-05-19 03:21:09 Etc/GMT', - u'purchase_date_ms': u'1432005669000', - u'transaction_id': u'1000000155715958', - u'quantity': u'1' + 'is_trial_period': 'false', + 'purchase_date_pst': '2013-05-18 20:21:09 America/Los_Angeles', + 'product_id': 'org.itunesiap', + 'original_transaction_id': '1000000155715958', + 'original_purchase_date_pst': '2013-05-18 19:29:45 America/Los_Angeles', + 'original_purchase_date': '2013-05-19 02:29:45 Etc/GMT', + 'original_purchase_date_ms': '1432002585000', + 'purchase_date': '2013-05-19 03:21:09 Etc/GMT', + 'purchase_date_ms': '1432005669000', + 'transaction_id': '1000000155715958', + 'quantity': '1' }, { - u'is_trial_period': u'false', - u'purchase_date_pst': u'2013-05-19 20:21:09 America/Los_Angeles', - u'product_id': u'org.itunesiap', - u'original_transaction_id': u'1000000155718067', - u'original_purchase_date_pst': u'2013-05-18 19:37:10 America/Los_Angeles', - u'original_purchase_date': u'2013-05-19 02:37:10 Etc/GMT', - u'original_purchase_date_ms': u'1432003030000', - u'purchase_date': u'2013-05-19 03:21:09 Etc/GMT', - u'purchase_date_ms': u'1432005669000', - u'transaction_id': u'1000000155718067', - u'quantity': u'1' + 'is_trial_period': 'false', + 'purchase_date_pst': '2013-05-19 20:21:09 America/Los_Angeles', + 'product_id': 'org.itunesiap', + 'original_transaction_id': '1000000155718067', + 'original_purchase_date_pst': '2013-05-18 19:37:10 America/Los_Angeles', + 'original_purchase_date': '2013-05-19 02:37:10 Etc/GMT', + 'original_purchase_date_ms': '1432003030000', + 'purchase_date': '2013-05-19 03:21:09 Etc/GMT', + 'purchase_date_ms': '1432005669000', + 'transaction_id': '1000000155718067', + 'quantity': '1' } ] } @@ -91,12 +95,6 @@ def test_global_mode(self): assert Request('').use_sandbox is True def test_request(self): - try: - from testdata import sandbox_receipt - except ImportError: - print('No receipt data to test') - return - set_verification_mode('production') request = Request(sandbox_receipt) try: @@ -115,7 +113,7 @@ def test_responses(self): with patch.object(requests, 'post') as mock_post: iap_status_21007 = self.iap_response.copy() iap_status_21007['status'] = 21007 - mock_post.return_value.content = json.dumps(iap_status_21007) + mock_post.return_value.json = Mock(return_value=iap_status_21007) mock_post.return_value.status_code = 200 set_verification_mode('production') request = Request('DummyReceipt') @@ -127,7 +125,7 @@ def test_responses(self): # We're going to return an invalid http status code with patch.object(requests, 'post') as mock_post: - mock_post.return_value.content = 'Not avaliable' + mock_post.return_value.content = 'Not available' mock_post.return_value.status_code = 500 set_verification_mode('production') request = Request('DummyReceipt') @@ -135,14 +133,9 @@ def test_responses(self): receipt = request.validate() except exceptions.ItunesServerNotAvailable as e: assert e[0] == 500 - assert e[1] == 'Not avaliable' + assert e[1] == 'Not available' def test_context(self): - try: - from testdata import sandbox_receipt - except ImportError: - print('No receipt data to test') - return request = Request(sandbox_receipt) configs = request.use_production, request.use_sandbox with request.verification_mode('production'): @@ -164,17 +157,12 @@ def test_receipt(self): receipt = Receipt(self.iap_response) assert receipt.status == 0 # 0 is normal - assert receipt.product_id == u'TestProduction1' # - assert receipt.original_transaction_id == u'1000000012345678' # original transaction id - assert receipt.quantity == u'1' # check quantity - assert receipt.unique_identifier == u'bcbdb3d45543920dd9sd5c79a72948001fc22a39' + assert receipt.product_id == 'TestProduction1' # + assert receipt.original_transaction_id == '1000000012345678' # original transaction id + assert receipt.quantity == '1' # check quantity + assert receipt.unique_identifier == 'bcbdb3d45543920dd9sd5c79a72948001fc22a39' def test_shortcut(self): - try: - from testdata import sandbox_receipt - except ImportError: - print('No receipt data to test') - return mode = itunesiap.get_verification_mode() itunesiap.set_verification_mode('sandbox') itunesiap.verify(sandbox_receipt) @@ -192,18 +180,18 @@ def test_extract_receipt(self): ext_receipt = request._extract_receipt(self.iap_response) assert ext_receipt['status'] == 0 # 0 is normal - assert ext_receipt['receipt']['product_id'] == u'TestProduction1' - assert ext_receipt['receipt']['original_transaction_id'] == u'1000000012345678' # original transaction id - assert ext_receipt['receipt']['quantity'] == u'1' # check quantity + assert ext_receipt['receipt']['product_id'] == 'TestProduction1' + assert ext_receipt['receipt']['original_transaction_id'] == '1000000012345678' # original transaction id + assert ext_receipt['receipt']['quantity'] == '1' # check quantity # Test IAP Response with in_app list request = Request('DummyReceipt', use_production=True) ext_receipt = request._extract_receipt(self.iap_response_in_app) assert ext_receipt['status'] == 0 # 0 is normal - assert ext_receipt['receipt']['product_id'] == u'org.itunesiap' - assert ext_receipt['receipt']['original_transaction_id'] == u'1000000155715958' # original transaction id - assert ext_receipt['receipt']['quantity'] == u'1' # check quantity + assert ext_receipt['receipt']['product_id'] == 'org.itunesiap' + assert ext_receipt['receipt']['original_transaction_id'] == '1000000155718067' # original transaction id + assert ext_receipt['receipt']['quantity'] == '1' # check quantity if __name__ == '__main__': unittest.main() diff --git a/itunesiaptests/testdata.py b/itunesiaptests/testdata.py new file mode 100644 index 0000000..9c7cb14 --- /dev/null +++ b/itunesiaptests/testdata.py @@ -0,0 +1 @@ +sandbox_receipt = "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"