diff --git a/cuenca_validations/types/enums.py b/cuenca_validations/types/enums.py index 6d36a4c1..d29f096b 100644 --- a/cuenca_validations/types/enums.py +++ b/cuenca_validations/types/enums.py @@ -588,6 +588,7 @@ class SessionType(str, Enum): account_entries = 'session.account_entries' download_file = 'session.download_file' upload_file = 'session.upload_file' + onboarding_verification = 'session.onboarding_verification' class WebhookObject(str, Enum): diff --git a/cuenca_validations/types/requests.py b/cuenca_validations/types/requests.py index f74216b3..f67b9024 100644 --- a/cuenca_validations/types/requests.py +++ b/cuenca_validations/types/requests.py @@ -547,6 +547,16 @@ class SessionRequest(BaseRequest): type: SessionType success_url: Optional[SerializableAnyUrl] = None failure_url: Optional[SerializableAnyUrl] = None + resource_id: Optional[str] = None + + @model_validator(mode='before') + @classmethod + def validate_metadata(cls, values: dict) -> dict: + type, resource_id = values['type'], values.get('resource_id') + if type == SessionType.onboarding_verification and not resource_id: + raise ValueError('Resource id expected for this session') + return values + model_config = ConfigDict( json_schema_extra={ 'example': { @@ -554,6 +564,7 @@ class SessionRequest(BaseRequest): 'type': 'session.registration', 'success_url': 'http://example_success.com', 'failure_url': 'http://example_failure.com', + 'resource_id': 'some_resource_id', } } ) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 1db5030e..96f86229 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16' +__version__ = '2.1.17' diff --git a/tests/test_requests.py b/tests/test_requests.py index 95446313..447198d4 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1,7 +1,11 @@ import pytest from pydantic import ValidationError -from cuenca_validations.types.requests import UserTOSAgreementRequest +from cuenca_validations.types.enums import SessionType +from cuenca_validations.types.requests import ( + SessionRequest, + UserTOSAgreementRequest, +) from cuenca_validations.typing import DictStrAny @@ -29,3 +33,38 @@ def test_file_cuenca_url_invalid() -> None: ) with pytest.raises(ValidationError): UserTOSAgreementRequest(**request_data) + + +def test_session_request_without_metadata(): + request_data = { + 'user_id': 'USWqY5cvkISJOxHyEKjAKf8w', + 'type': 'session.curp_validation', + } + request = SessionRequest(**request_data) + assert request.type == SessionType.curp_validation + assert request.user_id == 'USWqY5cvkISJOxHyEKjAKf8w' + + +def test_session_request_with_resource_id(): + request_data = { + 'user_id': 'USWqY5cvkISJOxHyEKjAKf8w', + 'type': 'session.onboarding_verification', + 'resource_id': 'some_verification_id', + } + request = SessionRequest(**request_data) + assert request.type == SessionType.onboarding_verification + assert request.user_id == 'USWqY5cvkISJOxHyEKjAKf8w' + assert request.resource_id + assert request.resource_id == 'some_verification_id' + + +def test_metamap_session_request_without_metadata(): + request_data = { + 'user_id': 'USWqY5cvkISJOxHyEKjAKf8w', + 'type': 'session.onboarding_verification', + } + + with pytest.raises(ValidationError) as exception: + SessionRequest(**request_data) + + assert 'Resource id expected for this session' in str(exception)