cuenca-validations 2.1.36.dev0__py3-none-any.whl → 2.1.36.dev2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,10 +44,7 @@ __all__ = [
44
44
  'FileBatchUploadRequest',
45
45
  'FileRequest',
46
46
  'FileUploadRequest',
47
- 'FraudFundsTransferErrorResponse',
48
- 'FraudFundsTransferReasonCode',
49
47
  'FraudFundsTransferRequest',
50
- 'FraudFundsTransferSuccessResponse',
51
48
  'Gender',
52
49
  'IncomeType',
53
50
  'IssuerNetwork',
@@ -95,6 +92,7 @@ __all__ = [
95
92
  'TransferNetwork',
96
93
  'TransferQuery',
97
94
  'TransferRequest',
95
+ 'UpdateTransferRequest',
98
96
  'UserCardNotification',
99
97
  'UserCredentialRequest',
100
98
  'UserCredentialUpdateRequest',
@@ -147,7 +145,6 @@ from .enums import (
147
145
  EventType,
148
146
  FileExtension,
149
147
  FileFormat,
150
- FraudFundsTransferReasonCode,
151
148
  Gender,
152
149
  IncomeType,
153
150
  IssuerNetwork,
@@ -235,9 +232,7 @@ from .requests import (
235
232
  FileBatchUploadRequest,
236
233
  FileRequest,
237
234
  FileUploadRequest,
238
- FraudFundsTransferErrorResponse,
239
235
  FraudFundsTransferRequest,
240
- FraudFundsTransferSuccessResponse,
241
236
  KYCValidationRequest,
242
237
  LimitedWalletRequest,
243
238
  PartnerRequest,
@@ -251,6 +246,7 @@ from .requests import (
251
246
  StrictTransferRequest,
252
247
  TOSRequest,
253
248
  TransferRequest,
249
+ UpdateTransferRequest,
254
250
  UserCredentialRequest,
255
251
  UserCredentialUpdateRequest,
256
252
  UserListsRequest,
@@ -79,14 +79,6 @@ class TransactionStatus(str, Enum):
79
79
  failed = 'failed'
80
80
 
81
81
 
82
- class FraudFundsTransferReasonCode(str, Enum):
83
- user_not_found = 'USER_NOT_FOUND'
84
- user_not_fraud_blocked = 'USER_NOT_FRAUD_BLOCKED'
85
- insufficient_funds = 'INSUFFICIENT_FUNDS'
86
- clabe_invalid = 'CLABE_INVALID'
87
- internal_error = 'INTERNAL_ERROR'
88
-
89
-
90
82
  class TransferNetwork(str, Enum):
91
83
  internal = 'internal'
92
84
  spei = 'spei'
@@ -29,7 +29,6 @@ from ..types.enums import (
29
29
  Country,
30
30
  EcommerceIndicator,
31
31
  FileExtension,
32
- FraudFundsTransferReasonCode,
33
32
  Gender,
34
33
  IncomeType,
35
34
  IssuerNetwork,
@@ -46,6 +45,7 @@ from ..types.enums import (
46
45
  State,
47
46
  TermsOfService,
48
47
  TrackDataMethod,
48
+ TransactionStatus,
49
49
  TransactionTokenValidationStatus,
50
50
  UserCardNotification,
51
51
  UserStatus,
@@ -155,6 +155,20 @@ class StrictTransferRequest(BaseTransferRequest):
155
155
  )
156
156
 
157
157
 
158
+ class UpdateTransferRequest(BaseRequest):
159
+ status: TransactionStatus
160
+
161
+ @field_validator('status')
162
+ @classmethod
163
+ def validate_status(cls, status: TransactionStatus) -> TransactionStatus:
164
+ if status not in (
165
+ TransactionStatus.succeeded,
166
+ TransactionStatus.failed,
167
+ ):
168
+ raise ValueError('status must be succeeded or failed')
169
+ return status
170
+
171
+
158
172
  class CardUpdateRequest(BaseRequest):
159
173
  status: Optional[CardStatus] = None
160
174
  pin_block: Optional[str] = None
@@ -318,17 +332,6 @@ class FraudFundsTransferRequest(BaseRequest):
318
332
  concepto: Optional[NonEmptyStr] = None
319
333
 
320
334
 
321
- class FraudFundsTransferSuccessResponse(BaseRequest):
322
- transaction_id: NonEmptyStr
323
- amount: StrictPositiveInt
324
- clave_rastreo: NonEmptyStr
325
-
326
-
327
- class FraudFundsTransferErrorResponse(BaseRequest):
328
- reason_code: FraudFundsTransferReasonCode
329
- message: NonEmptyStr
330
-
331
-
332
335
  class FraudValidationRequest(BaseModel):
333
336
  amount: StrictPositiveInt
334
337
  merchant_name: str
@@ -1 +1 @@
1
- __version__ = '2.1.36.dev0'
1
+ __version__ = '2.1.36.dev2'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca_validations
3
- Version: 2.1.36.dev0
3
+ Version: 2.1.36.dev2
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -4,27 +4,27 @@ cuenca_validations/errors.py,sha256=OtM8EgiKqYdz9Hn66AbBO96orL1or7efkyt0vh0Zxbs,
4
4
  cuenca_validations/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  cuenca_validations/typing.py,sha256=1QCu81IbVZZpyInjyeAuO-nF36gpT5Gi4o6V9PozuOU,204
6
6
  cuenca_validations/validators.py,sha256=zXSnU5-EMbQZBD-PfFXgP4Z6G7cm7KFDWXB7Nie6WUk,2682
7
- cuenca_validations/version.py,sha256=ZTTZbKLgrsc7eKRxJttcvmfXh67hnvcRwc_ZNNFFnTk,28
8
- cuenca_validations/types/__init__.py,sha256=hvnj0A-oxSr6hBxuAELHhoHeE6VvXZ2QXIRO7Sw3EeA,5809
7
+ cuenca_validations/version.py,sha256=WIz7YMhSrFreIschm55z4lJEJeEAUIUXVml8_PIbVck,28
8
+ cuenca_validations/types/__init__.py,sha256=BZNEJKcQ6dlIVtOWrU-7hAFs9j_-Qi5V_VuG9FLjz3w,5639
9
9
  cuenca_validations/types/card.py,sha256=UGzz8NTFAverUmdUKAK1oGHnOnjSNTpIRUm93vKSSGY,1295
10
- cuenca_validations/types/enums.py,sha256=we9to83E3QGcx29rKXVGCPkAmB7T9r1YcGu58dvkamQ,20847
10
+ cuenca_validations/types/enums.py,sha256=f-qMUdxLZsAqRvEwh3EcUsB2K-loufvPzdcK0JFQ1JY,20586
11
11
  cuenca_validations/types/files.py,sha256=2CszbwF9ytXV9suFFwyDjYG4XxY8UhCjRw3HttVXXNw,269
12
12
  cuenca_validations/types/general.py,sha256=eYFYwyx_a4_J480GYpqW3DFbZabDFcUjvLRMQbShIUc,5622
13
13
  cuenca_validations/types/helpers.py,sha256=4veeLZbugHHqZk0ezSim978VhH6Vq8XTrEhe1eE_r3A,1531
14
14
  cuenca_validations/types/identities.py,sha256=j2xxh3UYHJe6IbAwr9yNXJkebTth_-g3SUmHeiPez8M,5513
15
15
  cuenca_validations/types/morals.py,sha256=davabh5hAnFVQyM7-yCyDaT5ewXnm0cr1BtqDIwzkX8,1833
16
16
  cuenca_validations/types/queries.py,sha256=iVr6Z8ahXon0rlqQLu7aqRY6WtRxkN-1C7A2zeVt2-4,5314
17
- cuenca_validations/types/requests.py,sha256=-PmmTHNGHXKq4wf5qN3tUMgczlsHmS8DUyx5vlY3bCE,24544
18
- cuenca_validations-2.1.36.dev0.dist-info/licenses/LICENSE,sha256=wR76FmxBbfnQpwELkkE5iMF8sFIafEMgXLTE4N4WPTc,1063
17
+ cuenca_validations/types/requests.py,sha256=hGEwecuBv6e5dWODcuhMC-LiKAxQaOnWUyPvkIrYMwg,24666
18
+ cuenca_validations-2.1.36.dev2.dist-info/licenses/LICENSE,sha256=wR76FmxBbfnQpwELkkE5iMF8sFIafEMgXLTE4N4WPTc,1063
19
19
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  tests/test_card.py,sha256=QAfRz7e11gWICPnFJZ2tiYgUsFV3C9TwzJXrDnDNXFw,1202
21
21
  tests/test_errors.py,sha256=ixiIgEuBuzfsL5p4uCFdF32XqFRtTPF6EVhGJ0keOrI,930
22
22
  tests/test_helpers.py,sha256=fx2R7y6oQO8XeQzevJe826NuHkBgvtznZicomchB3Gg,899
23
- tests/test_requests.py,sha256=lQgOPjLsogpMphl5wg--vxj9JF2DJF0A2DzQVG5dOEU,3072
23
+ tests/test_requests.py,sha256=3XMx2A-BK21g1Exm4RTVm6eKTOzeZH-8FzKJXQmmMmA,4141
24
24
  tests/test_statement.py,sha256=IOE0rRRBgBZSJv_FLaETEyn5NzzXKMNTqgjv99GX-68,1436
25
- tests/test_types.py,sha256=xPBOWsz-VFT8CxfwCAulLshkZKZkIJTjZP40GxwsLgI,23019
25
+ tests/test_types.py,sha256=krrkBaPv3ESTlZG5UBROhyGha_i-abiha-OrdvF2yDg,22332
26
26
  tests/test_validators.py,sha256=Jjr9gWTT4cRntGiKvQK4fncqx3JkEuTWkKm1VqpRHTs,1829
27
- cuenca_validations-2.1.36.dev0.dist-info/METADATA,sha256=VuMgdvHupkIGPO8H-y5rCOjT9H_hSjhzQ129_VHvIOU,1600
28
- cuenca_validations-2.1.36.dev0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
29
- cuenca_validations-2.1.36.dev0.dist-info/top_level.txt,sha256=4233xdOs2HtuT-GFRjcDcwK0IwdwvWdczOtk0fPB6Gw,25
30
- cuenca_validations-2.1.36.dev0.dist-info/RECORD,,
27
+ cuenca_validations-2.1.36.dev2.dist-info/METADATA,sha256=XYggwl0kWMSMPSUK_5bKe20XXudsbuf2OWf1362zliM,1600
28
+ cuenca_validations-2.1.36.dev2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
29
+ cuenca_validations-2.1.36.dev2.dist-info/top_level.txt,sha256=4233xdOs2HtuT-GFRjcDcwK0IwdwvWdczOtk0fPB6Gw,25
30
+ cuenca_validations-2.1.36.dev2.dist-info/RECORD,,
tests/test_requests.py CHANGED
@@ -5,6 +5,7 @@ from pydantic_extra_types.phone_numbers import PhoneNumber
5
5
  from cuenca_validations.types.enums import VerificationType
6
6
  from cuenca_validations.types.requests import (
7
7
  PasswordResetRequest,
8
+ UpdateTransferRequest,
8
9
  UserTOSAgreementRequest,
9
10
  UserUpdateRequest,
10
11
  VerificationRequest,
@@ -94,3 +95,31 @@ def test_user_update_request_normalizes_email() -> None:
94
95
  def test_user_update_request_normalizes_phone() -> None:
95
96
  req = UserUpdateRequest(phone_number=PhoneNumber('+116504401222'))
96
97
  assert req.phone_number == '+16504401222'
98
+
99
+
100
+ @pytest.mark.parametrize('status', ['succeeded', 'failed'])
101
+ def test_update_transfer_request_valid_status(status: str) -> None:
102
+ req = UpdateTransferRequest.model_validate({'status': status})
103
+ assert req.status == status
104
+ assert req.model_dump() == {'status': status}
105
+
106
+
107
+ @pytest.mark.parametrize('status', ['created', 'submitted', 'in_review'])
108
+ def test_update_transfer_request_invalid_status(status: str) -> None:
109
+ with pytest.raises(ValidationError) as ex:
110
+ UpdateTransferRequest.model_validate({'status': status})
111
+ assert 'status' in str(ex.value)
112
+
113
+
114
+ def test_update_transfer_request_missing_status() -> None:
115
+ with pytest.raises(ValidationError) as ex:
116
+ UpdateTransferRequest.model_validate({})
117
+ assert 'status' in str(ex.value)
118
+
119
+
120
+ def test_update_transfer_request_forbids_extra() -> None:
121
+ with pytest.raises(ValidationError) as ex:
122
+ UpdateTransferRequest.model_validate(
123
+ {'status': 'succeeded', 'foo': 'bar'}
124
+ )
125
+ assert 'Extra inputs are not permitted' in str(ex.value)
tests/test_types.py CHANGED
@@ -12,10 +12,7 @@ from pydantic.fields import FieldInfo
12
12
 
13
13
  from cuenca_validations.types import (
14
14
  CardQuery,
15
- FraudFundsTransferErrorResponse,
16
- FraudFundsTransferReasonCode,
17
15
  FraudFundsTransferRequest,
18
- FraudFundsTransferSuccessResponse,
19
16
  JSONEncoder,
20
17
  QueryParams,
21
18
  SantizedDict,
@@ -640,7 +637,7 @@ def test_bank_account_validation_clabe_request():
640
637
  assert BankAccountValidationRequest(account_number='646180157098510917')
641
638
 
642
639
 
643
- def test_fraud_funds_transfer_models():
640
+ def test_fraud_funds_transfer_request():
644
641
  request = FraudFundsTransferRequest(
645
642
  request_id='f0a2b3-request-hash',
646
643
  user_id='US123',
@@ -670,28 +667,6 @@ def test_fraud_funds_transfer_models():
670
667
  'clabe': '646180157098510917',
671
668
  }
672
669
 
673
- success = FraudFundsTransferSuccessResponse(
674
- transaction_id='SP123',
675
- amount=10000,
676
- clave_rastreo='CUENCA123',
677
- )
678
-
679
- assert success.model_dump() == {
680
- 'transaction_id': 'SP123',
681
- 'amount': 10000,
682
- 'clave_rastreo': 'CUENCA123',
683
- }
684
-
685
- error = FraudFundsTransferErrorResponse(
686
- reason_code=FraudFundsTransferReasonCode.insufficient_funds,
687
- message='Fondos insuficientes',
688
- )
689
-
690
- assert error.model_dump() == {
691
- 'reason_code': 'INSUFFICIENT_FUNDS',
692
- 'message': 'Fondos insuficientes',
693
- }
694
-
695
670
 
696
671
  @pytest.mark.parametrize(
697
672
  'input_data',