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
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
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
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)
def test_purchase_bridge_django_error(): purchase = bridge_oscar.PurchaseBridge('1', card=MockCreditCard()) purchase_instance = purchase.process() assert purchase_instance is None