def test___eq__(): filter_node1 = query.FilterNode("a", "=", 7) filter_node2 = query.FilterNode("b", ">", 7.5) filter_node3 = query.FilterNode("c", "<", "now") or_node1 = query.DisjunctionNode(filter_node1, filter_node2) or_node2 = query.DisjunctionNode(filter_node2, filter_node1) or_node3 = query.DisjunctionNode(filter_node1, filter_node3) or_node4 = unittest.mock.sentinel.or_node assert or_node1 == or_node1 assert not or_node1 == or_node2 assert not or_node1 == or_node3 assert not or_node1 == or_node4
def test_add_node_or_with_disjunction(): clauses = query._BooleanClauses("name", True) node1 = query.FilterNode("a", "=", 7) node2 = query.FilterNode("b", ">", 7.5) node3 = query.DisjunctionNode(node1, node2) clauses.add_node(node3) assert clauses.or_parts == [node1, node2]
def test_pickling(): node1 = query.FilterNode("a", "=", 7) node2 = query.FilterNode("b", ">", 7.5) or_node = query.DisjunctionNode(node1, node2) pickled = pickle.dumps(or_node) unpickled = pickle.loads(pickled) assert or_node == unpickled
def test_constructor_in(): or_node = query.FilterNode("a", "in", ("x", "y", "z")) filter_node1 = query.FilterNode("a", "=", "x") filter_node2 = query.FilterNode("a", "=", "y") filter_node3 = query.FilterNode("a", "=", "z") assert or_node == query.DisjunctionNode(filter_node1, filter_node2, filter_node3)
def test_constructor_many_nodes(): node1 = query.FilterNode("a", "=", 7) node2 = query.FilterNode("b", ">", 7.5) node3 = query.FilterNode("c", "<", "now") node4 = query.FilterNode("d", ">=", 80) result_node = query.DisjunctionNode(node1, node2, node3, node4) assert isinstance(result_node, query.DisjunctionNode) assert result_node._nodes == [node1, node2, node3, node4]
def test__IN(): prop = model.Property("name", indexed=True) or_node = prop._IN(["a", None, "xy"]) expected = query.DisjunctionNode( query.FilterNode(b"name", "=", "a"), query.FilterNode(b"name", "=", None), query.FilterNode(b"name", "=", "xy"), ) assert or_node == expected # Also verify the alias assert or_node == prop.IN(["a", None, "xy"])
def test_resolve(): node1 = query.FilterNode("a", "=", 7) node2 = query.FilterNode("b", ">", 77) or_node = query.DisjunctionNode(node1, node2) bindings = {} used = {} resolved_node = or_node.resolve(bindings, used) assert resolved_node is or_node assert bindings == {} assert used == {}
def test_constructor_convert_or(): node1 = query.FilterNode("a", "=", 7) node2 = query.FilterNode("b", ">", 7.5) node3 = query.DisjunctionNode(node1, node2) node4 = query.FilterNode("d", ">=", 80) result_node = query.ConjunctionNode(node3, node4) assert isinstance(result_node, query.DisjunctionNode) assert result_node._nodes == [ query.ConjunctionNode(node1, node4), query.ConjunctionNode(node2, node4), ]
def test___ne__(): prop = model.Property("name", indexed=True) value = 7.0 expected = query.DisjunctionNode( query.FilterNode(b"name", "<", value), query.FilterNode(b"name", ">", value), ) or_node_left = prop != value assert or_node_left == expected or_node_right = value != prop assert or_node_right == expected
def test_resolve_with_in(): prop = model.Property(name="val") param = query.Parameter("replace") parameter_node = query.ParameterNode(prop, "in", param) value = (19, 20, 28) bindings = {"replace": value} used = {} resolved_node = parameter_node.resolve(bindings, used) assert resolved_node == query.DisjunctionNode( query.FilterNode("val", "=", 19), query.FilterNode("val", "=", 20), query.FilterNode("val", "=", 28), ) assert used == {"replace": True}
def test_add_node_and_with_disjunction(): clauses = query._BooleanClauses("name", False) node1 = query.FilterNode("a", "=", 7) node2 = query.FilterNode("b", ">", 7.5) clauses.or_parts = [[node1], [node2]] # Modify to see the "broadcast" node3 = query.FilterNode("c", "<", "now") node4 = query.FilterNode("d", ">=", 80) node5 = query.DisjunctionNode(node3, node4) clauses.add_node(node5) assert clauses.or_parts == [ [node1, node3], [node1, node4], [node2, node3], [node2, node4], ]
def test_resolve_changed(): node1 = unittest.mock.Mock(spec=query.FilterNode) node2 = query.FilterNode("b", ">", 77) node3 = query.FilterNode("c", "=", 7) node1.resolve.return_value = node3 or_node = query.DisjunctionNode(node1, node2) bindings = {} used = {} resolved_node = or_node.resolve(bindings, used) assert isinstance(resolved_node, query.DisjunctionNode) assert resolved_node._nodes == [node3, node2] assert bindings == {} assert used == {} node1.resolve.assert_called_once_with(bindings, used)
def test___repr__(): node1 = query.FilterNode("a", "=", 7) node2 = query.FilterNode("b", ">", 7.5) or_node = query.DisjunctionNode(node1, node2) expected = "OR(FilterNode('a', '=', 7), FilterNode('b', '>', 7.5))" assert repr(or_node) == expected
def test___iter__(): node1 = query.FilterNode("a", "=", 7) node2 = query.FilterNode("b", ">", 7.5) or_node = query.DisjunctionNode(node1, node2) assert list(or_node) == or_node._nodes
def test_constructor_no_nodes(): with pytest.raises(TypeError): query.DisjunctionNode()
def test_constructor_ne(): or_node = query.FilterNode("a", "!=", 2.5) filter_node1 = query.FilterNode("a", "<", 2.5) filter_node2 = query.FilterNode("a", ">", 2.5) assert or_node == query.DisjunctionNode(filter_node1, filter_node2)
def test_constructor(): with pytest.raises(NotImplementedError): query.DisjunctionNode()
def test_constructor_one_node(): node = query.FilterNode("a", "=", 7) result_node = query.DisjunctionNode(node) assert result_node is node