def test_lambda_query(self): #pylint: disable=unnecessary-lambda self.assertJson(query.lambda_query(lambda a: a), '{"expr":{"var":"a"},"lambda":"a"}') self.assertJson( query.lambda_query(lambda a, b: query.add(a, b)), '{"expr":{"add":[{"var":"a"},{"var":"b"}]},"lambda":["a","b"]}')
def test_lambda_query(self): invalid_lambda = lambda: query.add(1, 2) self.assertRaises(ValueError, lambda: self._q(query.map_(query.lambda_query(invalid_lambda), []))) expr = query.map_(query.lambda_query(lambda a: query.add(a, 1)), [1, 2, 3]) self.assertEqual(self._q(expr), [2, 3, 4])
def test_reduce(self): data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] data2 = ["Fauna", "DB", " ", "rocks"] q1 = query.reduce(query.lambda_query(lambda accum, value: query.add(query.var("accum"), query.var("value"))), 0, data1) q2 = query.reduce(query.lambda_query(lambda accum, value: query.concat([query.var("accum"), query.var("value")])), "", data2) self.assertEqual(self._q(q1), 45) self.assertEqual(self._q(q2), "FaunaDB rocks")
def test_range(self): data = list(range(1, 20)) self._q(query.create_collection({"name": "range_test"})) self._q( query.create_index({ "name": "range_idx", "source": query.collection("range_test"), "active": True, "values": [{ "field": ["data", "value"] }] })) self._q( query.foreach( query.lambda_query(lambda x: query.create( query.collection("range_test"), {"data": { "value": x }})), data)) m = query.match(query.index("range_idx")) q1 = query.select("data", query.paginate(query.range(m, 3, 8))) q2 = query.select("data", query.paginate(query.range(m, 17, 18))) q3 = query.select("data", query.paginate(query.range(m, 19, 0))) self.assertEqual(self._q(q1), [3, 4, 5, 6, 7, 8]) self.assertEqual(self._q(q2), [17, 18]) self.assertEqual(self._q(q3), [])
def test_reduce(self): expected = '{"collection":[1,2,3,4,5,6,7,8,9],"initial":0,"reduce":{"expr":{"add":[{"var":"accum"},{"var":"val"}]},"lambda":["accum","val"]}}' col = [1, 2, 3, 4, 5, 6, 7, 8, 9] lambda_ = query.lambda_query(lambda accum, val: query.add(accum, val)) initial = 0 self.assertJson(query.reduce(lambda_, initial, col), expected)
def test_lambda_query_multiple_args(self): #pylint: disable=unnecessary-lambda expr = query.map_(query.lambda_query(lambda a, b: query.add(a, b)), [[1, 1], [2, 2], [3, 3]]) self.assertEqual(self._q(expr), [2, 4, 6])