Skip to content

Commit 7ab6b37

Browse files
committed
include tests for getfield on all basic ops
1 parent cfd13b6 commit 7ab6b37

File tree

1 file changed

+87
-29
lines changed

1 file changed

+87
-29
lines changed

tests/expression_converter_/test_op_expressions.py

Lines changed: 87 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,50 @@ def _test_conversion_various_types(self, conversion_test):
3333
with self.subTest(_type=_type, val=val):
3434
conversion_test(val)
3535

36+
def _test_conversion_getfield(self, logical_op):
37+
expr = {logical_op: [{"$getField": {"input": "$item", "field": "age"}}, 10]}
38+
self.assertConversionEqual(
39+
expr, {"item.age": 10} if logical_op == "eq" else {"item.age": {logical_op: 10}}
40+
)
41+
42+
def _test_conversion_nested_getfield(self, logical_op):
43+
expr = {
44+
logical_op: [
45+
{
46+
"$getField": {
47+
"input": {"$getField": {"input": "$item", "field": "shelf_life"}},
48+
"field": "age",
49+
}
50+
},
51+
10,
52+
]
53+
}
54+
self.assertConversionEqual(
55+
expr,
56+
{"item.shel_life.age": 10}
57+
if logical_op == "eq"
58+
else {"item.shelf_life.age": {logical_op: 10}},
59+
)
60+
61+
def _test_conversion_dual_getfield_ineligible(self, logical_op):
62+
expr = {
63+
logical_op: [
64+
{
65+
"$getField": {
66+
"input": "$root",
67+
"field": "age",
68+
}
69+
},
70+
{
71+
"$getField": {
72+
"input": "$value",
73+
"field": "age",
74+
}
75+
},
76+
]
77+
}
78+
self.assertNotOptimizable(expr)
79+
3680

3781
class ExpressionTests(ConversionTestCase):
3882
def test_non_dict(self):
@@ -65,22 +109,13 @@ def test_conversion_various_array_types(self):
65109
self._test_conversion_various_types(self._test_conversion_valid_array_type)
66110

67111
def test_conversion_getfield(self):
68-
expr = {"$eq": [{"$getField": {"input": "$item", "field": "age"}}, 10]}
69-
self.assertConversionEqual(expr, {"item.age": 10})
112+
self._test_conversion_getfield("$eq")
70113

71114
def test_conversion_nested_getfield(self):
72-
expr = {
73-
"$eq": [
74-
{
75-
"$getField": {
76-
"input": {"$getField": {"input": "$item", "field": "shelf_life"}},
77-
"field": "age",
78-
}
79-
},
80-
10,
81-
]
82-
}
83-
self.assertConversionEqual(expr, {"item.shel_life.age": 10})
115+
self._test_conversion_nested_getfield("$eq")
116+
117+
def test_conversion_dual_getfield_ineligible(self):
118+
self._test_conversion_dual_getfield_ineligible("$eq")
84119

85120

86121
class InTests(ConversionTestCase):
@@ -104,23 +139,10 @@ def test_conversion_various_types(self):
104139
self._test_conversion_valid_type(val)
105140

106141
def test_conversion_getfield(self):
107-
expr = {"$in": [{"$getField": {"input": "$item", "field": "age"}}, [10]]}
108-
expected = {"item.age": {"$in": [10]}}
109-
self.assertConversionEqual(expr, expected)
142+
self._test_conversion_getfield("$in")
110143

111144
def test_conversion_nested_getfield(self):
112-
expr = {
113-
"$in": [
114-
{
115-
"$getField": {
116-
"input": {"$getField": {"input": "$item", "field": "shelf_life"}},
117-
"field": "age",
118-
}
119-
},
120-
10,
121-
]
122-
}
123-
self.assertConversionEqual(expr, {"item.shelf_life.age": {"$in": [10]}})
145+
self._test_conversion_nested_getfield("$in")
124146

125147
def test_conversion_dual_getfield_ineligible(self):
126148
expr = {
@@ -235,6 +257,15 @@ def _test_conversion_valid_type(self, _type):
235257
def test_conversion_various_types(self):
236258
self._test_conversion_various_types(self._test_conversion_valid_type)
237259

260+
def test_conversion_getfield(self):
261+
self._test_conversion_getfield("$gt")
262+
263+
def test_conversion_nested_getfield(self):
264+
self._test_conversion_nested_getfield("$gt")
265+
266+
def test_conversion_dual_getfield_ineligible(self):
267+
self._test_conversion_dual_getfield_ineligible("$gt")
268+
238269

239270
class GteTests(ConversionTestCase):
240271
def test_conversion(self):
@@ -258,6 +289,15 @@ def _test_conversion_valid_type(self, _type):
258289
def test_conversion_various_types(self):
259290
self._test_conversion_various_types(self._test_conversion_valid_type)
260291

292+
def test_conversion_getfield(self):
293+
self._test_conversion_getfield("$gte")
294+
295+
def test_conversion_nested_getfield(self):
296+
self._test_conversion_nested_getfield("$gte")
297+
298+
def test_conversion_dual_getfield_ineligible(self):
299+
self._test_conversion_dual_getfield_ineligible("$gte")
300+
261301

262302
class LtTests(ConversionTestCase):
263303
def test_conversion(self):
@@ -275,6 +315,15 @@ def _test_conversion_valid_type(self, _type):
275315
def test_conversion_various_types(self):
276316
self._test_conversion_various_types(self._test_conversion_valid_type)
277317

318+
def test_conversion_getfield(self):
319+
self._test_conversion_getfield("$lt")
320+
321+
def test_conversion_nested_getfield(self):
322+
self._test_conversion_nested_getfield("$lt")
323+
324+
def test_conversion_dual_getfield_ineligible(self):
325+
self._test_conversion_dual_getfield_ineligible("$lt")
326+
278327

279328
class LteTests(ConversionTestCase):
280329
def test_conversion(self):
@@ -291,3 +340,12 @@ def _test_conversion_valid_type(self, _type):
291340

292341
def test_conversion_various_types(self):
293342
self._test_conversion_various_types(self._test_conversion_valid_type)
343+
344+
def test_conversion_getfield(self):
345+
self._test_conversion_getfield("$lte")
346+
347+
def test_conversion_nested_getfield(self):
348+
self._test_conversion_nested_getfield("$lte")
349+
350+
def test_conversion_dual_getfield_ineligible(self):
351+
self._test_conversion_dual_getfield_ineligible("$lte")

0 commit comments

Comments
 (0)