add middleware

This commit is contained in:
2025-04-02 13:43:10 -03:00
parent 3a799fbbd1
commit 8cd755f0ae
14 changed files with 213 additions and 93 deletions

View File

@@ -143,7 +143,7 @@ def dynamodb_seeds(dynamodb_client):
@pytest.fixture
def mock_app(monkeypatch):
def mock_app():
import app
return app

View File

@@ -5,9 +5,12 @@ from layercake.dynamodb import ComposeKey, DynamoDBCollection, PartitionKey
from ..conftest import HttpApiProxy, LambdaContext
YEAR_DAYS = 365
def test_post_course(
mock_app,
dynamodb_seeds,
dynamodb_persistence_layer,
http_api_proxy: HttpApiProxy,
lambda_context: LambdaContext,
@@ -19,9 +22,9 @@ def test_post_course(
headers={'X-Tenant': '*'},
body={
'name': 'pytest',
'access_period': 365,
'access_period': YEAR_DAYS,
'cert': {
'exp_interval': 730, # 2 years
'exp_interval': YEAR_DAYS * 2,
},
},
),
@@ -35,6 +38,6 @@ def test_post_course(
collect = DynamoDBCollection(dynamodb_persistence_layer)
logs = collect.get_items(
PartitionKey(ComposeKey('5OxmMjL-ujoR5IMGegQz', prefix='logs'))
PartitionKey(ComposeKey('5OxmMjL-ujoR5IMGegQz', prefix='log', delimiter=':'))
)
print(logs)

View File

@@ -36,9 +36,9 @@ def test_settings(
],
'tenants': [
{
'sk': 'cJtK9SsnJhKPyxESe7g3DG',
'sk': '0',
'name': 'Beta Educação',
'id': '5OxmMjL-ujoR5IMGegQz',
'id': 'cJtK9SsnJhKPyxESe7g3DG',
'cnpj': '15608435000190',
'create_date': '2025-03-13T16:36:50.073156-03:00',
}

View File

@@ -7,3 +7,4 @@
{"id": {"S": "5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "orgs#cJtK9SsnJhKPyxESe7g3DG"}, "cnpj": {"S": "15608435000190"}, "create_date": {"S": "2025-03-13T16:36:50.073156-03:00"}, "name": {"S": "Beta Educação"}}
{"id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "2024-02-08T16:42:33.776409-03:00"}, "action": {"S": "OPEN_EMAIL"}}
{"id": {"S": "log:5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "2019-03-25T00:00:00-03:00"}, "action": {"S": "CLICK_EMAIL"}}
{"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "0"}, "name": {"S": "EDUSEG"}, "cnpj": {"S": "15608435000190"}}

View File

@@ -1,31 +1,59 @@
from http import HTTPMethod
import pytest
from aws_lambda_powertools.event_handler.api_gateway import APIGatewayHttpResolver
from layercake.dynamodb import DynamoDBCollection, DynamoDBPersistenceLayer
from middlewares import TenantMiddleware
from middlewares import AuthorizerMiddleware, TenantMiddleware
from .conftest import HttpApiProxy, LambdaContext
def test_eval(
@pytest.fixture
def mock_app(dynamodb_persistence_layer: DynamoDBPersistenceLayer):
collect = DynamoDBCollection(dynamodb_persistence_layer)
app = APIGatewayHttpResolver()
app.use(middlewares=[AuthorizerMiddleware(), TenantMiddleware(collect)])
@app.get('/')
def index():
return app.context.get('tenant')
return app
def test_tenant_user_auth(
mock_app,
dynamodb_seeds,
http_api_proxy: HttpApiProxy,
lambda_context: LambdaContext,
):
app = APIGatewayHttpResolver()
app.use(middlewares=[TenantMiddleware()])
@app.get('/')
def index():
return {}
result = app(
# This data was added from seeds
result = mock_app(
http_api_proxy(
raw_path='/',
method=HTTPMethod.GET,
headers={'Tenant': 'cJtK9SsnJhKPyxESe7g3DG'},
headers={'X-Tenant': 'cJtK9SsnJhKPyxESe7g3DG'},
),
lambda_context,
)
assert result['body'] == '{"id":"cJtK9SsnJhKPyxESe7g3DG","name":"EDUSEG"}'
assert result['statusCode'] == 200
def test_tenant_forbidden(
mock_app,
http_api_proxy: HttpApiProxy,
lambda_context: LambdaContext,
):
result = mock_app(
http_api_proxy(
raw_path='/',
method=HTTPMethod.GET,
headers={'X-Tenant': 'abc'},
),
lambda_context,
)
assert result['statusCode'] == 403