Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions cuenca_validations/types/requests.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import datetime as dt
from typing import Annotated, Any, Optional, Union

from clabe import Clabe
from clabe import BANK_NAMES, Clabe
from pydantic import (
BaseModel,
ConfigDict,
Expand Down Expand Up @@ -326,10 +326,24 @@ class WalletTransactionRequest(BaseRequest):

class FraudFundsTransferRequest(BaseRequest):
user_id: NonEmptyStr
clabe: Clabe
clabe: Optional[Clabe] = None
bank_code: Optional[str] = None
amount: Optional[StrictPositiveInt] = None
concepto: Optional[NonEmptyStr] = None

@field_validator('bank_code')
@classmethod
def validate_bank_code(cls, bank_code: Optional[str]) -> Optional[str]:
if bank_code is not None and bank_code not in BANK_NAMES:
raise ValueError('Not a valid bank code')
return bank_code

@model_validator(mode='after')
def validate_destination(self) -> 'FraudFundsTransferRequest':
if self.clabe is None and self.bank_code is None:
raise ValueError('clabe or bank_code required')
return self


class FraudValidationRequest(BaseModel):
amount: StrictPositiveInt
Expand Down
2 changes: 1 addition & 1 deletion cuenca_validations/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '2.1.37'
__version__ = '2.1.38'
30 changes: 9 additions & 21 deletions tests/test_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -676,30 +676,18 @@ def test_bank_account_validation_clabe_request():


def test_fraud_funds_transfer_request():
request = FraudFundsTransferRequest(
assert FraudFundsTransferRequest(
user_id='US123',
clabe='646180157098510917',
amount=10000,
concepto=' Devolución fraude ',
)

assert request.concepto == 'Devolución fraude'
assert request.model_dump() == {
'user_id': 'US123',
'clabe': '646180157098510917',
'amount': 10000,
'concepto': 'Devolución fraude',
}
bank_code='40012',
).model_dump() == {'user_id': 'US123', 'bank_code': '40012'}

request_full_balance = FraudFundsTransferRequest(
user_id='US123',
clabe='646180157098510917',
)
with pytest.raises(ValidationError) as exc:
FraudFundsTransferRequest(user_id='US123')
assert 'clabe or bank_code required' in str(exc.value)

assert request_full_balance.model_dump() == {
'user_id': 'US123',
'clabe': '646180157098510917',
}
with pytest.raises(ValidationError) as exc:
FraudFundsTransferRequest(user_id='US123', bank_code='99999')
assert 'Not a valid bank code' in str(exc.value)


@pytest.mark.parametrize(
Expand Down
Loading