Skip to content

Commit e5bc109

Browse files
committed
Add parameterized e2e test for class-decorators across all output types
1 parent 5895823 commit e5bc109

6 files changed

Lines changed: 119 additions & 0 deletions
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# generated by datamodel-codegen:
2+
# filename: simple_frozen_test.json
3+
# timestamp: 1985-10-26T08:21:00+00:00
4+
5+
from __future__ import annotations
6+
7+
from dataclasses import dataclass
8+
9+
from my_module import my_decorator
10+
11+
12+
@my_decorator
13+
@dataclass
14+
class User:
15+
name: str
16+
age: int
17+
email: str | None = None
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# generated by datamodel-codegen:
2+
# filename: simple_frozen_test.json
3+
# timestamp: 1985-10-26T08:21:00+00:00
4+
5+
from __future__ import annotations
6+
7+
from msgspec import UNSET, Struct, UnsetType
8+
from my_module import my_decorator
9+
10+
11+
@my_decorator
12+
class User(Struct):
13+
name: str
14+
age: int
15+
email: str | UnsetType = UNSET
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# generated by datamodel-codegen:
2+
# filename: simple_frozen_test.json
3+
# timestamp: 1985-10-26T08:21:00+00:00
4+
5+
from __future__ import annotations
6+
7+
from my_module import my_decorator
8+
from pydantic import BaseModel, EmailStr
9+
10+
11+
@my_decorator
12+
class User(BaseModel):
13+
name: str
14+
age: int
15+
email: EmailStr | None = None
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# generated by datamodel-codegen:
2+
# filename: simple_frozen_test.json
3+
# timestamp: 1985-10-26T08:21:00+00:00
4+
5+
from __future__ import annotations
6+
7+
from my_module import my_decorator
8+
from pydantic import BaseModel, EmailStr
9+
10+
11+
@my_decorator
12+
class User(BaseModel):
13+
name: str
14+
age: int
15+
email: EmailStr | None = None
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# generated by datamodel-codegen:
2+
# filename: simple_frozen_test.json
3+
# timestamp: 1985-10-26T08:21:00+00:00
4+
5+
from __future__ import annotations
6+
7+
from my_module import my_decorator
8+
from pydantic import EmailStr
9+
from pydantic.dataclasses import dataclass
10+
11+
12+
@my_decorator
13+
@dataclass
14+
class User:
15+
name: str
16+
age: int
17+
email: EmailStr | None = None

tests/main/test_main_general.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,46 @@ def test_class_decorators_with_empty_entries(output_file: Path) -> None:
284284
)
285285

286286

287+
@freeze_time(TIMESTAMP)
288+
@pytest.mark.parametrize(
289+
("output_model_type", "expected_file"),
290+
[
291+
("pydantic.BaseModel", "class_decorators_pydantic_BaseModel.py"),
292+
("pydantic_v2.BaseModel", "class_decorators_pydantic_v2_BaseModel.py"),
293+
("pydantic_v2.dataclass", "class_decorators_pydantic_v2_dataclass.py"),
294+
("dataclasses.dataclass", "class_decorators_dataclasses_dataclass.py"),
295+
("msgspec.Struct", "class_decorators_msgspec_Struct.py"),
296+
# Note: TypedDict is excluded because its template doesn't support decorators
297+
],
298+
ids=[
299+
"pydantic_v1",
300+
"pydantic_v2",
301+
"pydantic_v2_dataclass",
302+
"dataclasses",
303+
"msgspec",
304+
],
305+
)
306+
def test_class_decorators_all_output_types(
307+
output_file: Path, output_model_type: str, expected_file: str
308+
) -> None:
309+
"""Test --class-decorators works with all output model types that support decorators."""
310+
run_main_and_assert(
311+
input_path=DATA_PATH / "jsonschema" / "simple_frozen_test.json",
312+
output_path=output_file,
313+
input_file_type="jsonschema",
314+
assert_func=assert_file_content,
315+
expected_file=expected_file,
316+
extra_args=[
317+
"--output-model-type",
318+
output_model_type,
319+
"--class-decorators",
320+
"@my_decorator",
321+
"--additional-imports",
322+
"my_module.my_decorator",
323+
],
324+
)
325+
326+
287327
@freeze_time(TIMESTAMP)
288328
def test_use_attribute_docstrings(tmp_path: Path) -> None:
289329
"""Test --use-attribute-docstrings flag functionality."""

0 commit comments

Comments
 (0)