Skip to content

Commit 74f9be5

Browse files
authored
✅ Add integration tests for Field and const=True (#42)
1 parent aeb5dcc commit 74f9be5

File tree

2 files changed

+74
-31
lines changed

2 files changed

+74
-31
lines changed

README.md

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ Bump Pydantic is a tool to help you migrate your code from Pydantic V1 to V2.
2828
- [BP005: Replace `GenericModel` by `BaseModel`](#bp005-replace-genericmodel-by-basemodel)
2929
- [BP006: Replace `__root__` by `RootModel`](#bp006-replace-__root__-by-rootmodel)
3030
- [BP007: Replace decorators](#bp007-replace-decorators)
31-
- [BP008: Replace `const=True` by `Literal`](#bp008-replace-consttrue-by-literal)
3231
- [BP009: Replace `pydantic.parse_obj_as` by `pydantic.TypeAdapter`](#bp009-replace-pydanticparse_obj_as-by-pydantictypeadapter)
3332
- [License](#license)
3433

@@ -129,6 +128,7 @@ class User(BaseModel):
129128
### BP003: Replace `Field` old parameters to new ones
130129

131130
- ✅ Replace `Field` old parameters to new ones.
131+
- ✅ Replace `field: Enum = Field(Enum.VALUE, const=True)` by `field: Literal[Enum.VALUE] = Enum.VALUE`.
132132

133133
The following code will be transformed:
134134

@@ -284,34 +284,6 @@ class User(BaseModel):
284284
return values
285285
```
286286

287-
### BP008: Replace `const=True` by `Literal`
288-
289-
- ✅ Replace `field: Enum = Field(Enum.VALUE, const=True)` by `field: Literal[Enum.VALUE] = Enum.VALUE`.
290-
291-
The following code will be transformed:
292-
293-
```py
294-
from enum import Enum
295-
296-
from pydantic import BaseModel, Field
297-
298-
299-
class User(BaseModel):
300-
name: Enum = Field(Enum.VALUE, const=True)
301-
```
302-
303-
Into:
304-
305-
```py
306-
from enum import Enum
307-
308-
from pydantic import BaseModel, Field
309-
310-
311-
class User(BaseModel):
312-
name: Literal[Enum.VALUE] = Enum.VALUE
313-
```
314-
315287
### BP009: Replace `pydantic.parse_obj_as` by `pydantic.TypeAdapter`
316288

317289
- ✅ Replace `pydantic.parse_obj_as(T, obj)` to `pydantic.TypeAdapter(T).validate_python(obj)`.

tests/integration/test_cli.py

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,41 @@ def before() -> Folder:
171171
"class A(BaseModel):",
172172
" __root__ = int",
173173
],
174-
)
174+
),
175+
File(
176+
"replace_validator.py",
177+
content=[
178+
"from pydantic import BaseModel, validator, root_validator",
179+
"",
180+
"",
181+
"class A(BaseModel):",
182+
" a: int",
183+
" b: str",
184+
"",
185+
" @validator('a')",
186+
" def validate_a(cls, v):",
187+
" return v + 1",
188+
"",
189+
" @root_validator()",
190+
" def validate_b(cls, values):",
191+
" return values",
192+
],
193+
),
194+
File(
195+
"const_to_literal.py",
196+
content=[
197+
"from enum import Enum",
198+
"from pydantic import BaseModel, Field",
199+
"",
200+
"",
201+
"class A(str, Enum):",
202+
" a = 'a'",
203+
" b = 'b'",
204+
"",
205+
"class A(BaseModel):",
206+
" a: A = Field(A.a, const=True)",
207+
],
208+
),
175209
# File(
176210
# "config_dict_and_settings.py",
177211
# content=[
@@ -284,7 +318,44 @@ def expected() -> Folder:
284318
"class A(RootModel[int]):",
285319
" pass",
286320
],
287-
)
321+
),
322+
File(
323+
"replace_validator.py",
324+
content=[
325+
"from pydantic import field_validator, model_validator, BaseModel",
326+
"",
327+
"",
328+
"class A(BaseModel):",
329+
" a: int",
330+
" b: str",
331+
"",
332+
" @field_validator('a')",
333+
" @classmethod",
334+
" def validate_a(cls, v):",
335+
" return v + 1",
336+
"",
337+
" @model_validator()",
338+
" @classmethod",
339+
" def validate_b(cls, values):",
340+
" return values",
341+
],
342+
),
343+
File(
344+
"const_to_literal.py",
345+
content=[
346+
"from enum import Enum",
347+
"from pydantic import BaseModel",
348+
"from typing import Literal",
349+
"",
350+
"",
351+
"class A(str, Enum):",
352+
" a = 'a'",
353+
" b = 'b'",
354+
"",
355+
"class A(BaseModel):",
356+
" a: Literal[A.a] = A.a",
357+
],
358+
),
288359
# File(
289360
# "config_dict_and_settings.py",
290361
# content=[

0 commit comments

Comments
 (0)