"""Tests for project_info module.""" from __future__ import annotations from pathlib import Path import pytest from commitizen import project_info def _create_project_files(files: dict[str, str | None]) -> None: for file_path, content in files.items(): path = Path(file_path) if content is None: path.touch() else: path.write_text(content) @pytest.mark.parametrize( ("which_return", "expected"), [ ("/usr/local/bin/pre-commit", True), ("/usr/local/bin/prek", True), (None, False), ("", False), ], ) def test_is_pre_commit_installed(mocker, which_return, expected): mocker.patch("shutil.which", return_value=which_return) assert project_info.is_pre_commit_installed() is expected @pytest.mark.parametrize( ("files", "expected"), [ ( {"pyproject.toml": '[tool.poetry]\nname = "test"\nversion = "0.1.0"'}, "poetry", ), ({"pyproject.toml": "", "uv.lock": ""}, "uv"), ( {"pyproject.toml": '[tool.commitizen]\nversion = "0.1.0"'}, "pep621", ), ({"setup.py": ""}, "pep621"), ({"Cargo.toml": ""}, "cargo"), ({"package.json": ""}, "npm"), ({"composer.json": ""}, "composer"), ({}, "commitizen"), ( { "pyproject.toml": "", "Cargo.toml": "", "package.json": "", "composer.json": "", }, "pep621", ), ], ) def test_get_default_version_provider(chdir, files, expected): _create_project_files(files) assert project_info.get_default_version_provider() == expected @pytest.mark.parametrize( ("files", "expected"), [ ({"pyproject.toml": ""}, "pyproject.toml"), ({}, ".cz.toml"), ], ) def test_get_default_config_filename(chdir, files, expected): _create_project_files(files) assert project_info.get_default_config_filename() == expected @pytest.mark.parametrize( ("files", "expected"), [ ({"pyproject.toml": ""}, "pep440"), ({"setup.py": ""}, "pep440"), ({"package.json": ""}, "semver2"), ({}, "semver2"), ], ) def test_get_default_version_scheme(chdir, files, expected): _create_project_files(files) assert project_info.get_default_version_scheme() == expected