Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions tests/data/encoding_test_composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "encoding-test-composer",
"description": "Тест описания для проверки кодировки",
"version": "0.1.0"
}

36 changes: 36 additions & 0 deletions tests/data/encoding_test_pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
[project]
name = "pythonproject-test"
version = "0.4.1"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []


[tool.commitizen]
name = "cz_customize"
tag_format = "v$version"
version_scheme = "pep440"
version_provider = "uv"
update_changelog_on_bump = true
changelog_start_rev = "v1.1.0"

[tool.commitizen.customize]
message_template = "{{ change_type }}{% if scope != 'none' %}({{ scope }}){% endif %}: {{ message }}"
commit_parser = '^(?P<change_type>feat|fix|refactor|test|perf|misc):\s(?P<message>.*)'
schema_pattern = '(feat|fix|refactor|test|perf|misc)(\((api|core)\))?:\s(.{3,})'
bump_pattern = "^(feat|fix|refactor|test|perf|misc)"
change_type_map = { "feat" = "Новое", "fix" = "Исправление" }

[[tool.commitizen.customize.questions]]
name = "change_type"
type = "list"
message = "Выберите тип изменений"
choices = [
{ value = "feat", name = "feat: Новая функциональность" },
{ value = "fix", name = "fix: Исправление" },
{ value = "refactor", name = "refactor: Рефакторинг" },
{ value = "test", name = "test: Изменение авто-тестов" },
{ value = "perf", name = "perf: Оптимизации" },
{ value = "misc", name = "misc: Другое" },
]
92 changes: 92 additions & 0 deletions tests/providers/test_base_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,13 @@
from commitizen.exceptions import VersionProviderUnknown
from commitizen.providers import get_provider
from commitizen.providers.commitizen_provider import CommitizenProvider
from commitizen.providers.composer_provider import ComposerProvider
from commitizen.providers.pep621_provider import Pep621Provider
from commitizen.providers.uv_provider import UvProvider

if TYPE_CHECKING:
from pathlib import Path

from commitizen.config.base_config import BaseConfig


Expand All @@ -22,3 +27,90 @@ def test_raise_for_unknown_provider(config: BaseConfig):
config.settings["version_provider"] = "unknown"
with pytest.raises(VersionProviderUnknown):
get_provider(config)


def test_json_provider_uses_encoding_with_encoding_fixture(
config: BaseConfig,
chdir: Path,
data_dir: Path,
):
"""JsonProvider should correctly read a JSON file with non-ASCII content."""
source = data_dir / "encoding_test_composer.json"
target = chdir / "composer.json"
target.write_text(source.read_text(encoding="utf-8"), encoding="utf-8")

config.settings["encoding"] = "utf-8"
config.settings["version_provider"] = "composer"

provider = get_provider(config)
assert isinstance(provider, ComposerProvider)
assert provider.get_version() == "0.1.0"


def test_toml_provider_uses_encoding_with_encoding_fixture(
config: BaseConfig,
chdir: Path,
data_dir: Path,
):
"""TomlProvider should correctly read a TOML file with non-ASCII content."""
source = data_dir / "encoding_test_pyproject.toml"
target = chdir / "pyproject.toml"
target.write_text(source.read_text(encoding="utf-8"), encoding="utf-8")

config.settings["encoding"] = "utf-8"
config.settings["version_provider"] = "uv"

provider = get_provider(config)
assert isinstance(provider, UvProvider)
assert provider.get_version() == "0.4.1"


def test_json_provider_handles_various_unicode_characters(
config: BaseConfig,
chdir: Path,
):
"""JsonProvider should handle a wide range of Unicode characters."""
config.settings["encoding"] = "utf-8"
config.settings["version_provider"] = "composer"

filename = ComposerProvider.filename
file = chdir / filename
file.write_text(
(
"{\n"
' "name": "多言語-имя-árbol",\n'
' "description": "Emoji 😀 – 漢字 – العربية",\n'
' "version": "0.1.0"\n'
"}\n"
),
encoding="utf-8",
)

provider = get_provider(config)
assert isinstance(provider, ComposerProvider)
assert provider.get_version() == "0.1.0"


def test_toml_provider_handles_various_unicode_characters(
config: BaseConfig,
chdir: Path,
):
"""TomlProvider should handle a wide range of Unicode characters."""
config.settings["encoding"] = "utf-8"
config.settings["version_provider"] = "pep621"

filename = Pep621Provider.filename
file = chdir / filename
file.write_text(
(
"[project]\n"
'name = "多言語-имя-árbol"\n'
'description = "Emoji 😀 – 漢字 – العربية"\n'
'version = "0.1.0"\n'
),
encoding="utf-8",
)

provider = get_provider(config)
assert isinstance(provider, Pep621Provider)
assert provider.get_version() == "0.1.0"
Loading