def test_configure_test_transaction_data_overrides_settings(): base = gateway.BaseRequest(api_details=API_DETAILS) base.cleaned = {'test': True} base.configure_test_transaction() assert base.cleaned['test'] is True
def test_save_transaction_with_redacted_data(): base = gateway.BaseRequest() base.response = { 'transaction_success': True, 'response_message': 'APPROVED', 'notice': '', 'raw_request': 'cardHolderName=a&cardToken=b', 'raw_response': ('<cardHolderName>a</cardHolderName><cardToken>b</cardToken>'), 'cc_name': 'a', } base.redacted_response = { 'transaction_success': True, 'response_message': 'APPROVED', 'notice': '', 'raw_request': 'cardHolderName=REDACTED', 'raw_response': ('<cardHolderName>REDACTED</cardHolderName>'), 'cc_name': 'REDACTED', } model_instance = base.save_transaction('s') assert isinstance(model_instance, MockDjangoModel)
def test_create_model_arguments_partial(): base = gateway.BaseRequest() base.redacted_response = {} arguments = base.create_model_arguments('z') assert len(arguments) == 21 assert arguments['raw_request'] is None assert arguments['raw_response'] is None assert arguments['transaction_success'] is None assert arguments['response_message'] is None assert arguments['notice'] is None assert arguments['date_response'] is None assert arguments['transaction_id'] is None assert arguments['amount'] is None assert arguments['currency'] is None assert arguments['cc_name'] is None assert arguments['cc_number'] is None assert arguments['cc_expiry'] is None assert arguments['cc_type'] is None assert arguments['token'] is None assert arguments['avs_response'] is None assert arguments['cvv_response'] is None assert arguments['approval_code'] is None assert arguments['order_number'] is None assert arguments['customer_code'] is None assert arguments['transaction_type'] == 'z'
def test_redact_api_data_account_id(): base = gateway.BaseRequest() base.redacted_response = { 'raw_request': 'accountId=1', } base._redact_api_data() assert base.redacted_response['raw_request'] == 'accountId=REDACTED'
def test_configure_test_transaction_in_data(): base = gateway.BaseRequest(api_details=API_DETAILS) base.cleaned = {'test': True} base.configure_test_transaction() assert 'test' in base.cleaned assert base.cleaned['test'] is True
def test_redact_api_data_api_token(): base = gateway.BaseRequest() base.redacted_response = { 'raw_request': 'apiToken=1', } base._redact_api_data() assert base.redacted_response['raw_request'] == 'apiToken=REDACTED'
def test_redact_api_data_terminal_id(): base = gateway.BaseRequest() base.redacted_response = { 'raw_request': 'terminalId=1', } base._redact_api_data() assert base.redacted_response['raw_request'] == 'terminalId=REDACTED'
def test_process_error_response_base(): base_request = gateway.BaseRequest() try: base_request.process_error_response('') except helcim_exceptions.HelcimError: assert True else: assert False
def test_redact_api_data_all_fields(): base = gateway.BaseRequest() base.redacted_response = { 'raw_request': 'accountId=1&apiToken=2&terminalId=3', } base._redact_api_data() assert base.redacted_response['raw_request'] == ( 'accountId=REDACTED&apiToken=REDACTED&terminalId=REDACTED')
def test_create_model_arguments_missing_date(): base = gateway.BaseRequest() base.redacted_response = { 'transaction_time': datetime(2018, 1, 1, 12, 0).time(), } arguments = base.create_model_arguments('z') assert arguments['date_response'] is None
def test_save_transaction_integrity_error(): base = gateway.BaseRequest() base.response = {} try: base.save_transaction('s') except helcim_exceptions.DjangoError: assert True else: assert False
def test_post_api_non_200_status_code(): base_request = gateway.BaseRequest(api_details=API_DETAILS) try: base_request.post() except helcim_exceptions.ProcessingError as error: assert True assert str(error) == "Helcim API request failed with status code 404" else: assert False
def test_post_api_error_response_message(): base_request = gateway.BaseRequest(api_details=API_DETAILS) try: base_request.post() except helcim_exceptions.HelcimError as error: assert True assert str(error) == "Helcim API request failed: TEST ERROR" else: assert False
def test_save_transaction_missing_required_field_handling(): base = gateway.BaseRequest() base.response = {} try: base.save_transaction('s') except helcim_exceptions.DjangoError: assert True else: assert False
def test_post_api_connection_error(): base_request = gateway.BaseRequest(api_details=API_DETAILS) try: base_request.post() except helcim_exceptions.ProcessingError as error: assert True assert str(error) == ( "Unable to connect to Helcim API (https://www.test.com)") else: assert False
def test__base_request__save_transaction__missing_required_field_handling(): """Confirms proper error returns when field missing.""" base = gateway.BaseRequest() base.response = {} try: base.save_transaction('s') except helcim_exceptions.DjangoError: assert True else: assert False
def test_set_api_details_argument(): base = gateway.BaseRequest(api_details=API_DETAILS) assert 'url' in base.api assert base.api['url'] == 'https://www.test.com' assert 'account_id' in base.api assert base.api['account_id'] == '12345678' assert 'token' in base.api assert base.api['token'] == 'abcdefg' assert 'terminal_id' in base.api assert base.api['terminal_id'] == '98765432'
def test_set_api_details_settings(): base = gateway.BaseRequest() assert 'url' in base.api assert base.api['url'] == '1' assert 'account_id' in base.api assert base.api['account_id'] == '2' assert 'token' in base.api assert base.api['token'] == '3' assert 'terminal_id' in base.api assert base.api['terminal_id'] == '4'
def test_save_transaction_saves_to_model(): count = models.HelcimTransaction.objects.all().count() base = gateway.BaseRequest() base.response = { 'transaction_success': True, 'transaction_date': datetime(2018, 1, 1).date(), 'transaction_time': datetime(2018, 1, 1, 1, 2, 3).time(), } base.save_transaction('s') assert count + 1 == models.HelcimTransaction.objects.all().count()
def test_redact_data_cc_type(): base = gateway.BaseRequest() base.response = { 'raw_request': 'cardType=a', 'raw_response': '<cardType>a</cardType>', 'cc_type': 'a', } base.redact_data() assert base.redacted_response['raw_request'] == 'cardType=REDACTED' assert base.redacted_response['raw_response'] == ( '<cardType>REDACTED</cardType>') assert base.redacted_response['cc_type'] is None
def test_redact_data_cc_expiry(): base = gateway.BaseRequest() base.response = { 'raw_request': 'cardExpiry=a', 'raw_response': '<cardExpiry>a</cardExpiry><expiryDate>b</expiryDate>', 'cc_expiry': 'a', } base.redact_data() assert base.redacted_response['raw_request'] == 'cardExpiry=REDACTED' assert base.redacted_response['raw_response'] == ( '<cardExpiry>REDACTED</cardExpiry><expiryDate>REDACTED</expiryDate>') assert base.redacted_response['cc_expiry'] is None
def test_redact_data_cc_number(): base = gateway.BaseRequest() base.response = { 'raw_request': 'cardNumber=a', 'raw_response': '<cardNumber>a</cardNumber>', 'cc_number': 'a', } base.redact_data() assert base.redacted_response['raw_request'] == 'cardNumber=REDACTED' assert base.redacted_response['raw_response'] == ( '<cardNumber>REDACTED</cardNumber>') assert base.redacted_response['cc_number'] is None
def test_redact_field(): base = gateway.BaseRequest() base.redacted_response = { 'raw_request': 'cardHolderName=a', 'raw_response': '<cardHolderName>a</cardHolderName>', 'cc_name': 'a', } base._redact_field('cardHolderName', 'cc_name') assert base.redacted_response['raw_request'] == 'cardHolderName=REDACTED' assert base.redacted_response['raw_response'] == ( '<cardHolderName>REDACTED</cardHolderName>') assert base.redacted_response['cc_name'] is None
def test_redact_field_only_redacts_specified_details(): base = gateway.BaseRequest() base.redacted_response = { 'raw_request': 'cardHolderName=a', 'raw_response': '<cardHolderName>a</cardHolderName>', 'cc_name': 'a', } base._redact_field('cardNumber', 'cc_number') assert len(base.redacted_response) == 3 assert base.redacted_response['raw_request'] == 'cardHolderName=a' assert base.redacted_response['raw_response'] == ( '<cardHolderName>a</cardHolderName>') assert base.redacted_response['cc_name'] is 'a'
def test_create_model_arguments_full(): base = gateway.BaseRequest() base.redacted_response = { 'raw_request': 'a', 'raw_response': 'b', 'transaction_success': 'c', 'response_message': 'd', 'notice': 'e', 'transaction_date': datetime(2018, 1, 1).date(), 'transaction_time': datetime(2018, 1, 1, 12, 0).time(), 'transaction_id': 'f', 'amount': 'g', 'currency': 'h', 'cc_name': 'i', 'cc_number': 'j', 'cc_expiry': '0620', 'cc_type': 'k', 'token': 'l', 'token_f4l4': 'm', 'avs_response': 'n', 'cvv_response': 'o', 'approval_code': 'p', 'order_number': 'q', 'customer_code': 'r', } arguments = base.create_model_arguments('z') assert len(arguments) == 21 assert arguments['raw_request'] == 'a' assert arguments['raw_response'] == 'b' assert arguments['transaction_success'] == 'c' assert arguments['response_message'] == 'd' assert arguments['notice'] == 'e' assert arguments['date_response'] == datetime(2018, 1, 1, 12, 0) assert arguments['transaction_id'] == 'f' assert arguments['amount'] == 'g' assert arguments['currency'] == 'h' assert arguments['cc_name'] == 'i' assert arguments['cc_number'] == 'j' assert arguments['cc_expiry'] == datetime(20, 6, 30).date() assert arguments['cc_type'] == 'k' assert arguments['token'] == 'l' assert arguments['token_f4l4'] == 'm' assert arguments['avs_response'] == 'n' assert arguments['cvv_response'] == 'o' assert arguments['approval_code'] == 'p' assert arguments['order_number'] == 'q' assert arguments['customer_code'] == 'r' assert arguments['transaction_type'] == 'z'
def test_save_transaction_invalid_data_type_handling(): base = gateway.BaseRequest() base.response = { 'transaction_success': True, 'transaction_date': datetime(2018, 1, 1).date(), 'transaction_time': datetime(2018, 1, 1, 1, 2, 3).time(), 'transaction_id': 'a', } try: base.save_transaction('s') except helcim_exceptions.DjangoError: assert True else: assert False
def test__base_request__save_transaction__invalid_data_type_handling(): """Confirms error returned when invalide field type provided.""" base = gateway.BaseRequest() base.response = { 'transaction_success': True, 'transaction_date': datetime(2018, 1, 1).date(), 'transaction_time': datetime(2018, 1, 1, 1, 2, 3).time(), 'transaction_id': 'a', } try: base.save_transaction('s') except helcim_exceptions.DjangoError: assert True else: assert False
def test_redact_data_token(): base = gateway.BaseRequest() base.response = { 'raw_request': 'cardToken=a&cardF4L4=11119999', 'raw_response': ('<cardToken>a</cardToken><cardF4L4>11119999</cardF4L4>'), 'token': 'a', 'token_f4l4': '11119999' } base.redact_data() assert base.redacted_response['raw_request'] == ( 'cardToken=REDACTED&cardF4L4=REDACTED') assert base.redacted_response['raw_response'] == ( '<cardToken>REDACTED</cardToken><cardF4L4>REDACTED</cardF4L4>') assert base.redacted_response['token'] is None assert base.redacted_response['token_f4l4'] is None
def test__base_request__save_transaction__handles_unredacted_data(): """Confirms that method still works when data has not yet been redacted.""" count = models.HelcimTransaction.objects.all().count() # Create request and mock response base = gateway.BaseRequest() base.response = { 'transaction_success': True, 'transaction_date': datetime(2018, 1, 1).date(), 'transaction_time': datetime(2018, 1, 1, 1, 2, 3).time(), } # Confirm that redacted response is Falsy base.redacted_response = {} # Save transaction and confirm handling as normal base.save_transaction('s') assert count + 1 == models.HelcimTransaction.objects.all().count()
def test__base_request__save_transaction__saves_to_model(): """Confirms that models are created as expected.""" count = models.HelcimTransaction.objects.all().count() # Create request and mock response base = gateway.BaseRequest() base.response = { 'transaction_success': True, 'transaction_date': datetime(2018, 1, 1).date(), 'transaction_time': datetime(2018, 1, 1, 1, 2, 3).time(), } # Redact response (as expected in usual handling) base.redact_data() # Save transaction and confirm transaction was created base.save_transaction('s') assert count + 1 == models.HelcimTransaction.objects.all().count()