def test_expand_run_build_non_installable_prereq(mocker,
                                                 testing_conda_resolve):
    mocker.patch.object(compute_build_graph, '_installable')
    compute_build_graph._installable.return_value = False
    g = compute_build_graph.construct_graph(
        graph_data_dir,
        dummy_worker,
        folders=('b', ),
        run='build',
        matrix_base_dir=test_config_dir,
        conda_resolve=testing_conda_resolve)

    compute_build_graph.expand_run(g,
                                   Config(),
                                   testing_conda_resolve,
                                   run='build',
                                   worker=dummy_worker,
                                   recipes_dir=graph_data_dir)
    assert set(g.nodes()) == {'a-1.0-on-linux', 'b-1.0-on-linux'}

    compute_build_graph.expand_run(g,
                                   Config(),
                                   testing_conda_resolve,
                                   run='build',
                                   worker=dummy_worker,
                                   recipes_dir=graph_data_dir,
                                   matrix_base_dir=test_config_dir,
                                   steps=1)
    assert set(
        g.nodes()) == {'a-1.0-on-linux', 'b-1.0-on-linux', 'c-1.0-on-linux'}
def test_expand_run_all_steps_down(mocker, testing_graph,
                                   testing_conda_resolve):
    """
    Should build/test/upload all of the recipes.
    Start with B
    B depends on A, so build A
    Step down the tree from B to C
    Step down the tree from C to D
    Step down the tree from D to E
    """
    mocker.patch.object(compute_build_graph, '_installable')
    compute_build_graph._installable.return_value = False
    g = compute_build_graph.construct_graph(
        graph_data_dir,
        dummy_worker,
        folders=('b', ),
        run='build',
        matrix_base_dir=test_config_dir,
        conda_resolve=testing_conda_resolve)

    compute_build_graph.expand_run(g,
                                   Config(),
                                   testing_conda_resolve,
                                   run='build',
                                   worker=dummy_worker,
                                   recipes_dir=graph_data_dir,
                                   matrix_base_dir=test_config_dir,
                                   max_downstream=-1,
                                   steps=-1)
    assert set(g.nodes()) == {
        'a-1.0-on-linux', 'b-1.0-on-linux', 'c-1.0-on-linux', 'd-1.0-on-linux',
        'e-1.0-on-linux'
    }
def test_expand_run_no_up_or_down(mocker, testing_graph,
                                  testing_conda_resolve):
    initial_length = len(testing_graph)
    # all packages are installable in the default index
    compute_build_graph.expand_run(testing_graph,
                                   testing_conda_resolve,
                                   worker=dummy_worker,
                                   run='build')
    assert len(testing_graph) == initial_length
def test_expand_run_two_steps_down(mocker, testing_graph,
                                   testing_conda_resolve):
    mocker.patch.object(compute_build_graph, '_installable')
    compute_build_graph._installable.return_value = False
    # second expansion - one more layer out
    g = compute_build_graph.construct_graph(
        graph_data_dir,
        dummy_worker,
        folders=('a', ),
        run='build',
        matrix_base_dir=test_config_dir,
        conda_resolve=testing_conda_resolve)

    compute_build_graph.expand_run(g,
                                   testing_conda_resolve,
                                   run='build',
                                   worker=dummy_worker,
                                   recipes_dir=graph_data_dir,
                                   matrix_base_dir=test_config_dir,
                                   steps=2)
    assert set(
        g.nodes()) == {'a-1.0-on-linux', 'b-1.0-on-linux', 'c-1.0-on-linux'}