예제 #1
0
def test_print_full(tmpdir, capsys):
    """
    Test --print option for different types of inputs.
    """
    filename = tmpdir.join("environment.devenv.yml")
    filename.write(
        textwrap.dedent(
            """\
        name: a
        dependencies:
          - a_dependency
          - channel::another_dependency ==3.14
        environment:
          PYTHONPATH: {{ root }}/source
    """
        )
    )
    assert devenv.main(["--file", str(filename), "--quiet", "--print-full"]) == 0
    out, err = capsys.readouterr()
    assert err == ""
    assert "dependencies:" in out
    assert "- a_dependency" in out
    assert "- channel::another_dependency ==3.14" in out
    assert "name: a" in out
    assert "environment:" in out
    assert "PYTHONPATH:" in out
예제 #2
0
def test_min_version_failure(tmpdir, capsys):
    """
    Check the "min_conda_devenv_version()" fails with the expected message.
    """
    import conda_devenv
    filename = tmpdir.join('environment.devenv.yml')
    filename.write(
        textwrap.dedent('''\
        {{ min_conda_devenv_version("999.9") }}
        name: a                
    '''))
    with pytest.raises(SystemExit) as e:
        devenv.main(['--file', str(filename)])
    assert e.value.code == 1
    out, err = capsys.readouterr()
    assert out == ''
    msg = 'This file requires at minimum conda-devenv 999.9, but you have {ver} installed.'
    assert msg.format(ver=conda_devenv.__version__) in err
예제 #3
0
def test_error_message_environment_file_not_found(capsys, tmpdir,
                                                  explicit_file, monkeypatch):
    monkeypatch.chdir(str(tmpdir))
    args = ["--file", "invalid.devenv.yml"] if explicit_file else []
    expected_name = "invalid.devenv.yml" if explicit_file else "environment.devenv.yml"
    assert devenv.main(args) == 1
    out, err = capsys.readouterr()
    assert out == ""
    assert err == 'File "{}" does not exist.\n'.format(
        str(tmpdir / expected_name))
예제 #4
0
def test_version(capsys):
    """
    Test --version flag.
    """
    from conda_devenv import __version__ as version

    assert devenv.main(["--version"]) == 0
    out, err = capsys.readouterr()
    assert err == ""
    assert version in out
예제 #5
0
def test_version(capsys):
    """
    Test --version flag.
    """
    from conda_devenv._version import version
    assert devenv.main(['--version']) == 0
    out, err = capsys.readouterr()
    assert err == ''
    assert version in out

    import conda_devenv
    assert conda_devenv.__version__ == version
예제 #6
0
def test_min_version_ok(tmpdir, capsys):
    """
    Check the "min_conda_devenv_version()" does not fail with current version.
    """
    import conda_devenv
    filename = tmpdir.join('environment.devenv.yml')
    filename.write(
        textwrap.dedent('''\
        {{{{ min_conda_devenv_version("{}") }}}}
        name: a                
    '''.format(conda_devenv.__version__)))
    assert devenv.main(['--file', str(filename), '--print-full']) == 0
예제 #7
0
def test_handle_input_file(
    tmpdir,
    input_name,
    write_scripts_call_count,
    return_none,
    no_prune,
    truncate_call_count,
):
    """
    Test how conda-devenv handles input files: devenv.yml and pure .yml files.
    """
    argv = []

    def call_conda_mock():
        argv[:] = sys.argv[:]
        # conda's env main() function sometimes returns None and other times raises SystemExit
        if return_none:
            return None
        else:
            sys.exit(0)

    devenv._call_conda.side_effect = call_conda_mock

    filename = tmpdir.join(input_name)
    filename.write(
        textwrap.dedent(
            """\
        name: a
        dependencies:
          - a_dependency
    """
        )
    )
    devenv_cmdline_args = ["--file", str(filename), "--quiet"]
    expected_conda_cmdline_args = [
        "env",
        "update",
        "--file",
        tmpdir.join("environment.yml"),
        "--prune",
        "--quiet",
    ]
    if no_prune:
        devenv_cmdline_args.append("--no-prune")
        expected_conda_cmdline_args.remove("--prune")

    assert devenv.main(devenv_cmdline_args) == 0
    assert devenv._call_conda.call_count == 1
    assert argv == expected_conda_cmdline_args
    assert (
        devenv.write_activate_deactivate_scripts.call_count == write_scripts_call_count
    )
    assert devenv.truncate_history_file.call_count == truncate_call_count
예제 #8
0
def test_get_env(tmpdir, monkeypatch):
    """
    Test get_env jinja function with required env var passed via command line.
    """
    filename = tmpdir.join("environment.devenv.yml")
    filename.write(
        textwrap.dedent("""\
        name: a
        dependencies:
          - python ={{ get_env("PY", valid=["3.6"]) }}
    """))
    monkeypatch.delenv("PY", raising=False)
    assert devenv.main(["--file",
                        str(filename), "--quiet", "-e", "PY=3.6"]) == 0
예제 #9
0
def test_env_manager_option(option, env_manager, mocker, monkeypatch,
                            tmp_path):
    monkeypatch.delenv("CONDA_DEVENV_ENV_MANAGER", raising=False)
    if option is None:
        env_manager_args = []
        if env_manager != "conda":
            pytest.skip("Without env-manger option use defaults to conda")
    else:
        env_manager_args = [option, env_manager]

    filename = tmp_path.joinpath("environment.yml")
    filename.write_text("name: a")
    devenv_cmdline_args = ["--file", str(filename)] + env_manager_args

    assert devenv.main(devenv_cmdline_args) == 0
    assert devenv._call_conda.call_args == mocker.call(env_manager)
예제 #10
0
def test_print(tmpdir, input_name, capsys):
    """
    Test --print option for different types of inputs.
    """
    filename = tmpdir.join(input_name)
    filename.write(
        textwrap.dedent("""\
        name: a
        dependencies:
          - a_dependency
          - channel::another_dependency ==3.14
    """))
    assert devenv.main(["--file", str(filename), "--quiet", "--print"]) == 0
    out, err = capsys.readouterr()
    assert "dependencies:" in out
    assert "- a_dependency" in out
    assert "- channel::another_dependency ==3.14" in out
    assert "name: a" in out
예제 #11
0
def test_print(tmpdir, input_name, capsys):
    """
    Test --print option for different types of inputs.
    """
    filename = tmpdir.join(input_name)
    filename.write(
        textwrap.dedent('''\
        name: a
        dependencies:
          - a_dependency
          - channel::another_dependency ==3.14
    '''))
    assert devenv.main(['--file', str(filename), '--quiet', '--print']) == 0
    out, err = capsys.readouterr()
    assert 'dependencies:' in out
    assert '- a_dependency' in out
    assert '- channel::another_dependency ==3.14' in out
    assert 'name: a' in out
예제 #12
0
def test_env_var_cmdline_args(tmpdir):
    """
    Test env vars passed via -e/--env_var.
    """
    import os

    filename = tmpdir.join("environment.devenv.yml")
    filename.write(
        textwrap.dedent("""\
        name: a
        dependencies:
          - python ={{ os.environ["PY"] }}
    """))
    assert (devenv.main([
        "--file",
        str(filename), "--quiet", "-e", "DEV", "--env-var", "PY=3.6"
    ]) == 0)
    assert os.environ["DEV"] == ""
    assert os.environ["PY"] == "3.6"
예제 #13
0
def test_unknown_env_manager_option(option, capsys, monkeypatch, tmp_path):
    env_manager = "foo"
    if option == "ENV_VAR":
        monkeypatch.setenv("CONDA_DEVENV_ENV_MANAGER", env_manager)
        env_manager_args = []
        config_source = "environment variable"
    else:
        monkeypatch.delenv("CONDA_DEVENV_ENV_MANAGER", raising=False)
        env_manager_args = [option, env_manager]
        config_source = "'--env-manager' ('-m') option"

    filename = tmp_path.joinpath("environment.yml")
    filename.write_text("name: a")
    devenv_cmdline_args = ["--file", str(filename)] + env_manager_args

    assert devenv.main(devenv_cmdline_args) == 1
    out, err = capsys.readouterr()
    assert out == ""
    assert (
        err.strip() ==
        f'conda-devenv does not know the enviroment manager "foo" obtained from {config_source}.'
    )
예제 #14
0
def test_verbose(mocker, tmp_path):
    argv = []

    def call_conda_mock(env_manager=""):
        argv[:] = sys.argv[:]
        return None

    devenv._call_conda.side_effect = call_conda_mock

    filename = tmp_path.joinpath("environment.yml")
    filename.write_text("name: a")
    devenv_cmdline_args = ["--file", str(filename), "-v", "--verbose"]
    expected_conda_cmdline_args = [
        "env",
        "update",
        "--file",
        str(filename),
        "--prune",
        "-vv",
    ]
    assert devenv.main(devenv_cmdline_args) == 0
    assert devenv._call_conda.call_count == 1
    assert argv == expected_conda_cmdline_args
예제 #15
0
def test_print_full(tmpdir, capsys):
    """
    Test --print option for different types of inputs.
    """
    filename = tmpdir.join('environment.devenv.yml')
    filename.write(
        textwrap.dedent('''\
        name: a
        dependencies:
          - a_dependency
          - channel::another_dependency ==3.14
        environment:
          PYTHONPATH: {{ root }}/source
    '''))
    assert devenv.main(['--file',
                        str(filename), '--quiet', '--print-full']) == 0
    out, err = capsys.readouterr()
    assert err == ''
    assert 'dependencies:' in out
    assert '- a_dependency' in out
    assert '- channel::another_dependency ==3.14' in out
    assert 'name: a' in out
    assert 'environment:' in out
    assert 'PYTHONPATH:' in out