from http import HTTPMethod, HTTPStatus from layercake.dynamodb import ( DynamoDBPersistenceLayer, SortKey, TransactKey, ) from ...conftest import HttpApiProxy, LambdaContext def test_payment_retries( app, seeds, http_api_proxy: HttpApiProxy, dynamodb_persistence_layer: DynamoDBPersistenceLayer, lambda_context: LambdaContext, ): r = app.lambda_handler( http_api_proxy( raw_path='/orders/4b23f6f5-5377-476b-b1de-79427c0295f6/payment-retries', method=HTTPMethod.POST, body={ 'invoice_id': '123', 'credit_card': { 'holder_name': 'Sergio R Siqueira', 'number': '4111111111111111', 'exp_month': '01', 'exp_year': '2026', 'cvv': '123', }, 'installments': 3, }, ), lambda_context, ) assert r['statusCode'] == HTTPStatus.CREATED r = dynamodb_persistence_layer.collection.get_items( TransactKey('4b23f6f5-5377-476b-b1de-79427c0295f6') + SortKey('TRANSACTION') + SortKey( 'CREDIT_CARD', rename_key='cc', ) + SortKey( 'TRANSACTION#STATS', rename_key='stats', ), ) assert r['credit_card']['number'] == '4111111111111111' assert 'last_attempt_succeeded' not in r['stats'] assert r['cc']['last4'] == '1111' assert r['cc']['brand'] == 'Visa'