add iugu postback

This commit is contained in:
2026-01-12 23:30:52 -03:00
parent 29b8305713
commit ad23e9aa51
25 changed files with 191 additions and 29 deletions

View File

@@ -1,5 +1,9 @@
import base64
import json
import os
from dataclasses import dataclass
from http import HTTPMethod
from urllib.parse import urlencode
import jsonlines
import pytest
@@ -35,6 +39,87 @@ def lambda_context() -> LambdaContext:
return LambdaContext()
class HttpApiProxy:
def __call__(
self,
raw_path: str,
method: str = HTTPMethod.GET,
body: dict | str | None = None,
*,
headers: dict = {},
cookies: list[str] = [],
query_string_parameters: dict = {},
is_base64_encoded: bool = True,
**kwargs,
) -> dict:
if isinstance(body, dict):
body = json.dumps(body)
if is_base64_encoded and body:
body = _base64_encode(body)
return {
'version': '2.0',
'routeKey': '$default',
'rawPath': raw_path,
'rawQueryString': urlencode(query_string_parameters),
'cookies': cookies,
'headers': headers,
'queryStringParameters': query_string_parameters,
'requestContext': {
'accountId': '123456789012',
'apiId': 'api-id',
'authorizer': {
'jwt': {
'claims': {
'aud': '1db63660-063d-4280-b2ea-388aca4a9459',
'client_id': '1db63660-063d-4280-b2ea-388aca4a9459',
'email': 'sergio@somosbeta.com.br',
'email_verified': 'true',
'exp': '1765205975',
'iat': '1765202375',
'iss': 'https://id.saladeaula.digital',
'jti': 'Fbbyvwwze3npdEgs',
'name': 'Sérgio R Siqueira',
'scope': 'openid profile email offline_access apps:admin',
'sub': '5OxmMjL-ujoR5IMGegQz',
},
'scopes': None,
}
},
'domainName': 'id.execute-api.us-east-1.amazonaws.com',
'domainPrefix': 'id',
'http': {
'method': str(method),
'path': raw_path,
'protocol': 'HTTP/1.1',
'sourceIp': '192.168.0.1/32',
'userAgent': 'agent',
},
'requestId': 'id',
'routeKey': '$default',
'stage': '$default',
'time': '12/Mar/2020:19:03:58 +0000',
'timeEpoch': 1583348638390,
},
'body': body,
'pathParameters': {'parameter1': 'value1'},
'isBase64Encoded': is_base64_encoded,
'stageVariables': {'stageVariable1': 'value1', 'stageVariable2': 'value2'},
}
def _base64_encode(s: str) -> str | None:
if not s:
return None
return base64.b64encode(s.encode()).decode()
@pytest.fixture
def http_api_proxy():
return HttpApiProxy()
@pytest.fixture
def dynamodb_client():
from boto3clients import dynamodb_client as client
@@ -74,3 +159,10 @@ def dynamodb_seeds(dynamodb_persistence_layer):
for line in reader.iter(type=dict, skip_invalid=True):
dynamodb_persistence_layer.put_item(item=line)
@pytest.fixture
def app():
import app
return app