70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
from aws_lambda_powertools.utilities.typing import LambdaContext
|
|
from layercake.dateutils import now
|
|
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair
|
|
|
|
import events.billing.cancel_enrollment as app
|
|
from utils import get_billing_period
|
|
|
|
enrollment_id = '77055ad7-03e1-4b07-98dc-a2f1a90913ba'
|
|
event = {
|
|
'detail': {
|
|
'new_image': {
|
|
'id': enrollment_id,
|
|
'sk': '0',
|
|
'user': {
|
|
'id': '5OxmMjL-ujoR5IMGegQz',
|
|
'name': 'Sérgio R Siqueira',
|
|
},
|
|
'course': {
|
|
'id': '123',
|
|
'name': 'pytest',
|
|
},
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
def test_cancel_enrollment(
|
|
dynamodb_seeds,
|
|
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
|
|
lambda_context: LambdaContext,
|
|
):
|
|
now_ = now()
|
|
start_date, end_date = get_billing_period(
|
|
billing_day=6,
|
|
date_=now_,
|
|
)
|
|
pk = 'BILLING#ORG#cJtK9SsnJhKPyxESe7g3DG'
|
|
sk = 'START#{start}#END#{end}#ENROLLMENT#{enrollment_id}'.format(
|
|
start=start_date.isoformat(),
|
|
end=end_date.isoformat(),
|
|
enrollment_id=enrollment_id,
|
|
)
|
|
# Add up-to-date enrollment item to billing
|
|
dynamodb_persistence_layer.put_item(
|
|
item={
|
|
'id': pk,
|
|
'sk': sk,
|
|
'unit_price': 100,
|
|
'course': {'id': '123', 'name': 'pytest'},
|
|
'user': {'id': '5OxmMjL-ujoR5IMGegQz', 'name': 'Sérgio R Siqueira'},
|
|
'enrolled_at': now_,
|
|
}
|
|
)
|
|
|
|
event['detail']['new_image']['create_date'] = now_.isoformat()
|
|
assert app.lambda_handler(event, lambda_context) # type: ignore
|
|
|
|
r = dynamodb_persistence_layer.collection.query(KeyPair(pk, sk))
|
|
assert len(r['items']) == 2
|
|
assert sum(x['unit_price'] for x in r['items']) == 0
|
|
|
|
|
|
def test_cancel_old_enrollment(
|
|
dynamodb_seeds,
|
|
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
|
|
lambda_context: LambdaContext,
|
|
):
|
|
event['detail']['new_image']['create_date'] = '2025-06-05T12:13:54.371416+00:00'
|
|
assert not app.lambda_handler(event, lambda_context) # type: ignore
|