def test_multiple_alternatives():
    inp = {"c": 0}
    op = alternative(keep(["a"]), keep(["b"]), keep(["c"]))

    (res, err) = op(inp)

    assert res == {"c": 0}
    assert err is None
def test_empty():
    inp = None
    op = alternative(keep(["a"]), keep(["b"]))

    (res, err) = op(inp)

    assert res is None
    assert err == {"b": "b not found"}
def test_one_alternative():
    inp = {"a": 0}
    op = alternative(keep(["a"]))

    (res, err) = op(inp)

    assert res == {"a": 0}
    assert err is None
def test_empty():
    def _fail_etl_func(i, e=None):
        return None, "nop"

    operation = alternative(
        substitution(["a"], etl_func=_fail_etl_func),
        substitution(["b"], etl_func=wrap(lambda x: x + 1)))
    (res, err) = operation(None)

    assert res is None
    assert err == {'b': 'b not found'}
def test_some_working():
    def _fail_etl_func(i, e=None):
        return None, "nop"

    inp = {"a": "jajaja", "b": 1}
    operation = alternative(
        substitution(["a"], etl_func=_fail_etl_func),
        substitution(["b"], etl_func=wrap(lambda x: x + 1)))
    (res, err) = operation(inp)

    assert inp == {"a": "jajaja", "b": 1}
    assert res is not None
    assert "a" not in res
    assert "b" in res
    assert res["b"] == 2
    assert err is None