1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
import os
import platform
import sys
import pytest
from pytest_mock import MockerFixture
from commitizen import cli, commands
from commitizen.__version__ import __version__
from commitizen.config.base_config import BaseConfig
from tests.utils import skip_below_py_3_10
def test_version_for_showing_project_version_error(config, capsys):
# No version specified in config
commands.Version(
config,
{"project": True},
)()
captured = capsys.readouterr()
assert "No project information in this project." in captured.err
def test_version_for_showing_project_version(config, capsys):
config.settings["version"] = "v0.0.1"
commands.Version(
config,
{"project": True},
)()
captured = capsys.readouterr()
assert "v0.0.1" in captured.out
@pytest.mark.parametrize("project", (True, False))
def test_version_for_showing_commitizen_version(config, capsys, project: bool):
commands.Version(
config,
{"project": project, "commitizen": True},
)()
captured = capsys.readouterr()
assert f"{__version__}" in captured.out
def test_version_for_showing_both_versions_no_project(config, capsys):
commands.Version(
config,
{"verbose": True},
)()
captured = capsys.readouterr()
assert f"Installed Commitizen Version: {__version__}" in captured.out
assert "No project information in this project." in captured.err
def test_version_for_showing_both_versions(config, capsys):
config.settings["version"] = "v0.0.1"
commands.Version(
config,
{"verbose": True},
)()
captured = capsys.readouterr()
expected_out = (
f"Installed Commitizen Version: {__version__}\nProject Version: v0.0.1"
)
assert expected_out in captured.out
def test_version_for_showing_commitizen_system_info(config, capsys):
commands.Version(
config,
{"report": True},
)()
captured = capsys.readouterr()
assert f"Commitizen Version: {__version__}" in captured.out
assert f"Python Version: {sys.version}" in captured.out
assert f"Operating System: {platform.system()}" in captured.out
@pytest.mark.parametrize("project", (True, False))
@pytest.mark.usefixtures("tmp_git_project")
def test_version_use_version_provider(
mocker: MockerFixture,
config: BaseConfig,
capsys: pytest.CaptureFixture,
project: bool,
):
version = "0.0.0"
mock = mocker.MagicMock(name="provider")
mock.get_version.return_value = version
get_provider = mocker.patch(
"commitizen.commands.version.get_provider", return_value=mock
)
commands.Version(
config,
{
"project": project,
"verbose": not project,
},
)()
captured = capsys.readouterr()
assert version in captured.out
get_provider.assert_called_once()
mock.get_version.assert_called_once()
mock.set_version.assert_not_called()
@skip_below_py_3_10
def test_version_command_shows_description_when_use_help_option(
mocker: MockerFixture, capsys, file_regression
):
# Force consistent terminal width for tests to avoid wrapping differences
# between single and multi-worker pytest modes
original_columns = os.environ.get("COLUMNS")
os.environ["COLUMNS"] = "80"
try:
testargs = ["cz", "version", "--help"]
mocker.patch.object(sys, "argv", testargs)
with pytest.raises(SystemExit):
cli.main()
out, _ = capsys.readouterr()
file_regression.check(out, extension=".txt")
finally:
# Restore original COLUMNS
if original_columns is not None:
os.environ["COLUMNS"] = original_columns
else:
os.environ.pop("COLUMNS", None)
@pytest.mark.parametrize(
"version, expected_version",
[
("1.0.0", "1\n"),
("2.1.3", "2\n"),
("0.0.1", "0\n"),
("0.1.0", "0\n"),
],
)
def test_version_just_major(config, capsys, version: str, expected_version: str):
config.settings["version"] = version
commands.Version(
config,
{
"project": True,
"major": True,
},
)()
captured = capsys.readouterr()
assert expected_version == captured.out
@pytest.mark.parametrize(
"version, expected_version",
[
("1.0.0", "0\n"),
("2.1.3", "1\n"),
("0.0.1", "0\n"),
("0.1.0", "1\n"),
],
)
def test_version_just_minor(config, capsys, version: str, expected_version: str):
config.settings["version"] = version
commands.Version(
config,
{
"project": True,
"minor": True,
},
)()
captured = capsys.readouterr()
assert expected_version == captured.out
@pytest.mark.parametrize("argument", ("major", "minor"))
def test_version_just_major_error_no_project(config, capsys, argument: str):
commands.Version(
config,
{
argument: True, # type: ignore[misc]
},
)()
captured = capsys.readouterr()
assert not captured.out
assert (
"Major or minor version can only be used with --project or --verbose."
in captured.err
)
|