def test_purchase_bridge_valid_no_redaction():
    """Tests results of purchase bridge with no redaction."""
    credit_card = MockCreditCard(
        name='Test Person',
        number='1111222233334444',
        expiry=datetime(2025, 1, 1),
        ccv='100'
    )
    purchase = bridge_oscar.PurchaseBridge(
        amount='200.00',
        card=credit_card,
        billing_address={'first_name': 'Test Person'},
        save_token=True
    )
    transaction, token = purchase.process()

    # Check for expected transaction results
    assert isinstance(transaction, models.HelcimTransaction)
    assert transaction.transaction_id == 1111111
    assert transaction.cc_name == 'Test Person'
    print(transaction.raw_request)
    assert 'amount=200.00' in transaction.raw_request
    assert 'cardHolderName=Test Person' in transaction.raw_request

    # Check for expected token details
    assert isinstance(token, models.HelcimToken)
    assert token.token == 'abcdefghijklmnopqrstuvw'
    assert token.token_f4l4 == '11114444'
    assert token.cc_type == 'MasterCard'
    assert token.customer_code == 'CST1000'
    assert token.django_user is None
Exemple #2
0
def test_purchase_bridge_payment_error():
    purchase = bridge_oscar.PurchaseBridge('1', card=MockCreditCard())

    try:
        purchase.process()
    except oscar_exceptions.PaymentError:
        assert True
    else:
        assert False
Exemple #3
0
def test_purchase_bridge_valid():
    purchase = bridge_oscar.PurchaseBridge('1', card=MockCreditCard())

    try:
        purchase.process()
    except (oscar_exceptions.GatewayError, oscar_exceptions.PaymentError):
        assert False
    else:
        assert True
def test_purchase_bridge_valid_redact_sensitive_cc_data():
    """Tests results of purchase bridge with redaction."""
    credit_card = MockCreditCard(
        name='Test Person',
        number='1111222233334444',
        expiry=datetime(2025, 1, 1),
        ccv='100'
    )
    purchase = bridge_oscar.PurchaseBridge(
        amount='200.00',
        card=credit_card,
        billing_address={'first_name': 'Test Person'},
        save_token=True,
    )
    transaction, token = purchase.process()

    # Test transaction data saved and redacted
    assert transaction.cc_name is None
    assert transaction.cc_number is None
    assert transaction.cc_expiry is None
    assert transaction.cc_type is None
    assert transaction.token is None
    assert 'accountId=REDACTED' in transaction.raw_request
    assert 'apiToken=REDACTED' in transaction.raw_request
    assert 'terminalId=REDACTED' in transaction.raw_request
    assert 'cardHolderName=REDACTED' in transaction.raw_request
    assert 'cardNumber=REDACTED' in transaction.raw_request
    assert 'cardExpiry=REDACTED' in transaction.raw_request
    assert (
        '<cardHolderName>REDACTED</cardHolderName>' in transaction.raw_response
    )
    assert '<cardNumber>REDACTED</cardNumber>' in transaction.raw_response
    assert '<expiryDate>REDACTED</expiryDate>' in transaction.raw_response
    assert '<cardType>REDACTED</cardType>' in transaction.raw_response
    assert '<cardToken>REDACTED</cardToken>' in transaction.raw_response

    # Test that token saved to vault properly
    assert token.token == 'abcdefghijklmnopqrstuvw'
    assert token.token_f4l4 == '11114444'
    assert token.cc_type == 'MasterCard'
    assert token.customer_code == 'CST1000'
    assert token.django_user is None
Exemple #5
0
    def handle_payment(self, order_number, total, **kwargs):  # pylint: disable=unused-argument
        """Submit payment details to the Helcim Commerce API."""
        # Extract all payment details
        token_id = kwargs.get('token_id', None)
        card_details = kwargs.get('bankcard', None)
        billing_address = kwargs.get('billing_address', None)

        if billing_address:
            save_token = billing_address.get('save_card', False)
        else:
            save_token = False

        # Make a purchase request to the Helcim Commerce API
        purchase = bridge_oscar.PurchaseBridge(
            amount=total.incl_tax,
            token_id=token_id,
            card=card_details,
            billing_address=billing_address,
            save_token=save_token,
            django_user=self.request.user,
        )
        purchase_instance, token_instance = purchase.process()

        if token_instance:
            payment_source = token_instance.cc_type
        elif purchase_instance.cc_type:
            payment_source = purchase_instance.cc_type
        else:
            payment_source = 'credit card'

        # Record payment source and event
        source_type, _ = oscar_payment_models.SourceType.objects.get_or_create(
            name=payment_source)

        source = source_type.sources.model(
            source_type=source_type,
            amount_allocated=total.incl_tax,
            currency=total.currency,
        )
        self.add_payment_source(source)
        self.add_payment_event('Authorised', total.incl_tax)
Exemple #6
0
def test_purchase_bridge_django_error():
    purchase = bridge_oscar.PurchaseBridge('1', card=MockCreditCard())

    purchase_instance = purchase.process()

    assert purchase_instance is None