Skip to content

Commit

Permalink
add testdata file with sandbox receipt
Browse files Browse the repository at this point in the history
  • Loading branch information
Ryan Pineo committed Aug 31, 2015
1 parent 93696a2 commit 8d73b05
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 75 deletions.
1 change: 0 additions & 1 deletion itunesiaptests/.gitignore

This file was deleted.

Empty file added itunesiaptests/__init__.py
Empty file.
136 changes: 62 additions & 74 deletions itunesiaptests/test_regression.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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'
}
]
}
Expand All @@ -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:
Expand All @@ -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')
Expand All @@ -127,22 +125,17 @@ 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')
try:
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'):
Expand All @@ -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)
Expand All @@ -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()
Loading

0 comments on commit 8d73b05

Please sign in to comment.