class CustomerAPITests(TestCase): def setUp(self): self.patcher = mock.patch('authorize.apis.customer.Client') self.Client = self.patcher.start() self.api = CustomerAPI('123', '456') # Make the factory creator return mocks that know what kind they are def create(kind): created = mock.Mock() created._kind = kind return created self.api.client.factory.create.side_effect = create def tearDown(self): self.patcher.stop() def test_basic_api(self): api = CustomerAPI('123', '456') self.assertEqual(api.url, TEST_URL) api = CustomerAPI('123', '456', debug=False) self.assertEqual(api.url, PROD_URL) def test_client_and_auth(self): self.Client.reset_mock() api = CustomerAPI('123', '456') self.assertEqual(self.Client.call_args, None) client_ = api.client self.assertEqual(self.Client.call_args[0][0], TEST_URL) client_auth = api.client_auth self.assertEqual(client_auth.name, '123') self.assertEqual(client_auth.transactionKey, '456') def test_make_call(self): self.api.client.service.TestService.return_value = SUCCESS result = self.api._make_call('TestService', 'foo') self.assertEqual(result, SUCCESS) self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_make_call_connection_error(self): self.api.client.service.TestService.side_effect = WebFault('a', 'b') self.assertRaises(AuthorizeConnectionError, self.api._make_call, 'TestService', 'foo') self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_make_call_response_error(self): self.api.client.service.TestService.return_value = ERROR try: self.api._make_call('TestService', 'foo') except AuthorizeResponseError as e: self.assertEqual(str(e), 'E00016: The field type is invalid.') self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_create_saved_profile(self): service = self.api.client.service.CreateCustomerProfile service.return_value = SUCCESS # Without payments profile_id, payment_ids = self.api.create_saved_profile(123) profile = service.call_args[0][1] self.assertEqual(profile._kind, 'CustomerProfileType') self.assertEqual(profile.merchantCustomerId, 123) self.assertNotEqual(profile.paymentProfiles._kind, 'ArrayOfCustomerPaymentProfileType') self.assertEqual(profile_id, '123456') self.assertEqual(payment_ids, None) # With payments payment = mock.Mock() profile_id, payment_ids = self.api.create_saved_profile(123, [payment]) profile = service.call_args[0][1] self.assertEqual(profile._kind, 'CustomerProfileType') self.assertEqual(profile.merchantCustomerId, 123) self.assertEqual(profile.paymentProfiles._kind, 'ArrayOfCustomerPaymentProfileType') self.assertEqual(profile.paymentProfiles.CustomerPaymentProfileType, [payment]) self.assertEqual(profile_id, '123456') self.assertEqual(payment_ids, ['123457']) def test_create_saved_payment(self): service = self.api.client.service.CreateCustomerPaymentProfile service.return_value = SUCCESS year = date.today().year + 10 credit_card = CreditCard('4111111111111111', year, 1, '911', 'Jeff', 'Schenck') address = Address('45 Rose Ave', 'Venice', 'CA', '90291') # Without profile id should return object payment_profile = self.api.create_saved_payment(credit_card, address) self.assertEqual(service.call_args, None) self.assertEqual(payment_profile._kind, 'CustomerPaymentProfileType') self.assertEqual(payment_profile.payment._kind, 'PaymentType') self.assertEqual(payment_profile.payment.creditCard._kind, 'CreditCardType') self.assertEqual(payment_profile.payment.creditCard.cardNumber, '4111111111111111') self.assertEqual(payment_profile.payment.creditCard.expirationDate, '{0}-01'.format(year)) self.assertEqual(payment_profile.payment.creditCard.cardCode, '911') self.assertEqual(payment_profile.billTo.firstName, 'Jeff') self.assertEqual(payment_profile.billTo.lastName, 'Schenck') self.assertEqual(payment_profile.billTo.address, '45 Rose Ave') self.assertEqual(payment_profile.billTo.city, 'Venice') self.assertEqual(payment_profile.billTo.state, 'CA') self.assertEqual(payment_profile.billTo.zip, '90291') self.assertEqual(payment_profile.billTo.country, 'US') # With profile id should make call to API payment_profile_id = self.api.create_saved_payment(credit_card, profile_id='1') self.assertEqual(payment_profile_id, '123458') self.assertEqual(service.call_args[0][1], '1') payment_profile = service.call_args[0][2] self.assertEqual(payment_profile._kind, 'CustomerPaymentProfileType') self.assertEqual(payment_profile.payment._kind, 'PaymentType') self.assertEqual(payment_profile.payment.creditCard._kind, 'CreditCardType') self.assertEqual(payment_profile.payment.creditCard.cardNumber, '4111111111111111') self.assertEqual(payment_profile.payment.creditCard.expirationDate, '{0}-01'.format(year)) self.assertEqual(payment_profile.payment.creditCard.cardCode, '911') self.assertEqual(payment_profile.billTo.firstName, 'Jeff') self.assertEqual(payment_profile.billTo.lastName, 'Schenck') self.assertNotEqual(payment_profile.billTo.address, '45 Rose Ave') self.assertNotEqual(payment_profile.billTo.city, 'Venice') self.assertNotEqual(payment_profile.billTo.state, 'CA') self.assertNotEqual(payment_profile.billTo.zip, '90291') self.assertNotEqual(payment_profile.billTo.country, 'US') def test_delete_saved_profile(self): service = self.api.client.service.DeleteCustomerProfile service.return_value = SUCCESS self.api.delete_saved_profile('1') self.assertEqual(service.call_args[0][1], '1') def test_delete_saved_payment(self): service = self.api.client.service.DeleteCustomerPaymentProfile service.return_value = SUCCESS self.api.delete_saved_payment('1', '2') self.assertEqual(service.call_args[0][1:], ('1', '2')) def test_auth(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.auth('1', '2', 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, 'ProfileTransactionType') self.assertEqual(transaction.profileTransAuthOnly._kind, 'ProfileTransAuthOnlyType') self.assertEqual(transaction.profileTransAuthOnly.amount, '20.00') self.assertEqual(transaction.profileTransAuthOnly.customerProfileId, '1') self.assertEqual( transaction.profileTransAuthOnly.customerPaymentProfileId, '2') self.assertEqual(options, OPTIONS) self.assertEqual(result, PARSED_RESPONSE) def test_capture(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.capture('1', '2', 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, 'ProfileTransactionType') self.assertEqual(transaction.profileTransAuthCapture._kind, 'ProfileTransAuthCaptureType') self.assertEqual(transaction.profileTransAuthCapture.amount, '20.00') self.assertEqual(transaction.profileTransAuthCapture.customerProfileId, '1') self.assertEqual( transaction.profileTransAuthCapture.customerPaymentProfileId, '2') self.assertEqual(options, OPTIONS) self.assertEqual(result, PARSED_RESPONSE)
class CustomerAPITests(TestCase): def setUp(self): self.patcher = mock.patch('authorize.apis.customer.Client') self.Client = self.patcher.start() self.api = CustomerAPI(TEST_API_LOGIN, TEST_API_KEY) # Make the factory creator return mocks that know what kind they are def create(kind): created = mock.Mock() created._kind = kind return created self.api.client.factory.create.side_effect = create def tearDown(self): self.patcher.stop() def test_basic_api(self): api = CustomerAPI('123', '456') self.assertEqual(api.url, TEST_URL) api = CustomerAPI('123', '456', debug=False) self.assertEqual(api.url, PROD_URL) def test_client_and_auth(self): self.Client.reset_mock() api = CustomerAPI('123', '456') self.assertEqual(self.Client.call_args, None) client_ = api.client self.assertEqual(self.Client.call_args[0][0], TEST_URL) client_auth = api.client_auth self.assertEqual(client_auth.name, '123') self.assertEqual(client_auth.transactionKey, '456') def test_make_call(self): self.api.client.service.TestService.return_value = SUCCESS result = self.api._make_call('TestService', 'foo') self.assertEqual(result, SUCCESS) self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_make_call_connection_error(self): self.api.client.service.TestService.side_effect = WebFault('a', 'b') self.assertRaises(AuthorizeConnectionError, self.api._make_call, 'TestService', 'foo') self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_make_call_ssl_error(self): self.api.client.service.TestService.side_effect = SSLError('a', 'b') self.assertRaises(AuthorizeConnectionError, self.api._make_call, 'TestService', 'foo') self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_make_call_response_error(self): self.api.client.service.TestService.return_value = ERROR try: self.api._make_call('TestService', 'foo') except AuthorizeResponseError as e: self.assertEqual(str(e), 'E00016: The field type is invalid.') self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_create_saved_profile(self): service = self.api.client.service.CreateCustomerProfile service.return_value = SUCCESS email = '*****@*****.**' # Without payments profile_id, payment_ids = self.api.create_saved_profile(123, email=email) # profile = service.call_args[0][1] # self.assertEqual(profile._kind, 'CustomerProfileType') # self.assertEqual(profile.merchantCustomerId, 123) # self.assertNotEqual(profile.paymentProfiles._kind, # 'ArrayOfCustomerPaymentProfileType') # self.assertEqual(profile_id, '123456') self.assertGreaterEqual(len(profile_id), 9) self.assertEqual(payment_ids, None) # self.assertEqual(profile.email, email) # With payments payment = mock.Mock() profile_id, payment_ids = self.api.create_saved_profile(123, [payment]) profile = service.call_args[0][1] self.assertEqual(profile._kind, 'CustomerProfileType') self.assertEqual(profile.merchantCustomerId, 123) self.assertEqual(profile.paymentProfiles._kind, 'ArrayOfCustomerPaymentProfileType') self.assertEqual(profile.paymentProfiles.CustomerPaymentProfileType, [payment]) self.assertEqual(profile_id, '123456') self.assertEqual(payment_ids, ['123457']) def test_create_saved_payment(self): service = self.api.client.service.CreateCustomerPaymentProfile service.return_value = SUCCESS year = date.today().year + 10 credit_card = CreditCard('4111111111111111', year, 1, '911', 'Jeff', 'Schenck') address = Address('45 Rose Ave', 'Venice', 'CA', '90291') # Without profile id should return object payment_profile = self.api.create_saved_payment(credit_card, address) self.assertEqual(service.call_args, None) self.assertEqual(payment_profile.__class__.__name__, 'customerPaymentProfileType') self.assertEqual(payment_profile.payment.__class__.__name__, 'paymentType') self.assertEqual(payment_profile.payment.creditCard.__class__.__name__, 'creditCardType') self.assertEqual(payment_profile.payment.creditCard.cardNumber, '4111111111111111') self.assertEqual(payment_profile.payment.creditCard.expirationDate, '{0}-01'.format(year)) self.assertEqual(payment_profile.payment.creditCard.cardCode, '911') self.assertEqual(payment_profile.billTo.firstName, 'Jeff') self.assertEqual(payment_profile.billTo.lastName, 'Schenck') self.assertEqual(payment_profile.billTo.address, '45 Rose Ave') self.assertEqual(payment_profile.billTo.city, 'Venice') self.assertEqual(payment_profile.billTo.state, 'CA') self.assertEqual(payment_profile.billTo.zip, '90291') self.assertEqual(payment_profile.billTo.country, 'US') # With profile id should make call to API payment_profile_id = self.api.create_saved_payment(credit_card, profile_id='1') self.assertEqual(payment_profile_id, '123458') self.assertEqual(service.call_args[0][1], '1') payment_profile = service.call_args[0][2] self.assertEqual(payment_profile._kind, 'CustomerPaymentProfileType') self.assertEqual(payment_profile.payment._kind, 'PaymentType') self.assertEqual(payment_profile.payment.creditCard._kind, 'CreditCardType') self.assertEqual(payment_profile.payment.creditCard.cardNumber, '4111111111111111') self.assertEqual(payment_profile.payment.creditCard.expirationDate, '{0}-01'.format(year)) self.assertEqual(payment_profile.payment.creditCard.cardCode, '911') self.assertEqual(payment_profile.billTo.firstName, 'Jeff') self.assertEqual(payment_profile.billTo.lastName, 'Schenck') self.assertNotEqual(payment_profile.billTo.address, '45 Rose Ave') self.assertNotEqual(payment_profile.billTo.city, 'Venice') self.assertNotEqual(payment_profile.billTo.state, 'CA') self.assertNotEqual(payment_profile.billTo.zip, '90291') self.assertNotEqual(payment_profile.billTo.country, 'US') def test_retrieve_saved_payment(self): service = self.api.client.service.GetCustomerProfile service.return_value = PROFILE_RESPONSE address = Address(street='45 Rose Ave', city='Venice', state='CA', zip_code='90291', country='USA') payment = self.api.retrieve_saved_payment('123456', '123458') self.assertEqual(payment['first_name'], 'Jeff') self.assertEqual(payment['last_name'], 'Schenck') self.assertEqual(payment['address'].street, address.street) self.assertEqual(payment['address'].city, address.city) self.assertEqual(payment['address'].state, address.state) self.assertEqual(payment['address'].zip_code, address.zip_code) self.assertEqual(payment['number'], 'XXXX1111') self.assertEqual(payment['email'], '*****@*****.**') def test_update_saved_payment(self): service_payment = self.api.client.service.UpdateCustomerPaymentProfile service_payment.return_value = SUCCESS service_customer = self.api.client.service.UpdateCustomerProfile service_customer.return_value = SUCCESS address = Address(street='45 Rose Ave', city='Venice', state='CA', zip_code='90291', country='US') kwargs = { 'first_name': 'Jeff', 'last_name': 'Schenck', 'address': address, 'email': '*****@*****.**', 'exp_month': '10', 'exp_year': int(date.today().year + 10), 'number': 'XXXX1111' } self.api.update_saved_payment('123456', '123458', **kwargs) self.assertEqual(service_payment.call_args[0][1], '123456') profile_request = service_payment.call_args[0][2] self.assertEqual(profile_request.customerPaymentProfileId, '123458') self.assertEqual(profile_request.billTo.firstName, kwargs['first_name']) self.assertEqual(profile_request.billTo.lastName, kwargs['last_name']) self.assertEqual(profile_request.billTo.address, address.street) self.assertEqual(profile_request.billTo.state, address.state) self.assertEqual(profile_request.billTo.zip, address.zip_code) self.assertEqual(profile_request.payment.creditCard.cardNumber, 'XXXX1111') exp_date = '{0}-{1:0>2}'.format(kwargs['exp_year'], kwargs['exp_month']) self.assertEqual(profile_request.payment.creditCard.expirationDate, exp_date) customer_profile = service_customer.call_args[0][1] self.assertEqual(customer_profile.customerProfileId, '123456') self.assertEqual(customer_profile.email, kwargs['email']) def test_delete_saved_profile(self): service = self.api.client.service.DeleteCustomerProfile service.return_value = SUCCESS self.api.delete_saved_profile('1') self.assertEqual(service.call_args[0][1], '1') def test_delete_saved_payment(self): service = self.api.client.service.DeleteCustomerPaymentProfile service.return_value = SUCCESS self.api.delete_saved_payment('1', '2') self.assertEqual(service.call_args[0][1:], ('1', '2')) def test_auth(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.auth('1', '2', 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, 'ProfileTransactionType') self.assertEqual(transaction.profileTransAuthOnly._kind, 'ProfileTransAuthOnlyType') self.assertEqual(transaction.profileTransAuthOnly.amount, '20.00') self.assertEqual(transaction.profileTransAuthOnly.customerProfileId, '1') self.assertEqual( transaction.profileTransAuthOnly.customerPaymentProfileId, '2') self.assertEqual(parse_qs(options), parse_qs(OPTIONS)) self.assertEqual(result, PARSED_RESPONSE) def test_capture(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.capture('1', '2', 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, 'ProfileTransactionType') self.assertEqual(transaction.profileTransAuthCapture._kind, 'ProfileTransAuthCaptureType') self.assertEqual(transaction.profileTransAuthCapture.amount, '20.00') self.assertEqual(transaction.profileTransAuthCapture.customerProfileId, '1') self.assertEqual( transaction.profileTransAuthCapture.customerPaymentProfileId, '2') self.assertEqual(parse_qs(options), parse_qs(OPTIONS)) self.assertEqual(result, PARSED_RESPONSE)
class CustomerAPITests(TestCase): def setUp(self): self.patcher = mock.patch( 'authorize.apis.customer.Client') self.Client = self.patcher.start() self.api = CustomerAPI('123', '456') # Make the factory creator return mocks that know what kind they are def create(kind): created = mock.Mock() created._kind = kind return created self.api.client.factory.create.side_effect = create def tearDown(self): self.patcher.stop() def test_basic_api(self): api = CustomerAPI('123', '456') self.assertEqual(api.url, TEST_URL) api = CustomerAPI('123', '456', debug=False) self.assertEqual(api.url, PROD_URL) def test_client_and_auth(self): self.Client.reset_mock() api = CustomerAPI('123', '456') self.assertEqual(self.Client.call_args, None) client_ = api.client self.assertEqual(self.Client.call_args[0][0], TEST_URL) client_auth = api.client_auth self.assertEqual(client_auth.name, '123') self.assertEqual(client_auth.transactionKey, '456') def test_make_call(self): self.api.client.service.TestService.return_value = SUCCESS result = self.api._make_call('TestService', 'foo') self.assertEqual(result, SUCCESS) self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_make_call_connection_error(self): self.api.client.service.TestService.side_effect = WebFault('a', 'b') self.assertRaises(AuthorizeConnectionError, self.api._make_call, 'TestService', 'foo') self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_make_call_response_error(self): self.api.client.service.TestService.return_value = ERROR try: self.api._make_call('TestService', 'foo') except AuthorizeResponseError as e: self.assertEqual(str(e), 'E00016: The field type is invalid.') self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_create_saved_profile(self): service = self.api.client.service.CreateCustomerProfile service.return_value = SUCCESS # Without payments profile_id, payment_ids = self.api.create_saved_profile(123) profile = service.call_args[0][1] self.assertEqual(profile._kind, 'CustomerProfileType') self.assertEqual(profile.merchantCustomerId, 123) self.assertNotEqual(profile.paymentProfiles._kind, 'ArrayOfCustomerPaymentProfileType') self.assertEqual(profile_id, '123456') self.assertEqual(payment_ids, None) # With payments payment = mock.Mock() profile_id, payment_ids = self.api.create_saved_profile( 123, [payment]) profile = service.call_args[0][1] self.assertEqual(profile._kind, 'CustomerProfileType') self.assertEqual(profile.merchantCustomerId, 123) self.assertEqual(profile.paymentProfiles._kind, 'ArrayOfCustomerPaymentProfileType') self.assertEqual(profile.paymentProfiles.CustomerPaymentProfileType, [payment]) self.assertEqual(profile_id, '123456') self.assertEqual(payment_ids, ['123457']) def test_create_saved_payment(self): service = self.api.client.service.CreateCustomerPaymentProfile service.return_value = SUCCESS year = date.today().year + 10 credit_card = CreditCard('4111111111111111', year, 1, '911', 'Jeff', 'Schenck') address = Address('45 Rose Ave', 'Venice', 'CA', '90291') # Without profile id should return object payment_profile = self.api.create_saved_payment(credit_card, address) self.assertEqual(service.call_args, None) self.assertEqual(payment_profile._kind, 'CustomerPaymentProfileType') self.assertEqual(payment_profile.payment._kind, 'PaymentType') self.assertEqual(payment_profile.payment.creditCard._kind, 'CreditCardType') self.assertEqual(payment_profile.payment.creditCard.cardNumber, '4111111111111111') self.assertEqual(payment_profile.payment.creditCard.expirationDate, '{0}-01'.format(year)) self.assertEqual(payment_profile.payment.creditCard.cardCode, '911') self.assertEqual(payment_profile.billTo.firstName, 'Jeff') self.assertEqual(payment_profile.billTo.lastName, 'Schenck') self.assertEqual(payment_profile.billTo.address, '45 Rose Ave') self.assertEqual(payment_profile.billTo.city, 'Venice') self.assertEqual(payment_profile.billTo.state, 'CA') self.assertEqual(payment_profile.billTo.zip, '90291') self.assertEqual(payment_profile.billTo.country, 'US') # With profile id should make call to API payment_profile_id = self.api.create_saved_payment(credit_card, profile_id='1') self.assertEqual(payment_profile_id, '123458') self.assertEqual(service.call_args[0][1], '1') payment_profile = service.call_args[0][2] self.assertEqual(payment_profile._kind, 'CustomerPaymentProfileType') self.assertEqual(payment_profile.payment._kind, 'PaymentType') self.assertEqual(payment_profile.payment.creditCard._kind, 'CreditCardType') self.assertEqual(payment_profile.payment.creditCard.cardNumber, '4111111111111111') self.assertEqual(payment_profile.payment.creditCard.expirationDate, '{0}-01'.format(year)) self.assertEqual(payment_profile.payment.creditCard.cardCode, '911') self.assertEqual(payment_profile.billTo.firstName, 'Jeff') self.assertEqual(payment_profile.billTo.lastName, 'Schenck') self.assertNotEqual(payment_profile.billTo.address, '45 Rose Ave') self.assertNotEqual(payment_profile.billTo.city, 'Venice') self.assertNotEqual(payment_profile.billTo.state, 'CA') self.assertNotEqual(payment_profile.billTo.zip, '90291') self.assertNotEqual(payment_profile.billTo.country, 'US') def test_delete_saved_profile(self): service = self.api.client.service.DeleteCustomerProfile service.return_value = SUCCESS self.api.delete_saved_profile('1') self.assertEqual(service.call_args[0][1], '1') def test_delete_saved_payment(self): service = self.api.client.service.DeleteCustomerPaymentProfile service.return_value = SUCCESS self.api.delete_saved_payment('1', '2') self.assertEqual(service.call_args[0][1:], ('1', '2')) def test_auth(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.auth('1', '2', 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, 'ProfileTransactionType') self.assertEqual(transaction.profileTransAuthOnly._kind, 'ProfileTransAuthOnlyType') self.assertEqual(transaction.profileTransAuthOnly.amount, '20.00') self.assertEqual( transaction.profileTransAuthOnly.customerProfileId, '1') self.assertEqual( transaction.profileTransAuthOnly.customerPaymentProfileId, '2') self.assertEqual(options, OPTIONS) self.assertEqual(result, PARSED_RESPONSE) def test_capture(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.capture('1', '2', 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, 'ProfileTransactionType') self.assertEqual(transaction.profileTransAuthCapture._kind, 'ProfileTransAuthCaptureType') self.assertEqual(transaction.profileTransAuthCapture.amount, '20.00') self.assertEqual( transaction.profileTransAuthCapture.customerProfileId, '1') self.assertEqual( transaction.profileTransAuthCapture.customerPaymentProfileId, '2') self.assertEqual(options, OPTIONS) self.assertEqual(result, PARSED_RESPONSE)
class CustomerAPITests(TestCase): def setUp(self): self.patcher = mock.patch( 'authorize.apis.customer.Client') self.Client = self.patcher.start() self.api = CustomerAPI('123', '456') # Make the factory creator return mocks that know what kind they are def create(kind): created = mock.Mock() created._kind = kind return created self.api.client.factory.create.side_effect = create def tearDown(self): self.patcher.stop() def test_basic_api(self): api = CustomerAPI('123', '456') self.assertEqual(api.url, TEST_URL) api = CustomerAPI('123', '456', debug=False) self.assertEqual(api.url, PROD_URL) def test_client_and_auth(self): self.Client.reset_mock() api = CustomerAPI('123', '456') self.assertEqual(self.Client.call_args, None) client_ = api.client self.assertEqual(self.Client.call_args[0][0], TEST_URL) client_auth = api.client_auth self.assertEqual(client_auth.name, '123') self.assertEqual(client_auth.transactionKey, '456') def test_make_call(self): self.api.client.service.TestService.return_value = SUCCESS result = self.api._make_call('TestService', 'foo') self.assertEqual(result, SUCCESS) self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_make_call_connection_error(self): self.api.client.service.TestService.side_effect = WebFault('a', 'b') self.assertRaises(AuthorizeConnectionError, self.api._make_call, 'TestService', 'foo') self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_make_call_ssl_error(self): self.api.client.service.TestService.side_effect = SSLError('a', 'b') self.assertRaises(AuthorizeConnectionError, self.api._make_call, 'TestService', 'foo') self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_make_call_response_error(self): self.api.client.service.TestService.return_value = ERROR try: self.api._make_call('TestService', 'foo') except AuthorizeResponseError as e: self.assertEqual(str(e), 'E00016: The field type is invalid.') self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, 'foo')) def test_create_saved_profile(self): service = self.api.client.service.CreateCustomerProfile service.return_value = SUCCESS email = '*****@*****.**' # Without payments profile_id, payment_ids = self.api.create_saved_profile( 123, email=email) profile = service.call_args[0][1] self.assertEqual(profile._kind, 'CustomerProfileType') self.assertEqual(profile.merchantCustomerId, 123) self.assertNotEqual(profile.paymentProfiles._kind, 'ArrayOfCustomerPaymentProfileType') self.assertEqual(profile_id, '123456') self.assertEqual(payment_ids, None) self.assertEqual(profile.email, email) # With payments payment = mock.Mock() profile_id, payment_ids = self.api.create_saved_profile( 123, [payment]) profile = service.call_args[0][1] self.assertEqual(profile._kind, 'CustomerProfileType') self.assertEqual(profile.merchantCustomerId, 123) self.assertEqual(profile.paymentProfiles._kind, 'ArrayOfCustomerPaymentProfileType') self.assertEqual(profile.paymentProfiles.CustomerPaymentProfileType, [payment]) self.assertEqual(profile_id, '123456') self.assertEqual(payment_ids, ['123457']) def test_create_saved_payment(self): service = self.api.client.service.CreateCustomerPaymentProfile service.return_value = SUCCESS year = date.today().year + 10 credit_card = CreditCard('4111111111111111', year, 1, '911', 'Jeff', 'Schenck') address = Address('45 Rose Ave', 'Venice', 'CA', '90291') # Without profile id should return object payment_profile = self.api.create_saved_payment(credit_card, address) self.assertEqual(service.call_args, None) self.assertEqual(payment_profile._kind, 'CustomerPaymentProfileType') self.assertEqual(payment_profile.payment._kind, 'PaymentType') self.assertEqual(payment_profile.payment.creditCard._kind, 'CreditCardType') self.assertEqual(payment_profile.payment.creditCard.cardNumber, '4111111111111111') self.assertEqual(payment_profile.payment.creditCard.expirationDate, '{0}-01'.format(year)) self.assertEqual(payment_profile.payment.creditCard.cardCode, '911') self.assertEqual(payment_profile.billTo.firstName, 'Jeff') self.assertEqual(payment_profile.billTo.lastName, 'Schenck') self.assertEqual(payment_profile.billTo.address, '45 Rose Ave') self.assertEqual(payment_profile.billTo.city, 'Venice') self.assertEqual(payment_profile.billTo.state, 'CA') self.assertEqual(payment_profile.billTo.zip, '90291') self.assertEqual(payment_profile.billTo.country, 'US') # With profile id should make call to API payment_profile_id = self.api.create_saved_payment(credit_card, profile_id='1') self.assertEqual(payment_profile_id, '123458') self.assertEqual(service.call_args[0][1], '1') payment_profile = service.call_args[0][2] self.assertEqual(payment_profile._kind, 'CustomerPaymentProfileType') self.assertEqual(payment_profile.payment._kind, 'PaymentType') self.assertEqual(payment_profile.payment.creditCard._kind, 'CreditCardType') self.assertEqual(payment_profile.payment.creditCard.cardNumber, '4111111111111111') self.assertEqual(payment_profile.payment.creditCard.expirationDate, '{0}-01'.format(year)) self.assertEqual(payment_profile.payment.creditCard.cardCode, '911') self.assertEqual(payment_profile.billTo.firstName, 'Jeff') self.assertEqual(payment_profile.billTo.lastName, 'Schenck') self.assertNotEqual(payment_profile.billTo.address, '45 Rose Ave') self.assertNotEqual(payment_profile.billTo.city, 'Venice') self.assertNotEqual(payment_profile.billTo.state, 'CA') self.assertNotEqual(payment_profile.billTo.zip, '90291') self.assertNotEqual(payment_profile.billTo.country, 'US') def test_retrieve_saved_payment(self): service = self.api.client.service.GetCustomerProfile service.return_value = PROFILE_RESPONSE address = Address(street='45 Rose Ave', city='Venice', state='CA', zip_code='90291', country='USA') payment = self.api.retrieve_saved_payment('123456', '123458') self.assertEqual(payment['first_name'], 'Jeff') self.assertEqual(payment['last_name'], 'Schenck') self.assertEqual(payment['address'].street, address.street) self.assertEqual(payment['address'].city, address.city) self.assertEqual(payment['address'].state, address.state) self.assertEqual(payment['address'].zip_code, address.zip_code) self.assertEqual(payment['number'], 'XXXX1111') self.assertEqual(payment['email'], '*****@*****.**') def test_update_saved_payment(self): service_payment = self.api.client.service.UpdateCustomerPaymentProfile service_payment.return_value = SUCCESS service_customer = self.api.client.service.UpdateCustomerProfile service_customer.return_value = SUCCESS address = Address(street='45 Rose Ave', city='Venice', state='CA', zip_code='90291', country='US') kwargs = { 'first_name': 'Jeff', 'last_name': 'Schenck', 'address': address, 'email': '*****@*****.**', 'exp_month': '10', 'exp_year': int(date.today().year + 10), 'number': 'XXXX1111'} self.api.update_saved_payment( '123456', '123458', **kwargs) self.assertEqual(service_payment.call_args[0][1], '123456') profile_request = service_payment.call_args[0][2] self.assertEqual(profile_request.customerPaymentProfileId, '123458') self.assertEqual( profile_request.billTo.firstName, kwargs['first_name']) self.assertEqual( profile_request.billTo.lastName, kwargs['last_name']) self.assertEqual(profile_request.billTo.address, address.street) self.assertEqual(profile_request.billTo.state, address.state) self.assertEqual(profile_request.billTo.zip, address.zip_code) self.assertEqual( profile_request.payment.creditCard.cardNumber, 'XXXX1111') exp_date = '{0}-{1:0>2}'.format( kwargs['exp_year'], kwargs['exp_month']) self.assertEqual( profile_request.payment.creditCard.expirationDate, exp_date) customer_profile = service_customer.call_args[0][1] self.assertEqual(customer_profile.customerProfileId, '123456') self.assertEqual(customer_profile.email, kwargs['email']) def test_delete_saved_profile(self): service = self.api.client.service.DeleteCustomerProfile service.return_value = SUCCESS self.api.delete_saved_profile('1') self.assertEqual(service.call_args[0][1], '1') def test_delete_saved_payment(self): service = self.api.client.service.DeleteCustomerPaymentProfile service.return_value = SUCCESS self.api.delete_saved_payment('1', '2') self.assertEqual(service.call_args[0][1:], ('1', '2')) def test_auth(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.auth('1', '2', 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, 'ProfileTransactionType') self.assertEqual(transaction.profileTransAuthOnly._kind, 'ProfileTransAuthOnlyType') self.assertEqual(transaction.profileTransAuthOnly.amount, '20.00') self.assertEqual( transaction.profileTransAuthOnly.customerProfileId, '1') self.assertEqual( transaction.profileTransAuthOnly.customerPaymentProfileId, '2') self.assertEqual(parse_qs(options), parse_qs(OPTIONS)) self.assertEqual(result, PARSED_RESPONSE) def test_capture(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.capture('1', '2', 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, 'ProfileTransactionType') self.assertEqual(transaction.profileTransAuthCapture._kind, 'ProfileTransAuthCaptureType') self.assertEqual(transaction.profileTransAuthCapture.amount, '20.00') self.assertEqual( transaction.profileTransAuthCapture.customerProfileId, '1') self.assertEqual( transaction.profileTransAuthCapture.customerPaymentProfileId, '2') self.assertEqual(parse_qs(options), parse_qs(OPTIONS)) self.assertEqual(result, PARSED_RESPONSE)
class CustomerAPITests(TestCase): def setUp(self): self.patcher = mock.patch("authorize.apis.customer.Client") self.Client = self.patcher.start() self.api = CustomerAPI("123", "456") # Make the factory creator return mocks that know what kind they are def create(kind): created = mock.Mock() created._kind = kind return created self.api.client.factory.create.side_effect = create def tearDown(self): self.patcher.stop() def test_basic_api(self): api = CustomerAPI("123", "456") self.assertEqual(api.url, TEST_URL) api = CustomerAPI("123", "456", debug=False) self.assertEqual(api.url, PROD_URL) def test_client_and_auth(self): self.Client.reset_mock() api = CustomerAPI("123", "456") self.assertEqual(self.Client.call_args, None) client_ = api.client self.assertEqual(self.Client.call_args[0][0], TEST_URL) client_auth = api.client_auth self.assertEqual(client_auth.name, "123") self.assertEqual(client_auth.transactionKey, "456") def test_make_call(self): self.api.client.service.TestService.return_value = SUCCESS result = self.api._make_call("TestService", "foo") self.assertEqual(result, SUCCESS) self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, "foo")) def test_make_call_connection_error(self): self.api.client.service.TestService.side_effect = WebFault("a", "b") self.assertRaises(AuthorizeConnectionError, self.api._make_call, "TestService", "foo") self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, "foo")) def test_make_call_response_error(self): self.api.client.service.TestService.return_value = ERROR try: self.api._make_call("TestService", "foo") except AuthorizeResponseError as e: self.assertEqual(str(e), "E00016: The field type is invalid.") self.assertEqual(self.api.client.service.TestService.call_args[0], (self.api.client_auth, "foo")) def test_create_saved_profile(self): service = self.api.client.service.CreateCustomerProfile service.return_value = SUCCESS # Without payments profile_id, payment_ids = self.api.create_saved_profile(123) profile = service.call_args[0][1] self.assertEqual(profile._kind, "CustomerProfileType") self.assertEqual(profile.merchantCustomerId, 123) self.assertNotEqual(profile.paymentProfiles._kind, "ArrayOfCustomerPaymentProfileType") self.assertEqual(profile_id, "123456") self.assertEqual(payment_ids, None) # With payments payment = mock.Mock() profile_id, payment_ids = self.api.create_saved_profile(123, [payment]) profile = service.call_args[0][1] self.assertEqual(profile._kind, "CustomerProfileType") self.assertEqual(profile.merchantCustomerId, 123) self.assertEqual(profile.paymentProfiles._kind, "ArrayOfCustomerPaymentProfileType") self.assertEqual(profile.paymentProfiles.CustomerPaymentProfileType, [payment]) self.assertEqual(profile_id, "123456") self.assertEqual(payment_ids, ["123457"]) def test_create_saved_payment(self): service = self.api.client.service.CreateCustomerPaymentProfile service.return_value = SUCCESS year = date.today().year + 10 credit_card = CreditCard("4111111111111111", year, 1, "911", "Jeff", "Schenck") address = Address("45 Rose Ave", "Venice", "CA", "90291") # Without profile id should return object payment_profile = self.api.create_saved_payment(credit_card, address) self.assertEqual(service.call_args, None) self.assertEqual(payment_profile._kind, "CustomerPaymentProfileType") self.assertEqual(payment_profile.payment._kind, "PaymentType") self.assertEqual(payment_profile.payment.creditCard._kind, "CreditCardType") self.assertEqual(payment_profile.payment.creditCard.cardNumber, "4111111111111111") self.assertEqual(payment_profile.payment.creditCard.expirationDate, "{0}-01".format(year)) self.assertEqual(payment_profile.payment.creditCard.cardCode, "911") self.assertEqual(payment_profile.billTo.firstName, "Jeff") self.assertEqual(payment_profile.billTo.lastName, "Schenck") self.assertEqual(payment_profile.billTo.address, "45 Rose Ave") self.assertEqual(payment_profile.billTo.city, "Venice") self.assertEqual(payment_profile.billTo.state, "CA") self.assertEqual(payment_profile.billTo.zip, "90291") self.assertEqual(payment_profile.billTo.country, "US") # With profile id should make call to API payment_profile_id = self.api.create_saved_payment(credit_card, profile_id="1") self.assertEqual(payment_profile_id, "123458") self.assertEqual(service.call_args[0][1], "1") payment_profile = service.call_args[0][2] self.assertEqual(payment_profile._kind, "CustomerPaymentProfileType") self.assertEqual(payment_profile.payment._kind, "PaymentType") self.assertEqual(payment_profile.payment.creditCard._kind, "CreditCardType") self.assertEqual(payment_profile.payment.creditCard.cardNumber, "4111111111111111") self.assertEqual(payment_profile.payment.creditCard.expirationDate, "{0}-01".format(year)) self.assertEqual(payment_profile.payment.creditCard.cardCode, "911") self.assertEqual(payment_profile.billTo.firstName, "Jeff") self.assertEqual(payment_profile.billTo.lastName, "Schenck") self.assertNotEqual(payment_profile.billTo.address, "45 Rose Ave") self.assertNotEqual(payment_profile.billTo.city, "Venice") self.assertNotEqual(payment_profile.billTo.state, "CA") self.assertNotEqual(payment_profile.billTo.zip, "90291") self.assertNotEqual(payment_profile.billTo.country, "US") def test_delete_saved_profile(self): service = self.api.client.service.DeleteCustomerProfile service.return_value = SUCCESS self.api.delete_saved_profile("1") self.assertEqual(service.call_args[0][1], "1") def test_delete_saved_payment(self): service = self.api.client.service.DeleteCustomerPaymentProfile service.return_value = SUCCESS self.api.delete_saved_payment("1", "2") self.assertEqual(service.call_args[0][1:], ("1", "2")) def test_auth(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.auth("1", "2", 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, "ProfileTransactionType") self.assertEqual(transaction.profileTransAuthOnly._kind, "ProfileTransAuthOnlyType") self.assertEqual(transaction.profileTransAuthOnly.amount, "20.00") self.assertEqual(transaction.profileTransAuthOnly.customerProfileId, "1") self.assertEqual(transaction.profileTransAuthOnly.customerPaymentProfileId, "2") self.assertEqual(options, OPTIONS) self.assertEqual(result, PARSED_RESPONSE) def test_capture(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.capture("1", "2", 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, "ProfileTransactionType") self.assertEqual(transaction.profileTransAuthCapture._kind, "ProfileTransAuthCaptureType") self.assertEqual(transaction.profileTransAuthCapture.amount, "20.00") self.assertEqual(transaction.profileTransAuthCapture.customerProfileId, "1") self.assertEqual(transaction.profileTransAuthCapture.customerPaymentProfileId, "2") self.assertEqual(options, OPTIONS) self.assertEqual(result, PARSED_RESPONSE) def test_credit(self): service = self.api.client.service.CreateCustomerProfileTransaction service.return_value = SUCCESS result = self.api.credit("1", "2", 20) transaction, options = service.call_args[0][1:] self.assertEqual(transaction._kind, "ProfileTransactionType") self.assertEqual(transaction.profileTransRefund._kind, "ProfileTransRefundType") self.assertEqual(transaction.profileTransRefund.amount, "20.00") self.assertEqual(transaction.profileTransRefund.customerProfileId, "1") self.assertEqual(transaction.profileTransRefund.customerPaymentProfileId, "2") self.assertEqual(options, OPTIONS) self.assertEqual(result, PARSED_RESPONSE)