|
1 | 1 | import unittest |
2 | 2 |
|
3 | | -from mongoengine import connect, Document, IntField |
| 3 | +from mongoengine import connect, Document, IntField, StringField, ListField |
| 4 | + |
| 5 | +from tests.utils import needs_mongodb_v26 |
4 | 6 |
|
5 | 7 | __all__ = ("FindAndModifyTest",) |
6 | 8 |
|
@@ -94,6 +96,37 @@ def test_modify_with_fields(self): |
94 | 96 | self.assertEqual(old_doc.to_mongo(), {"_id": 1}) |
95 | 97 | self.assertDbEqual([{"_id": 0, "value": 0}, {"_id": 1, "value": -1}]) |
96 | 98 |
|
| 99 | + @needs_mongodb_v26 |
| 100 | + def test_modify_with_push(self): |
| 101 | + class BlogPost(Document): |
| 102 | + tags = ListField(StringField()) |
| 103 | + |
| 104 | + BlogPost.drop_collection() |
| 105 | + |
| 106 | + blog = BlogPost.objects.create() |
| 107 | + |
| 108 | + # Push a new tag via modify with new=False (default). |
| 109 | + BlogPost(id=blog.id).modify(push__tags='code') |
| 110 | + self.assertEqual(blog.tags, []) |
| 111 | + blog.reload() |
| 112 | + self.assertEqual(blog.tags, ['code']) |
| 113 | + |
| 114 | + # Push a new tag via modify with new=True. |
| 115 | + blog = BlogPost.objects(id=blog.id).modify(push__tags='java', new=True) |
| 116 | + self.assertEqual(blog.tags, ['code', 'java']) |
| 117 | + |
| 118 | + # Push a new tag with a positional argument. |
| 119 | + blog = BlogPost.objects(id=blog.id).modify( |
| 120 | + push__tags__0='python', |
| 121 | + new=True) |
| 122 | + self.assertEqual(blog.tags, ['python', 'code', 'java']) |
| 123 | + |
| 124 | + # Push multiple new tags with a positional argument. |
| 125 | + blog = BlogPost.objects(id=blog.id).modify( |
| 126 | + push__tags__1=['go', 'rust'], |
| 127 | + new=True) |
| 128 | + self.assertEqual(blog.tags, ['python', 'go', 'rust', 'code', 'java']) |
| 129 | + |
97 | 130 |
|
98 | 131 | if __name__ == '__main__': |
99 | 132 | unittest.main() |
0 commit comments