Skip to content

Commit 538a3d4

Browse files
committed
One more protection from mistakes
1 parent 9bcf842 commit 538a3d4

File tree

1 file changed

+138
-0
lines changed

1 file changed

+138
-0
lines changed

tests/test_forms_v2.py

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
"""Integration tests for new WTForms generation in Flask-Mongoengine 2.0."""
2+
import json
3+
4+
import pytest
5+
from werkzeug.datastructures import MultiDict
6+
7+
wtforms = pytest.importorskip("wtforms")
8+
9+
10+
@pytest.fixture()
11+
def local_app(app):
12+
"""Helper fixture to minimize code indentation."""
13+
with app.test_request_context("/"):
14+
yield app
15+
16+
17+
def test__full_document_form__does_not_create_any_unexpected_data_in_database(db):
18+
"""
19+
Test to ensure that we are following own promise in documentation, read:
20+
http://docs.mongoengine.org/projects/flask-mongoengine/en/latest/migration_to_v2.html#empty-fields-are-not-created-in-database
21+
"""
22+
23+
class Todo(db.Document):
24+
"""Test model for AllFieldsModel."""
25+
26+
string = db.StringField()
27+
28+
class Embedded(db.EmbeddedDocument):
29+
"""Test embedded for AllFieldsModel."""
30+
31+
string = db.StringField()
32+
33+
class AllFieldsModel(db.Document):
34+
"""Meaningless Document with all field types."""
35+
36+
binary_field = db.BinaryField()
37+
boolean_field = db.BooleanField()
38+
date_field = db.DateField()
39+
date_time_field = db.DateTimeField()
40+
decimal_field = db.DecimalField()
41+
dict_field = db.DictField()
42+
email_field = db.EmailField()
43+
embedded_document_field = db.EmbeddedDocumentField(document_type=Embedded)
44+
file_field = db.FileField()
45+
float_field = db.FloatField()
46+
int_field = db.IntField()
47+
list_field = db.ListField(field=db.StringField)
48+
reference_field = db.ReferenceField(document_type=Todo)
49+
sorted_list_field = db.SortedListField(field=db.StringField)
50+
string_field = db.StringField()
51+
url_field = db.URLField()
52+
cached_reference_field = db.CachedReferenceField(document_type=Todo)
53+
complex_date_time_field = db.ComplexDateTimeField()
54+
dynamic_field = db.DynamicField()
55+
embedded_document_list_field = db.EmbeddedDocumentListField(
56+
document_type=Embedded
57+
)
58+
enum_field = db.EnumField(enum=[1, 2])
59+
generic_embedded_document_field = db.GenericEmbeddedDocumentField()
60+
generic_lazy_reference_field = db.GenericLazyReferenceField()
61+
geo_json_base_field = db.GeoJsonBaseField()
62+
geo_point_field = db.GeoPointField()
63+
image_field = db.ImageField()
64+
lazy_reference_field = db.LazyReferenceField(document_type=Todo)
65+
line_string_field = db.LineStringField()
66+
long_field = db.LongField()
67+
map_field = db.MapField(field=db.StringField())
68+
multi_line_string_field = db.MultiLineStringField()
69+
multi_point_field = db.MultiPointField()
70+
multi_polygon_field = db.MultiPolygonField()
71+
point_field = db.PointField()
72+
polygon_field = db.PolygonField()
73+
sequence_field = db.SequenceField()
74+
uuid_field = db.UUIDField()
75+
generic_reference_field = db.GenericReferenceField(document_type=Todo)
76+
object_id_field = db.ObjectIdField()
77+
78+
AllFieldsModelForm = AllFieldsModel.to_wtf_form()
79+
form = AllFieldsModelForm(
80+
MultiDict(
81+
{
82+
"binary_field": "",
83+
"boolean_field": "",
84+
"date_field": "",
85+
"date_time_field": "",
86+
"decimal_field": "",
87+
"dict_field": "",
88+
"email_field": "",
89+
"embedded_document_field": "",
90+
"file_field": "",
91+
"float_field": "",
92+
"int_field": "",
93+
"list_field": "",
94+
"reference_field": "",
95+
"sorted_list_field": "",
96+
"string_field": "",
97+
"url_field": "",
98+
"cached_reference_field": "",
99+
"complex_date_time_field": "",
100+
"dynamic_field": "",
101+
"embedded_document_list_field": "",
102+
"enum_field": "",
103+
"generic_embedded_document_field": "",
104+
"generic_lazy_reference_field": "",
105+
"geo_json_base_field": "",
106+
"geo_point_field": "",
107+
"image_field": "",
108+
"lazy_reference_field": "",
109+
"line_string_field": "",
110+
"long_field": "",
111+
"map_field": "",
112+
"multi_line_string_field": "",
113+
"multi_point_field": "",
114+
"multi_polygon_field": "",
115+
"point_field": "",
116+
"polygon_field": "",
117+
"sequence_field": "",
118+
"uuid_field": "",
119+
"generic_reference_field": "",
120+
"object_id_field": "",
121+
}
122+
)
123+
)
124+
assert form.validate()
125+
form.save()
126+
127+
obj = AllFieldsModel.objects.get(id=form.instance.pk)
128+
object_dict = json.loads(obj.to_json())
129+
object_dict.pop("_id")
130+
131+
assert object_dict == {
132+
"dict_field": {},
133+
"list_field": [],
134+
"sorted_list_field": [],
135+
"embedded_document_list_field": [],
136+
"map_field": {},
137+
"sequence_field": 1,
138+
}

0 commit comments

Comments
 (0)