Skip to content

Commit e51ee40

Browse files
authored
Merge pull request #2865 from bagerard/add_test_deepcopy_and_regex
Add test for deepcopy and regex
2 parents a7303d1 + 164d660 commit e51ee40

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

Diff for: tests/document/test_instance.py

+48
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import copy
12
import os
23
import pickle
34
import unittest
@@ -3848,6 +3849,53 @@ class User(Document):
38483849
with pytest.raises(DuplicateKeyError):
38493850
User.objects().select_related()
38503851

3852+
def test_deepcopy(self):
3853+
regex_field = StringField(regex=r"(^ABC\d\d\d\d$)")
3854+
no_regex_field = StringField()
3855+
# Copy copied field object
3856+
copy.deepcopy(copy.deepcopy(regex_field))
3857+
copy.deepcopy(copy.deepcopy(no_regex_field))
3858+
# Copy same field object multiple times to make sure we restore __deepcopy__ correctly
3859+
copy.deepcopy(regex_field)
3860+
copy.deepcopy(regex_field)
3861+
copy.deepcopy(no_regex_field)
3862+
copy.deepcopy(no_regex_field)
3863+
3864+
def test_deepcopy_with_reference_itself(self):
3865+
class User(Document):
3866+
name = StringField(regex=r"(.*)")
3867+
other_user = ReferenceField("self")
3868+
3869+
user1 = User(name="John").save()
3870+
User(name="Bob", other_user=user1).save()
3871+
3872+
user1.other_user = user1
3873+
user1.save()
3874+
for u in User.objects:
3875+
copied_u = copy.deepcopy(u)
3876+
assert copied_u is not u
3877+
assert copied_u._fields["name"] is u._fields["name"]
3878+
assert (
3879+
copied_u._fields["name"].regex is u._fields["name"].regex
3880+
) # Compiled regex objects are atomic
3881+
3882+
def test_from_son_with_auto_dereference_disabled(self):
3883+
class User(Document):
3884+
name = StringField(regex=r"(^ABC\d\d\d\d$)")
3885+
3886+
data = {"name": "ABC0000"}
3887+
user_obj = User._from_son(son=data, _auto_dereference=False)
3888+
3889+
assert user_obj._fields["name"] is not User.name
3890+
assert (
3891+
user_obj._fields["name"].regex is User.name.regex
3892+
) # Compiled regex are atomic
3893+
copied_user = copy.deepcopy(user_obj)
3894+
assert user_obj._fields["name"] is not copied_user._fields["name"]
3895+
assert (
3896+
user_obj._fields["name"].regex is copied_user._fields["name"].regex
3897+
) # Compiled regex are atomic
3898+
38513899
def test_embedded_document_failed_while_loading_instance_when_it_is_not_a_dict(
38523900
self,
38533901
):

0 commit comments

Comments
 (0)