(DocClass, EmbeddedClass)
| 443 | |
| 444 | @staticmethod |
| 445 | def delta_recursive_db_field(DocClass, EmbeddedClass): |
| 446 | class Embedded(EmbeddedClass): |
| 447 | string_field = StringField(db_field="db_string_field") |
| 448 | int_field = IntField(db_field="db_int_field") |
| 449 | dict_field = DictField(db_field="db_dict_field") |
| 450 | list_field = ListField(db_field="db_list_field") |
| 451 | |
| 452 | class Doc(DocClass): |
| 453 | string_field = StringField(db_field="db_string_field") |
| 454 | int_field = IntField(db_field="db_int_field") |
| 455 | dict_field = DictField(db_field="db_dict_field") |
| 456 | list_field = ListField(db_field="db_list_field") |
| 457 | embedded_field = EmbeddedDocumentField( |
| 458 | Embedded, db_field="db_embedded_field" |
| 459 | ) |
| 460 | |
| 461 | Doc.drop_collection() |
| 462 | doc = Doc() |
| 463 | doc.save() |
| 464 | |
| 465 | doc = Doc.objects.first() |
| 466 | assert doc._get_changed_fields() == [] |
| 467 | assert doc._delta() == ({}, {}) |
| 468 | |
| 469 | embedded_1 = Embedded() |
| 470 | embedded_1.string_field = "hello" |
| 471 | embedded_1.int_field = 1 |
| 472 | embedded_1.dict_field = {"hello": "world"} |
| 473 | embedded_1.list_field = ["1", 2, {"hello": "world"}] |
| 474 | doc.embedded_field = embedded_1 |
| 475 | |
| 476 | assert doc._get_changed_fields() == ["db_embedded_field"] |
| 477 | |
| 478 | embedded_delta = { |
| 479 | "db_string_field": "hello", |
| 480 | "db_int_field": 1, |
| 481 | "db_dict_field": {"hello": "world"}, |
| 482 | "db_list_field": ["1", 2, {"hello": "world"}], |
| 483 | } |
| 484 | assert doc.embedded_field._delta() == (embedded_delta, {}) |
| 485 | assert doc._delta() == ({"db_embedded_field": embedded_delta}, {}) |
| 486 | |
| 487 | doc.save() |
| 488 | doc = doc.reload(10) |
| 489 | |
| 490 | doc.embedded_field.dict_field = {} |
| 491 | assert doc._get_changed_fields() == ["db_embedded_field.db_dict_field"] |
| 492 | assert doc.embedded_field._delta() == ({}, {"db_dict_field": 1}) |
| 493 | assert doc._delta() == ({}, {"db_embedded_field.db_dict_field": 1}) |
| 494 | doc.save() |
| 495 | doc = doc.reload(10) |
| 496 | assert doc.embedded_field.dict_field == {} |
| 497 | |
| 498 | assert doc._get_changed_fields() == [] |
| 499 | doc.embedded_field.list_field = [] |
| 500 | assert doc._get_changed_fields() == ["db_embedded_field.db_list_field"] |
| 501 | assert doc.embedded_field._delta() == ({}, {"db_list_field": 1}) |
| 502 | assert doc._delta() == ({}, {"db_embedded_field.db_list_field": 1}) |
no test coverage detected