Ensure that the list fields can handle the complex types.
(self)
| 1147 | assert simple.widgets == [1, 2, 3, 5] |
| 1148 | |
| 1149 | def test_list_field_complex(self): |
| 1150 | """Ensure that the list fields can handle the complex types.""" |
| 1151 | |
| 1152 | class SettingBase(EmbeddedDocument): |
| 1153 | meta = {"allow_inheritance": True} |
| 1154 | |
| 1155 | class StringSetting(SettingBase): |
| 1156 | value = StringField() |
| 1157 | |
| 1158 | class IntegerSetting(SettingBase): |
| 1159 | value = IntField() |
| 1160 | |
| 1161 | class Simple(Document): |
| 1162 | mapping = ListField() |
| 1163 | |
| 1164 | Simple.drop_collection() |
| 1165 | |
| 1166 | e = Simple() |
| 1167 | e.mapping.append(StringSetting(value="foo")) |
| 1168 | e.mapping.append(IntegerSetting(value=42)) |
| 1169 | e.mapping.append( |
| 1170 | { |
| 1171 | "number": 1, |
| 1172 | "string": "Hi!", |
| 1173 | "float": 1.001, |
| 1174 | "complex": IntegerSetting(value=42), |
| 1175 | "list": [IntegerSetting(value=42), StringSetting(value="foo")], |
| 1176 | } |
| 1177 | ) |
| 1178 | e.save() |
| 1179 | |
| 1180 | e2 = Simple.objects.get(id=e.id) |
| 1181 | assert isinstance(e2.mapping[0], StringSetting) |
| 1182 | assert isinstance(e2.mapping[1], IntegerSetting) |
| 1183 | |
| 1184 | # Test querying |
| 1185 | assert Simple.objects.filter(mapping__1__value=42).count() == 1 |
| 1186 | assert Simple.objects.filter(mapping__2__number=1).count() == 1 |
| 1187 | assert Simple.objects.filter(mapping__2__complex__value=42).count() == 1 |
| 1188 | assert Simple.objects.filter(mapping__2__list__0__value=42).count() == 1 |
| 1189 | assert Simple.objects.filter(mapping__2__list__1__value="foo").count() == 1 |
| 1190 | |
| 1191 | # Confirm can update |
| 1192 | Simple.objects().update(set__mapping__1=IntegerSetting(value=10)) |
| 1193 | assert Simple.objects.filter(mapping__1__value=10).count() == 1 |
| 1194 | |
| 1195 | Simple.objects().update(set__mapping__2__list__1=StringSetting(value="Boo")) |
| 1196 | assert Simple.objects.filter(mapping__2__list__1__value="foo").count() == 0 |
| 1197 | assert Simple.objects.filter(mapping__2__list__1__value="Boo").count() == 1 |
| 1198 | |
| 1199 | def test_embedded_db_field(self): |
| 1200 | class Embedded(EmbeddedDocument): |
nothing calls this directly
no test coverage detected