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
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
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))
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
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
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
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
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
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)
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
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
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"
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}.' )
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
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