-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathtest_ensure_fields.py
More file actions
83 lines (51 loc) · 1.92 KB
/
Copy pathtest_ensure_fields.py
File metadata and controls
83 lines (51 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
def test_document_ensure_fields(Sample):
assert Sample.count() == 0
# Instanciate
new_object = Sample({"name": "XXX", "url": "http://example.com"})
new_object.ensure_fields(["test"])
assert "test" not in new_object
new_object.save()
obj = Sample.find_one(fields=["url"])
# FIXME
# Can't ensure fields when no _id
# with pytest.raises(Exception):
# obj.ensure_fields(["name"])
obj = Sample.find_one(fields=["url", "_id"])
assert "name" not in obj
obj.ensure_fields(["name"])
assert Sample.count() == 1
assert obj["name"] == "XXX"
obj = Sample.find_one(fields=["_id", "name"])
assert "url" not in obj
# Update it from elsewhere
Sample.collection.update({}, {"$set": {"name": "YYY"}})
obj.ensure_fields(["url", "name"])
# Only url should have been refreshed
assert obj["url"] == "http://example.com"
assert obj["name"] == "XXX"
obj = Sample.find_one(fields=["_id"])
obj.ensure_fields(["name"])
assert obj["name"] == "YYY"
# Test find()
obj = list(Sample.find({"_id": new_object["_id"]}, fields={"_id": True, "url": True}))[0]
assert obj.get("name") is None
obj.ensure_fields(["name"])
assert obj["name"] == "YYY"
obj = list(Sample.find({"_id": new_object["_id"]}, {"_id": True, "url": True, "x": True}))[0]
assert "x" in obj._fetched_fields
assert obj.get("name") is None
obj.ensure_fields(["name"])
assert obj["name"] == "YYY"
obj = list(Sample.find(fields=["_id"]))[0]
obj.ensure_fields(["name"])
assert obj["name"] == "YYY"
obj2 = Sample.find_by_id(obj["_id"])
obj2.unset_fields({"name": 1})
assert obj2.get("name") is None
obj.ensure_fields(["name"])
assert obj2.get("name") is None
# name should *not* be reloaded yet.
obj.ensure_fields(["name"])
assert obj.get("name") is not None
obj.reload()
assert obj.get("name") is None