Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Kludex committed Jul 7, 2023
1 parent 5bfa0d0 commit efe602e
Show file tree
Hide file tree
Showing 12 changed files with 518 additions and 450 deletions.
12 changes: 12 additions & 0 deletions tests/integration/case.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from __future__ import annotations

from dataclasses import dataclass

from .file import File


@dataclass
class Case:
input: File
expected: File
id: str
20 changes: 20 additions & 0 deletions tests/integration/cases/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from ..folder import Folder
from .add_none import cases as add_none_cases
from .base_settings import cases as base_settings_cases
from .config_to_model import cases as config_to_model_cases
from .generic_model import cases as generic_model_cases
from .is_base_model import cases as is_base_model_cases
from .replace_validator import cases as replace_validator_cases
from .root_model import cases as root_model_cases

cases = [
*base_settings_cases,
*add_none_cases,
*is_base_model_cases,
*replace_validator_cases,
*config_to_model_cases,
*root_model_cases,
*generic_model_cases,
]
before = Folder("project", *[case.input for case in cases])
expected = Folder("project", *[case.expected for case in cases])
40 changes: 40 additions & 0 deletions tests/integration/cases/add_none.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from ..case import Case
from ..file import File

cases = [
Case(
id="Add None",
input=File(
"add_none.py",
content=[
"from typing import Any, Dict, Optional, Union",
"",
"from pydantic import BaseModel",
"",
"",
"class A(BaseModel):",
" a: int | None",
" b: Optional[int]",
" c: Union[int, None]",
" d: Any",
" e: Dict[str, str]",
],
),
expected=File(
"add_none.py",
content=[
"from typing import Any, Dict, Optional, Union",
"",
"from pydantic import BaseModel",
"",
"",
"class A(BaseModel):",
" a: int | None = None",
" b: Optional[int] = None",
" c: Union[int, None] = None",
" d: Any = None",
" e: Dict[str, str]",
],
),
)
]
28 changes: 28 additions & 0 deletions tests/integration/cases/base_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from ..case import Case
from ..file import File

cases = [
Case(
id="BaseSettings import",
input=File(
"settings.py",
content=[
"from pydantic import BaseSettings",
"",
"",
"class Settings(BaseSettings):",
" a: int",
],
),
expected=File(
"settings.py",
content=[
"from pydantic_settings import BaseSettings",
"",
"",
"class Settings(BaseSettings):",
" a: int",
],
),
),
]
85 changes: 85 additions & 0 deletions tests/integration/cases/config_to_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
from ..case import Case
from ..file import File

cases = [
Case(
id="Replace Config class to model",
input=File(
"config_to_model.py",
content=[
"from pydantic import BaseModel",
"",
"",
"class A(BaseModel):",
" class Config:",
" orm_mode = True",
" validate_all = True",
"",
"",
"class BaseConfig:",
" orm_mode = True",
" validate_all = True",
"",
"",
"class B(BaseModel):",
" class Config(BaseConfig):",
" ...",
],
),
expected=File(
"config_to_model.py",
content=[
"from pydantic import ConfigDict, BaseModel",
"",
"",
"class A(BaseModel):",
" model_config = ConfigDict(from_attributes=True, validate_default=True)",
"",
"",
"class BaseConfig:",
" orm_mode = True",
" validate_all = True",
"",
"",
"class B(BaseModel):",
" # TODO[pydantic]: The `Config` class inherits from another class, please create the `model_config` manually.", # noqa: E501
" # Check https://docs.pydantic.dev/dev-v2/migration/#changes-to-config for more information.",
" class Config(BaseConfig):",
" ...",
],
),
),
Case(
id="Replace Config class on BaseSettings",
input=File(
"config_dict_and_settings.py",
content=[
"from pydantic import BaseModel, BaseSettings",
"",
"",
"class Settings(BaseSettings):",
" sentry_dsn: str",
"",
"",
"class A(BaseModel):",
" class Config:",
" orm_mode = True",
],
),
expected=File(
"config_dict_and_settings.py",
content=[
"from pydantic import ConfigDict, BaseModel",
"from pydantic_settings import BaseSettings",
"",
"",
"class Settings(BaseSettings):",
" sentry_dsn: str",
"",
"",
"class A(BaseModel):",
" model_config = ConfigDict(from_attributes=True)",
],
),
),
]
28 changes: 28 additions & 0 deletions tests/integration/cases/generic_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from ..case import Case
from ..file import File

cases = [
Case(
id="Replace Fields",
input=File(
"field.py",
content=[
"from pydantic import BaseModel, Field",
"",
"",
"class A(BaseModel):",
" a: List[int] = Field(..., min_items=1, max_items=10)",
],
),
expected=File(
"field.py",
content=[
"from pydantic import BaseModel, Field",
"",
"",
"class A(BaseModel):",
" a: List[int] = Field(..., min_length=1, max_length=10)",
],
),
),
]
119 changes: 119 additions & 0 deletions tests/integration/cases/is_base_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
from ..case import Case
from ..file import File

cases = [
Case(
id="Make sure is BaseModel",
input=File(
"a.py",
content=[
"from pydantic import BaseModel",
"",
"",
"class A(BaseModel):",
" a: int",
"",
"",
"class D:",
" d: int",
],
),
expected=File(
"a.py",
content=[
"from pydantic import BaseModel",
"",
"",
"class A(BaseModel):",
" a: int",
"",
"",
"class D:",
" d: int",
],
),
),
Case(
id="Make sure is BaseModel",
input=File(
"b.py",
content=[
"from pydantic import BaseModel",
"from .a import A, D",
"from typing import Optional",
"",
"",
"class B(A):",
" b: Optional[int]",
"",
"",
"class C(D):",
" c: Optional[int]",
],
),
expected=File(
"b.py",
content=[
"from pydantic import BaseModel",
"from .a import A, D",
"from typing import Optional",
"",
"",
"class B(A):",
" b: Optional[int] = None",
"",
"",
"class C(D):",
" c: Optional[int]",
],
),
),
Case(
id="Make sure is BaseModel",
input=File(
"c.py",
content=[
"from pydantic import BaseModel",
"from .d import D",
"",
"",
"class C(D):",
" c: Optional[int]",
],
),
expected=File(
"c.py",
content=[
"from pydantic import BaseModel",
"from .d import D",
"",
"",
"class C(D):",
" c: Optional[int] = None",
],
),
),
Case(
id="Make sure is BaseModel",
input=File(
"d.py",
content=[
"from pydantic import BaseModel",
"",
"",
"class D(BaseModel):",
" d: int",
],
),
expected=File(
"d.py",
content=[
"from pydantic import BaseModel",
"",
"",
"class D(BaseModel):",
" d: int",
],
),
),
]
Loading

0 comments on commit efe602e

Please sign in to comment.