コード例 #1
0
def test_no_sources(translator, document, variable):
    """No sources defined - raises an exception."""
    variable.sources = []

    type_translator = ListTranslator(translator, document, variable, None)
    with pytest.raises(SourceNotFoundException):
        _ = type_translator()
コード例 #2
0
def test_source_is_dict(translator, document, variable):
    variable.sources = ["source1"]
    document.variable_value.return_value = {"a": 1}
    translator.translate = lambda doc, _parent_id, _source_parent_id: {"aa": doc["a"] + 100}

    type_translator = ListTranslator(translator, document, variable, None)
    assert type_translator() == [{"aa": 101}]
コード例 #3
0
def test_two_sources_both_empty(translator, document, variable):
    """Two sources defined, and both are present but empty; an empty list is created."""
    variable.sources = ["source1", "source2"]
    document.variable_value.return_value = []

    type_translator = ListTranslator(translator, document, variable, None)
    assert type_translator() == []
コード例 #4
0
def test_two_sources_both_missing(translator, document, variable):
    """Two sources defined, but both are missing from the source document; an empty list is created."""
    variable.sources = ["source1", "source2"]
    document.variable_value.side_effect = SourceNotFoundException

    type_translator = ListTranslator(translator, document, variable, None)
    assert type_translator() == []
コード例 #5
0
def test_one_source(translator, document, variable):
    """One source is specified; a result list is made from that source."""
    variable.sources = ["source1"]
    document.variable_value.return_value = [1, 2, 3]
    translator.translate = lambda doc, _parent_id, _source_parent_id: 100 + doc

    type_translator = ListTranslator(translator, document, variable, None)
    assert type_translator() == [101, 102, 103]
コード例 #6
0
def test_combine_lists(translator, document, variable):
    """When two sources both have items, they get combined into one list."""
    def variable_value(var, _parent_id):
        if var.var_id == "source1":
            return [1, 2, 3]
        return [4, 5]

    variable.sources = ["source1", "source2"]
    document.variable_value = variable_value
    translator.translate = lambda doc, _parent_id, _source_parent_id: 100 + doc

    type_translator = ListTranslator(translator, document, variable, None)
    translated = type_translator()
    assert translated == [101, 102, 103, 104, 105]
コード例 #7
0
def test_two_sources_one_empty(translator, document, variable):
    """Two sources are defined, but one is empty."""
    def variable_value(var, _parent_id):
        if var.var_id == "source1":
            return []
        return [1, 2, 3]

    variable.sources = ["source1", "source2"]
    document.variable_value = variable_value
    translator.translate = lambda doc, _parent_id, _source_parent_id: 100 + doc

    type_translator = ListTranslator(translator, document, variable, None)
    translated = type_translator()
    assert translated == [101, 102, 103]
コード例 #8
0
def test_source_order_matters(translator, document, variable):
    """Reversing the order of the sources in an equivalent change in the order of the
    resulting list."""
    def variable_value(var, _parent_id):
        if var.var_id == "source1":
            return [1, 2, 3]
        return [4, 5]

    variable.sources = ["source2", "source1"]
    document.variable_value = variable_value
    translator.translate = lambda doc, _parent_id, _source_parent_id: 100 + doc

    type_translator = ListTranslator(translator, document, variable, None)
    translated = type_translator()
    assert translated == [104, 105, 101, 102, 103]
コード例 #9
0
def test_translate_first_source_is_not_descendant(translator, document, variable):
    def variable_value(var, _parent_id):
        if var.var_id == "source1":
            return [1, 2, 3]
        return [4, 5]

    parent_source = Mock()
    parent_source.check_ancestor = lambda source_id: source_id != "source1"

    parent_id = "parent"
    variable.sources = ["source1", "source2"]
    variable.track.source = {parent_id: parent_source}
    document.variable_value = variable_value
    translator.translate = lambda doc, _parent_id, _source_parent_id: 100 + doc

    type_translator = ListTranslator(translator, document, variable, parent_id)
    translated = type_translator()
    assert translated == [104, 105]