Skip to content

Commit 26970fc

Browse files
committed
Tests
1 parent 4cf6697 commit 26970fc

File tree

3 files changed

+33
-5
lines changed

3 files changed

+33
-5
lines changed

test/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
@pytest.fixture
88
def models_generator():
9-
return MetadataGenerator()
9+
return MetadataGenerator(dict_keys_regex=[r"^test_dict_field_\w+$"], dict_keys_fields=["dict_field"])
1010

1111

1212
@pytest.fixture

test/test_code_generation/test_attrs_generation.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import pytest
44

5-
from json_to_models.dynamic_typing import (DList, DOptional, FloatString, IntString, ModelMeta, compile_imports)
5+
from json_to_models.dynamic_typing import (DDict, DList, DOptional, FloatString, IntString, ModelMeta, compile_imports)
66
from json_to_models.models import sort_fields
77
from json_to_models.models.attr import AttrsModelCodeGenerator, METADATA_FIELD_NAME, sort_kwargs
88
from json_to_models.models.base import generate_code
@@ -87,7 +87,8 @@ class Test:
8787
"baz": DOptional(DList(DList(str))),
8888
"bar": DOptional(IntString),
8989
"qwerty": FloatString,
90-
"asdfg": DOptional(int)
90+
"asdfg": DOptional(int),
91+
"dict": DDict(int)
9192
}),
9293
"fields_data": {
9394
"foo": {
@@ -114,19 +115,25 @@ class Test:
114115
"name": "asdfg",
115116
"type": "Optional[int]",
116117
"body": f"attr.ib(default=None, {field_meta('asdfg')})"
118+
},
119+
"dict": {
120+
"name": "dict",
121+
"type": "Dict[str, int]",
122+
"body": f"attr.ib({field_meta('dict')})"
117123
}
118124
},
119125
"generated": trim(f"""
120126
import attr
121127
from attr.converter import optional
122128
from json_to_models.dynamic_typing import FloatString, IntString
123-
from typing import List, Optional
129+
from typing import Dict, List, Optional
124130
125131
126132
@attr.s
127133
class Test:
128134
foo: int = attr.ib({field_meta('foo')})
129135
qwerty: FloatString = attr.ib(converter=FloatString, {field_meta('qwerty')})
136+
dict: Dict[str, int] = attr.ib({field_meta('dict')})
130137
baz: Optional[List[List[str]]] = attr.ib(factory=list, {field_meta('baz')})
131138
bar: Optional[IntString] = attr.ib(default=None, converter=optional(IntString), {field_meta('bar')})
132139
asdfg: Optional[int] = attr.ib(default=None, {field_meta('asdfg')})

test/test_generator/test_detect_type.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from json_to_models.dynamic_typing import BooleanString, DList, DUnion, FloatString, IntString, NoneType, Unknown
3+
from json_to_models.dynamic_typing import BooleanString, DDict, DList, DUnion, FloatString, IntString, NoneType, Unknown
44
from json_to_models.generator import MetadataGenerator
55

66
# JSON data | MetaData
@@ -17,6 +17,7 @@
1717
pytest.param("1", IntString, id="int_str"),
1818
pytest.param("1.0", FloatString, id="float_str"),
1919
pytest.param("true", BooleanString, id="bool_str"),
20+
pytest.param({"test_dict_field_a": 1, "test_dict_field_b": "a"}, DDict(DUnion(int, str)), id="dict")
2021
]
2122

2223
test_dict = {param.id: param.values[0] for param in test_data}
@@ -34,3 +35,23 @@
3435
@pytest.mark.parametrize("value,expected", test_data)
3536
def test_detect_type(models_generator: MetadataGenerator, value, expected):
3637
assert models_generator._detect_type(value) == expected
38+
39+
40+
def test_convert(models_generator: MetadataGenerator):
41+
data = {
42+
"dict_field": {},
43+
"another_dict_field": {"test_dict_field_a": 1, "test_dict_field_b": "a"},
44+
"another_dict_field_2": {"test_dict_field_a": 1},
45+
"another_dict_field_3": {"test_dict_field_a": 1, "test_dict_field_b": 2},
46+
"int_field": 1,
47+
"not": False
48+
}
49+
meta = models_generator._convert(data)
50+
assert meta == {
51+
"dict_field": DDict(Unknown),
52+
"another_dict_field": DDict(DUnion(int, str)),
53+
"another_dict_field_2": DDict(int),
54+
"another_dict_field_3": DDict(int),
55+
"int_field": int,
56+
"not_": bool
57+
}

0 commit comments

Comments
 (0)