add send cert reporting

This commit is contained in:
2025-10-12 01:09:40 -03:00
parent c9438d49fb
commit 8d10f55ad2
20 changed files with 435 additions and 55 deletions

View File

@@ -0,0 +1,66 @@
from datetime import timedelta
import app.events.cert_reporting.append_issued_cert as app
from aws_lambda_powertools.utilities.typing import LambdaContext
from layercake.dateutils import now
from layercake.dynamodb import (
DynamoDBPersistenceLayer,
SortKey,
TransactKey,
)
def test_append_issued_cert(
seeds,
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
lambda_context: LambdaContext,
):
expires_at = now() + timedelta(days=360)
event = {
'detail': {
'new_image': {
'id': 'e45019d8-be7a-4a82-9b37-12a01f0127bb',
'sk': '0',
'course': {
'id': '431',
'name': 'How to Sing Better',
},
'cert': {
# 'expires_at': '2026-02-10T20:14:42.880991',
'expires_at': expires_at.isoformat(),
},
'user': {
'id': '1234',
'name': 'Tobias Summit',
},
'org_id': '1e2eaf0e-e319-49eb-ab33-1ddec156dc94',
'created_at': '2025-01-01T00:00:00-03:06',
'completed_at': '2025-01-10T00:00:00-03:06',
}
}
}
assert app.lambda_handler(event, lambda_context) # type: ignore
# The reporting month is the month before the certificate expires
month_start = (expires_at.replace(day=1) - timedelta(days=1)).replace(day=1)
report_sk = 'MONTH#{}#SCHEDULE#SEND_REPORT_EMAIL'.format(
month_start.strftime('%Y-%m')
)
r = dynamodb_persistence_layer.collection.get_items(
TransactKey('CERT#REPORTING#ORG#1e2eaf0e-e319-49eb-ab33-1ddec156dc94')
+ SortKey(
sk=report_sk,
rename_key='report_email',
)
+ SortKey(
sk='MONTH#{}#ENROLLMENT#e45019d8-be7a-4a82-9b37-12a01f0127bb'.format(
expires_at.strftime('%Y-%m')
),
rename_key='enrollment',
),
flatten_top=False,
)
assert 'course' in r['enrollment']
assert 'ttl' in r['report_email']

View File

@@ -0,0 +1,25 @@
import app.events.cert_reporting.send_report_email as app
from aws_lambda_powertools.utilities.typing import LambdaContext
from layercake.dynamodb import (
DynamoDBPersistenceLayer,
)
def test_send_report_email(
monkeypatch,
seeds,
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
lambda_context: LambdaContext,
):
event = {
'detail': {
'old_image': {
'id': 'CERT#REPORTING#ORG#00237409-9384-4692-9be5-b4443a41e1c4',
'sk': 'MONTH#2025-06#SCHEDULE#SEND_REPORT_EMAIL',
'target_month': '2025-07',
},
}
}
monkeypatch.setattr(app.sesv2_client, 'send_email', lambda *args, **kwargs: ...)
assert app.lambda_handler(event, lambda_context) # type: ignore

View File

@@ -35,4 +35,4 @@ def test_issue_cert(
key=KeyPair('1ee108ae-67d4-4545-bf6d-4e641cdaa4e0', '0')
)
assert 'issued_cert' in r
assert 'cert' in r

View File

@@ -29,7 +29,7 @@ def test_set_cert_expired(
)
assert r['status'] == 'COMPLETED'
assert 'executed' in r
assert 'issued_cert' in r
assert 'cert' in r
def test_existing_issued_cert(
@@ -50,4 +50,4 @@ def test_existing_issued_cert(
r = dynamodb_persistence_layer.collection.get_items(
TransactKey('1ee108ae-67d4-4545-bf6d-4e641cdaa4e0') + SortKey('0')
)
assert 's3_uri' in r['issued_cert']
assert 's3_uri' in r['cert']