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
Exemple #16
0
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
Exemple #27
0
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
Exemple #29
0
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()
Exemple #30
0
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()