1+ from unittest import TestCase
2+
3+ from mockfirestore import MockFirestore
4+ from mockfirestore .query import FieldFilter
5+
6+
7+ class TestWhereField (TestCase ):
8+ def test_collection_whereEquals (self ):
9+ fs = MockFirestore ()
10+ fs ._data = {'foo' : {
11+ 'first' : {'valid' : True },
12+ 'second' : {'gumby' : False }
13+ }}
14+
15+ docs = list (fs .collection ('foo' ).where (field = 'valid' , op = '==' , value = True ).stream ())
16+ self .assertEqual ({'valid' : True }, docs [0 ].to_dict ())
17+
18+ def test_collection_whereEquals_with_filter (self ):
19+ fs = MockFirestore ()
20+ fs ._data = {'foo' : {
21+ 'first' : {'valid' : True },
22+ 'second' : {'gumby' : False }
23+ }}
24+
25+ docs = list (fs .collection ('foo' ).where (filter = FieldFilter ('valid' , '==' , True )).stream ())
26+ self .assertEqual ({'valid' : True }, docs [0 ].to_dict ())
27+
28+ def test_collection_whereNotEquals (self ):
29+ fs = MockFirestore ()
30+ fs ._data = {'foo' : {
31+ 'first' : {'count' : 1 },
32+ 'second' : {'count' : 5 }
33+ }}
34+
35+ docs = list (fs .collection ('foo' ).where ('count' , '!=' , 1 ).stream ())
36+ self .assertEqual ({'count' : 5 }, docs [0 ].to_dict ())
37+
38+ def test_collection_whereLessThan (self ):
39+ fs = MockFirestore ()
40+ fs ._data = {'foo' : {
41+ 'first' : {'count' : 1 },
42+ 'second' : {'count' : 5 }
43+ }}
44+
45+ docs = list (fs .collection ('foo' ).where ('count' , '<' , 5 ).stream ())
46+ self .assertEqual ({'count' : 1 }, docs [0 ].to_dict ())
47+
48+ def test_collection_whereLessThanOrEqual (self ):
49+ fs = MockFirestore ()
50+ fs ._data = {'foo' : {
51+ 'first' : {'count' : 1 },
52+ 'second' : {'count' : 5 }
53+ }}
54+
55+ docs = list (fs .collection ('foo' ).where ('count' , '<=' , 5 ).stream ())
56+ self .assertEqual ({'count' : 1 }, docs [0 ].to_dict ())
57+ self .assertEqual ({'count' : 5 }, docs [1 ].to_dict ())
58+
59+ def test_collection_whereGreaterThan (self ):
60+ fs = MockFirestore ()
61+ fs ._data = {'foo' : {
62+ 'first' : {'count' : 1 },
63+ 'second' : {'count' : 5 }
64+ }}
65+
66+ docs = list (fs .collection ('foo' ).where ('count' , '>' , 1 ).stream ())
67+ self .assertEqual ({'count' : 5 }, docs [0 ].to_dict ())
68+
69+ def test_collection_whereGreaterThanOrEqual (self ):
70+ fs = MockFirestore ()
71+ fs ._data = {'foo' : {
72+ 'first' : {'count' : 1 },
73+ 'second' : {'count' : 5 }
74+ }}
75+
76+ docs = list (fs .collection ('foo' ).where ('count' , '>=' , 1 ).stream ())
77+ self .assertEqual ({'count' : 1 }, docs [0 ].to_dict ())
78+ self .assertEqual ({'count' : 5 }, docs [1 ].to_dict ())
79+
80+ def test_collection_whereMissingField (self ):
81+ fs = MockFirestore ()
82+ fs ._data = {'foo' : {
83+ 'first' : {'count' : 1 },
84+ 'second' : {'count' : 5 }
85+ }}
86+
87+ docs = list (fs .collection ('foo' ).where ('no_field' , '==' , 1 ).stream ())
88+ self .assertEqual (len (docs ), 0 )
89+
90+ def test_collection_whereNestedField (self ):
91+ fs = MockFirestore ()
92+ fs ._data = {'foo' : {
93+ 'first' : {'nested' : {'a' : 1 }},
94+ 'second' : {'nested' : {'a' : 2 }}
95+ }}
96+
97+ docs = list (fs .collection ('foo' ).where ('nested.a' , '==' , 1 ).stream ())
98+ self .assertEqual (len (docs ), 1 )
99+ self .assertEqual ({'nested' : {'a' : 1 }}, docs [0 ].to_dict ())
100+
101+ def test_collection_whereIn (self ):
102+ fs = MockFirestore ()
103+ fs ._data = {'foo' : {
104+ 'first' : {'field' : 'a1' },
105+ 'second' : {'field' : 'a2' },
106+ 'third' : {'field' : 'a3' },
107+ 'fourth' : {'field' : 'a4' },
108+ }}
109+
110+ docs = list (fs .collection ('foo' ).where ('field' , 'in' , ['a1' , 'a3' ]).stream ())
111+ self .assertEqual (len (docs ), 2 )
112+ self .assertEqual ({'field' : 'a1' }, docs [0 ].to_dict ())
113+ self .assertEqual ({'field' : 'a3' }, docs [1 ].to_dict ())
114+
115+ def test_collection_whereArrayContains (self ):
116+ fs = MockFirestore ()
117+ fs ._data = {'foo' : {
118+ 'first' : {'field' : ['val4' ]},
119+ 'second' : {'field' : ['val3' , 'val2' ]},
120+ 'third' : {'field' : ['val3' , 'val2' , 'val1' ]}
121+ }}
122+
123+ docs = list (fs .collection ('foo' ).where ('field' , 'array_contains' , 'val1' ).stream ())
124+ self .assertEqual (len (docs ), 1 )
125+ self .assertEqual (docs [0 ].to_dict (), {'field' : ['val3' , 'val2' , 'val1' ]})
126+
127+ def test_collection_whereArrayContainsAny (self ):
128+ fs = MockFirestore ()
129+ fs ._data = {'foo' : {
130+ 'first' : {'field' : ['val4' ]},
131+ 'second' : {'field' : ['val3' , 'val2' ]},
132+ 'third' : {'field' : ['val3' , 'val2' , 'val1' ]}
133+ }}
134+
135+ contains_any_docs = list (fs .collection ('foo' ).where ('field' , 'array_contains_any' , ['val1' , 'val4' ]).stream ())
136+ self .assertEqual (len (contains_any_docs ), 2 )
137+ self .assertEqual ({'field' : ['val4' ]}, contains_any_docs [0 ].to_dict ())
138+ self .assertEqual ({'field' : ['val3' , 'val2' , 'val1' ]}, contains_any_docs [1 ].to_dict ())
0 commit comments