(DocClass)
| 31 | |
| 32 | @staticmethod |
| 33 | def delta(DocClass): |
| 34 | class Doc(DocClass): |
| 35 | string_field = StringField() |
| 36 | int_field = IntField() |
| 37 | dict_field = DictField() |
| 38 | list_field = ListField() |
| 39 | |
| 40 | Doc.drop_collection() |
| 41 | doc = Doc() |
| 42 | doc.save() |
| 43 | |
| 44 | doc = Doc.objects.first() |
| 45 | assert doc._get_changed_fields() == [] |
| 46 | assert doc._delta() == ({}, {}) |
| 47 | |
| 48 | doc.string_field = "hello" |
| 49 | assert doc._get_changed_fields() == ["string_field"] |
| 50 | assert doc._delta() == ({"string_field": "hello"}, {}) |
| 51 | |
| 52 | doc._changed_fields = [] |
| 53 | doc.int_field = 1 |
| 54 | assert doc._get_changed_fields() == ["int_field"] |
| 55 | assert doc._delta() == ({"int_field": 1}, {}) |
| 56 | |
| 57 | doc._changed_fields = [] |
| 58 | dict_value = {"hello": "world", "ping": "pong"} |
| 59 | doc.dict_field = dict_value |
| 60 | assert doc._get_changed_fields() == ["dict_field"] |
| 61 | assert doc._delta() == ({"dict_field": dict_value}, {}) |
| 62 | |
| 63 | doc._changed_fields = [] |
| 64 | list_value = ["1", 2, {"hello": "world"}] |
| 65 | doc.list_field = list_value |
| 66 | assert doc._get_changed_fields() == ["list_field"] |
| 67 | assert doc._delta() == ({"list_field": list_value}, {}) |
| 68 | |
| 69 | # Test unsetting |
| 70 | doc._changed_fields = [] |
| 71 | doc.dict_field = {} |
| 72 | assert doc._get_changed_fields() == ["dict_field"] |
| 73 | assert doc._delta() == ({}, {"dict_field": 1}) |
| 74 | |
| 75 | doc._changed_fields = [] |
| 76 | doc.list_field = [] |
| 77 | assert doc._get_changed_fields() == ["list_field"] |
| 78 | assert doc._delta() == ({}, {"list_field": 1}) |
| 79 | |
| 80 | def test_delta_recursive(self): |
| 81 | self.delta_recursive(Document, EmbeddedDocument) |
no test coverage detected