155 lines
4.6 KiB
Python
155 lines
4.6 KiB
Python
import pytest
|
|
|
|
from commitizen.cz.conventional_commits.conventional_commits import (
|
|
ConventionalCommitsCz,
|
|
parse_scope,
|
|
parse_subject,
|
|
)
|
|
from commitizen.cz.exceptions import AnswerRequiredError
|
|
|
|
valid_scopes = ["", "simple", "dash-separated", "camelCaseUPPERCASE"]
|
|
|
|
scopes_transformations = [["with spaces", "with-spaces"], [None, ""]]
|
|
|
|
valid_subjects = ["this is a normal text", "aword"]
|
|
|
|
subjects_transformations = [["with dot.", "with dot"]]
|
|
|
|
invalid_subjects = ["", " ", ".", " .", "", None]
|
|
|
|
|
|
def test_parse_scope_valid_values():
|
|
for valid_scope in valid_scopes:
|
|
assert valid_scope == parse_scope(valid_scope)
|
|
|
|
|
|
def test_scopes_transformations():
|
|
for scopes_transformation in scopes_transformations:
|
|
invalid_scope, transformed_scope = scopes_transformation
|
|
assert transformed_scope == parse_scope(invalid_scope)
|
|
|
|
|
|
def test_parse_subject_valid_values():
|
|
for valid_subject in valid_subjects:
|
|
assert valid_subject == parse_subject(valid_subject)
|
|
|
|
|
|
def test_parse_subject_invalid_values():
|
|
for valid_subject in invalid_subjects:
|
|
with pytest.raises(AnswerRequiredError):
|
|
parse_subject(valid_subject)
|
|
|
|
|
|
def test_subject_transformations():
|
|
for subject_transformation in subjects_transformations:
|
|
invalid_subject, transformed_subject = subject_transformation
|
|
assert transformed_subject == parse_subject(invalid_subject)
|
|
|
|
|
|
def test_questions(config):
|
|
conventional_commits = ConventionalCommitsCz(config)
|
|
questions = conventional_commits.questions()
|
|
assert isinstance(questions, list)
|
|
assert isinstance(questions[0], dict)
|
|
|
|
|
|
def test_choices_all_have_keyboard_shortcuts(config):
|
|
conventional_commits = ConventionalCommitsCz(config)
|
|
questions = conventional_commits.questions()
|
|
|
|
list_questions = (q for q in questions if q["type"] == "list")
|
|
for select in list_questions:
|
|
assert all("key" in choice for choice in select["choices"])
|
|
|
|
|
|
def test_small_answer(config):
|
|
conventional_commits = ConventionalCommitsCz(config)
|
|
answers = {
|
|
"prefix": "fix",
|
|
"scope": "users",
|
|
"subject": "email pattern corrected",
|
|
"is_breaking_change": False,
|
|
"body": "",
|
|
"footer": "",
|
|
}
|
|
message = conventional_commits.message(answers)
|
|
assert message == "fix(users): email pattern corrected"
|
|
|
|
|
|
def test_long_answer(config):
|
|
conventional_commits = ConventionalCommitsCz(config)
|
|
answers = {
|
|
"prefix": "fix",
|
|
"scope": "users",
|
|
"subject": "email pattern corrected",
|
|
"is_breaking_change": False,
|
|
"body": "complete content",
|
|
"footer": "closes #24",
|
|
}
|
|
message = conventional_commits.message(answers)
|
|
assert (
|
|
message
|
|
== "fix(users): email pattern corrected\n\ncomplete content\n\ncloses #24" # noqa
|
|
)
|
|
|
|
|
|
def test_breaking_change_in_footer(config):
|
|
conventional_commits = ConventionalCommitsCz(config)
|
|
answers = {
|
|
"prefix": "fix",
|
|
"scope": "users",
|
|
"subject": "email pattern corrected",
|
|
"is_breaking_change": True,
|
|
"body": "complete content",
|
|
"footer": "migrate by renaming user to users",
|
|
}
|
|
message = conventional_commits.message(answers)
|
|
print(message)
|
|
assert (
|
|
message
|
|
== "fix(users): email pattern corrected\n\ncomplete content\n\nBREAKING CHANGE: migrate by renaming user to users" # noqa
|
|
)
|
|
|
|
|
|
def test_example(config):
|
|
"""just testing a string is returned. not the content"""
|
|
conventional_commits = ConventionalCommitsCz(config)
|
|
example = conventional_commits.example()
|
|
assert isinstance(example, str)
|
|
|
|
|
|
def test_schema(config):
|
|
"""just testing a string is returned. not the content"""
|
|
conventional_commits = ConventionalCommitsCz(config)
|
|
schema = conventional_commits.schema()
|
|
assert isinstance(schema, str)
|
|
|
|
|
|
def test_info(config):
|
|
"""just testing a string is returned. not the content"""
|
|
conventional_commits = ConventionalCommitsCz(config)
|
|
info = conventional_commits.info()
|
|
assert isinstance(info, str)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("commit_message", "expected_message"),
|
|
[
|
|
(
|
|
"test(test_scope): this is test msg",
|
|
"this is test msg",
|
|
),
|
|
(
|
|
"test(test_scope)!: this is test msg",
|
|
"this is test msg",
|
|
),
|
|
(
|
|
"test!(test_scope): this is test msg",
|
|
"",
|
|
),
|
|
],
|
|
)
|
|
def test_process_commit(commit_message, expected_message, config):
|
|
conventional_commits = ConventionalCommitsCz(config)
|
|
message = conventional_commits.process_commit(commit_message)
|
|
assert message == expected_message
|