cuenca-validations 2.1.36.dev0__py3-none-any.whl → 2.1.36.dev1__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.
@@ -95,6 +95,7 @@ __all__ = [
95
95
  'TransferNetwork',
96
96
  'TransferQuery',
97
97
  'TransferRequest',
98
+ 'UpdateTransferRequest',
98
99
  'UserCardNotification',
99
100
  'UserCredentialRequest',
100
101
  'UserCredentialUpdateRequest',
@@ -251,6 +252,7 @@ from .requests import (
251
252
  StrictTransferRequest,
252
253
  TOSRequest,
253
254
  TransferRequest,
255
+ UpdateTransferRequest,
254
256
  UserCredentialRequest,
255
257
  UserCredentialUpdateRequest,
256
258
  UserListsRequest,
@@ -46,6 +46,7 @@ from ..types.enums import (
46
46
  State,
47
47
  TermsOfService,
48
48
  TrackDataMethod,
49
+ TransactionStatus,
49
50
  TransactionTokenValidationStatus,
50
51
  UserCardNotification,
51
52
  UserStatus,
@@ -155,6 +156,20 @@ class StrictTransferRequest(BaseTransferRequest):
155
156
  )
156
157
 
157
158
 
159
+ class UpdateTransferRequest(BaseRequest):
160
+ status: TransactionStatus
161
+
162
+ @field_validator('status')
163
+ @classmethod
164
+ def validate_status(cls, status: TransactionStatus) -> TransactionStatus:
165
+ if status not in (
166
+ TransactionStatus.succeeded,
167
+ TransactionStatus.failed,
168
+ ):
169
+ raise ValueError('status must be succeeded or failed')
170
+ return status
171
+
172
+
158
173
  class CardUpdateRequest(BaseRequest):
159
174
  status: Optional[CardStatus] = None
160
175
  pin_block: Optional[str] = None
@@ -1 +1 @@
1
- __version__ = '2.1.36.dev0'
1
+ __version__ = '2.1.36.dev1'
@@ -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.dev1
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -4,8 +4,8 @@ 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=FJNg7KGE0elXqQ1OIRtnCHRjehKbkbLbjTnQfBBXmqk,28
8
+ cuenca_validations/types/__init__.py,sha256=0PdtQeVI1_LpXHru7yha9ATlzQ9IXUf96SPC3OClfNs,5865
9
9
  cuenca_validations/types/card.py,sha256=UGzz8NTFAverUmdUKAK1oGHnOnjSNTpIRUm93vKSSGY,1295
10
10
  cuenca_validations/types/enums.py,sha256=we9to83E3QGcx29rKXVGCPkAmB7T9r1YcGu58dvkamQ,20847
11
11
  cuenca_validations/types/files.py,sha256=2CszbwF9ytXV9suFFwyDjYG4XxY8UhCjRw3HttVXXNw,269
@@ -14,17 +14,17 @@ cuenca_validations/types/helpers.py,sha256=4veeLZbugHHqZk0ezSim978VhH6Vq8XTrEhe1
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=7WgJsiWOXwtqhWk0mkYRgyR_g02ihO0Y0rrUs4BQDQE,24974
18
+ cuenca_validations-2.1.36.dev1.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
25
  tests/test_types.py,sha256=xPBOWsz-VFT8CxfwCAulLshkZKZkIJTjZP40GxwsLgI,23019
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.dev1.dist-info/METADATA,sha256=NLe8HOsIMid6XYXFJX7UDfPPTkveBkJXAIK3x_4eD60,1600
28
+ cuenca_validations-2.1.36.dev1.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
29
+ cuenca_validations-2.1.36.dev1.dist-info/top_level.txt,sha256=4233xdOs2HtuT-GFRjcDcwK0IwdwvWdczOtk0fPB6Gw,25
30
+ cuenca_validations-2.1.36.dev1.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)