Skip to content

Commit 4880e66

Browse files
authored
Merge pull request #66 from GuillaumeDesforges/master
- Tests added
2 parents 87e0731 + b49d08c commit 4880e66

File tree

1 file changed

+56
-2
lines changed

1 file changed

+56
-2
lines changed

tests/test_generics.py

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
from typing import Generic, TypeVar
1+
from typing import Generic, List, TypeVar
22

33
import pytest
44
from helpers import assert_xml_equal
55

6-
from pydantic_xml import BaseGenericXmlModel, BaseXmlModel, attr, errors
6+
from pydantic_xml import BaseGenericXmlModel, BaseXmlModel, attr, element, errors
77

88

99
def test_root_generic_model():
@@ -70,6 +70,60 @@ class TestModel(BaseXmlModel, tag='model1'):
7070
assert_xml_equal(actual_xml, xml)
7171

7272

73+
def test_generic_list():
74+
GenericType = TypeVar('GenericType')
75+
76+
class GenericModel(BaseGenericXmlModel, Generic[GenericType], tag="model1"):
77+
elems: List[GenericType] = element(tag="elem")
78+
79+
xml = '''
80+
<model1>
81+
<elem>foo</elem>
82+
<elem>bar</elem>
83+
</model1>
84+
'''
85+
86+
actual_obj = GenericModel[str].from_xml(xml)
87+
expected_obj = GenericModel(
88+
elems = ["foo", "bar"]
89+
)
90+
91+
assert actual_obj == expected_obj
92+
93+
actual_xml = actual_obj.to_xml()
94+
assert_xml_equal(actual_xml, xml)
95+
96+
97+
def test_generic_list_of_submodels():
98+
GenericType = TypeVar('GenericType')
99+
100+
class SubModel(BaseXmlModel, tag="model2"):
101+
attr1: str = attr()
102+
103+
class GenericModel(BaseGenericXmlModel, Generic[GenericType], tag="model1"):
104+
elems: List[GenericType] = element()
105+
106+
xml = '''
107+
<model1>
108+
<model2 attr1="foo"/>
109+
<model2 attr1="bar"/>
110+
</model1>
111+
'''
112+
113+
actual_obj = GenericModel[SubModel].from_xml(xml)
114+
expected_obj = GenericModel(
115+
elems=[
116+
SubModel(attr1="foo"),
117+
SubModel(attr1="bar"),
118+
],
119+
)
120+
121+
assert actual_obj == expected_obj
122+
123+
actual_xml = actual_obj.to_xml()
124+
assert_xml_equal(actual_xml, xml)
125+
126+
73127
def test_generic_model_errors():
74128
GenericType = TypeVar('GenericType')
75129

0 commit comments

Comments
 (0)