Skip to content
This repository was archived by the owner on Aug 19, 2025. It is now read-only.

Commit 5fd3ae2

Browse files
committed
add tests
1 parent b480c9e commit 5fd3ae2

3 files changed

Lines changed: 404 additions & 254 deletions

File tree

tests/test_definitions.py

Lines changed: 102 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -32,77 +32,105 @@ def test_reference():
3232
}
3333

3434

35-
# def test_definitions_as_mapping():
36-
# """
37-
# Ensure that definitions support a mapping interface.
38-
# """
39-
# definitions = typesystem.SchemaDefinitions()
40-
#
41-
# class Album(typesystem.Schema, definitions=definitions):
42-
# title = typesystem.String(max_length=100)
43-
# release_date = typesystem.Date()
44-
# artist = typesystem.Reference("Artist")
45-
#
46-
# class Artist(typesystem.Schema, definitions=definitions):
47-
# name = typesystem.String(max_length=100)
48-
#
49-
# assert definitions["Album"] == Album
50-
# assert definitions["Artist"] == Artist
51-
# assert dict(definitions) == {"Album": Album, "Artist": Artist}
52-
# assert len(definitions) == 2
53-
# del definitions["Artist"]
54-
#
55-
#
56-
# def test_string_references():
57-
# definitions = typesystem.SchemaDefinitions()
58-
#
59-
# class ExampleA(typesystem.Schema, definitions=definitions):
60-
# field_on_a = typesystem.Integer()
61-
# example_b = typesystem.Reference("ExampleB")
62-
#
63-
# class ExampleB(typesystem.Schema, definitions=definitions):
64-
# field_on_b = typesystem.Integer()
65-
#
66-
# value = ExampleA.validate(
67-
# {"field_on_a": "123", "example_b": {"field_on_b": "456"}})
68-
# assert value == ExampleA(field_on_a=123, example_b=ExampleB(field_on_b=456))
69-
#
70-
# class ExampleC(typesystem.Schema, definitions=definitions):
71-
# field_on_c = typesystem.Integer()
72-
# example_d = typesystem.Array(items=typesystem.Reference("ExampleD"))
73-
#
74-
# class ExampleD(typesystem.Schema, definitions=definitions):
75-
# field_on_d = typesystem.Integer()
76-
#
77-
# value = ExampleC.validate(
78-
# {"field_on_c": "123", "example_d": [{"field_on_d": "456"}]}
79-
# )
80-
# assert value == ExampleC(field_on_c=123, example_d=[ExampleD(field_on_d=456)])
81-
#
82-
# class ExampleE(typesystem.Schema, definitions=definitions):
83-
# field_on_e = typesystem.Integer()
84-
# example_f = typesystem.Array(items=[typesystem.Reference("ExampleF")])
85-
#
86-
# class ExampleF(typesystem.Schema, definitions=definitions):
87-
# field_on_f = typesystem.Integer()
88-
#
89-
# value = ExampleE.validate(
90-
# {"field_on_e": "123", "example_f": [{"field_on_f": "456"}]}
91-
# )
92-
# assert value == ExampleE(field_on_e=123, example_f=[ExampleF(field_on_f=456)])
93-
#
94-
# class ExampleG(typesystem.Schema, definitions=definitions):
95-
# field_on_g = typesystem.Integer()
96-
# example_h = typesystem.Object(
97-
# properties={"h": typesystem.Reference("ExampleH")}
98-
# )
99-
#
100-
# class ExampleH(typesystem.Schema, definitions=definitions):
101-
# field_on_h = typesystem.Integer()
102-
#
103-
# value = ExampleG.validate(
104-
# {"field_on_g": "123",
105-
# "example_h": {"h": {"field_on_h": "456"}}}
106-
# )
107-
# assert value == ExampleG(
108-
# field_on_g=123, example_h={"h": ExampleH(field_on_h=456)})
35+
def test_definitions_as_mapping():
36+
"""
37+
Ensure that definitions support a mapping interface.
38+
"""
39+
artist = typesystem.Schema(fields={"name": typesystem.String(max_length=100)})
40+
41+
definitions = typesystem.Definitions()
42+
definitions["Artist"] = artist
43+
44+
album = typesystem.Schema(
45+
fields={
46+
"title": typesystem.String(max_length=100),
47+
"release_date": typesystem.Date(),
48+
"artist": typesystem.Reference(to="Artist", definitions=definitions),
49+
}
50+
)
51+
52+
definitions["Album"] = album
53+
54+
assert definitions["Album"] == album
55+
assert definitions["Artist"] == artist
56+
assert dict(definitions) == {"Album": album, "Artist": artist}
57+
assert len(definitions) == 2
58+
del definitions["Artist"]
59+
60+
61+
def test_string_references():
62+
definitions = typesystem.Definitions()
63+
64+
example_b = typesystem.Schema(
65+
fields={
66+
"field_on_b": typesystem.Integer(),
67+
}
68+
)
69+
70+
definitions["ExampleB"] = example_b
71+
72+
example_a = typesystem.Schema(
73+
fields={
74+
"field_on_a": typesystem.Integer(),
75+
"example_b": typesystem.Reference(to="ExampleB", definitions=definitions),
76+
}
77+
)
78+
79+
value = example_a.validate({"field_on_a": "123", "example_b": {"field_on_b": 456}})
80+
assert value == {"field_on_a": 123, "example_b": {"field_on_b": 456}}
81+
82+
example_d = typesystem.Schema(fields={"field_on_d": typesystem.Integer()})
83+
84+
definitions["ExampleD"] = example_d
85+
86+
example_c = typesystem.Schema(
87+
fields={
88+
"field_on_c": typesystem.Integer(),
89+
"example_d": typesystem.Array(
90+
items=typesystem.Reference(to="ExampleD", definitions=definitions)
91+
),
92+
}
93+
)
94+
95+
value = example_c.validate(
96+
{"field_on_c": "123", "example_d": [{"field_on_d": 456}]}
97+
)
98+
assert value == {"field_on_c": 123, "example_d": [{"field_on_d": 456}]}
99+
100+
example_f = typesystem.Schema(fields={"field_on_f": typesystem.Integer()})
101+
102+
definitions["ExampleF"] = example_f
103+
104+
example_e = typesystem.Schema(
105+
fields={
106+
"field_on_e": typesystem.Integer(),
107+
"example_f": typesystem.Array(
108+
items=[typesystem.Reference(to="ExampleF", definitions=definitions)]
109+
),
110+
}
111+
)
112+
113+
value = example_e.validate(
114+
{"field_on_e": "123", "example_f": [{"field_on_f": 456}]}
115+
)
116+
assert value == {"field_on_e": 123, "example_f": [{"field_on_f": 456}]}
117+
118+
example_h = typesystem.Schema(fields={"field_on_h": typesystem.Integer()})
119+
120+
definitions["ExampleH"] = example_h
121+
122+
example_g = typesystem.Schema(
123+
fields={
124+
"field_on_g": typesystem.Integer(),
125+
"example_h": typesystem.Object(
126+
properties={
127+
"h": typesystem.Reference(to="ExampleH", definitions=definitions)
128+
}
129+
),
130+
}
131+
)
132+
133+
value = example_g.validate(
134+
{"field_on_g": 123, "example_h": {"h": {"field_on_h": 456}}}
135+
)
136+
assert value == {"field_on_g": 123, "example_h": {"h": {"field_on_h": 456}}}

tests/test_forms.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import jinja2
22
import markupsafe
3+
import pytest
34

45
import typesystem
56

@@ -31,7 +32,10 @@ def test_form_rendering():
3132

3233
def test_password_rendering():
3334
password_schema = typesystem.Schema(
34-
{"password": typesystem.String(format="password")}
35+
fields={
36+
"password": typesystem.String(format="password"),
37+
"active": typesystem.Boolean(read_only=True, default=True),
38+
}
3539
)
3640

3741
form = forms.create_form(password_schema)
@@ -40,6 +44,22 @@ def test_password_rendering():
4044
assert "secret" not in html
4145

4246

47+
def test_form_validation():
48+
password_schema = typesystem.Schema(
49+
{"password": typesystem.String(format="password")}
50+
)
51+
52+
form = forms.create_form(password_schema)
53+
54+
with pytest.raises(AssertionError):
55+
form.is_valid
56+
57+
form.validate(data={"password": "secret"})
58+
59+
assert form.is_valid is True
60+
assert form.validated_data == {"password": "secret"}
61+
62+
4363
def test_form_html():
4464
form = forms.create_form(contact)
4565

0 commit comments

Comments
 (0)