-
-
Notifications
You must be signed in to change notification settings - Fork 279
/
Copy pathtest_cli.py
140 lines (98 loc) · 3.71 KB
/
test_cli.py
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
import subprocess
import sys
import pytest
from commitizen import cli
from commitizen.exceptions import ExpectedExit, NoCommandFoundError, NotAGitProjectError
def test_sysexit_no_argv(mocker, capsys):
testargs = ["cz"]
mocker.patch.object(sys, "argv", testargs)
with pytest.raises(ExpectedExit):
cli.main()
out, _ = capsys.readouterr()
assert out.startswith("usage")
def test_cz_with_arg_but_without_command(mocker):
testargs = ["cz", "--name", "cz_jira"]
mocker.patch.object(sys, "argv", testargs)
with pytest.raises(NoCommandFoundError) as excinfo:
cli.main()
assert "Command is required" in str(excinfo.value)
def test_name(mocker, capsys):
testargs = ["cz", "-n", "cz_jira", "example"]
mocker.patch.object(sys, "argv", testargs)
cli.main()
out, _ = capsys.readouterr()
assert out.startswith("JRA")
@pytest.mark.usefixtures("tmp_git_project")
def test_name_default_value(mocker, capsys):
testargs = ["cz", "example"]
mocker.patch.object(sys, "argv", testargs)
cli.main()
out, _ = capsys.readouterr()
assert out.startswith("fix: correct minor typos in code")
def test_ls(mocker, capsys):
testargs = ["cz", "-n", "cz_jira", "ls"]
mocker.patch.object(sys, "argv", testargs)
cli.main()
out, err = capsys.readouterr()
assert "cz_conventional_commits" in out
assert isinstance(out, str)
def test_arg_debug(mocker):
testargs = ["cz", "--debug", "info"]
mocker.patch.object(sys, "argv", testargs)
cli.main()
assert sys.excepthook.keywords.get("debug") is True
def test_commitizen_excepthook(capsys):
with pytest.raises(SystemExit) as excinfo:
cli.commitizen_excepthook(NotAGitProjectError, NotAGitProjectError(), "")
assert excinfo.type == SystemExit
assert excinfo.value.code == NotAGitProjectError.exit_code
def test_commitizen_debug_excepthook(capsys):
with pytest.raises(SystemExit) as excinfo:
cli.commitizen_excepthook(
NotAGitProjectError,
NotAGitProjectError(),
"",
debug=True,
)
assert excinfo.type == SystemExit
assert excinfo.value.code == NotAGitProjectError.exit_code
assert "NotAGitProjectError" in str(excinfo.traceback[0])
def test_argcomplete_activation():
"""
This function is testing the one-time activation of argcomplete for
commitizen only.
Equivalent to run:
$ eval "$(register-python-argcomplete pytest)"
"""
output = subprocess.run(["register-python-argcomplete", "cz"])
assert output.returncode == 0
def test_commitizen_excepthook_no_raises(capsys):
with pytest.raises(SystemExit) as excinfo:
cli.commitizen_excepthook(
NotAGitProjectError,
NotAGitProjectError(),
"",
no_raise=[NotAGitProjectError.exit_code],
)
assert excinfo.type == SystemExit
assert excinfo.value.code == 0
def test_parse_no_raise_single_integer():
input_str = "1"
result = cli.parse_no_raise(input_str)
assert result == [1]
def test_parse_no_raise_integers():
input_str = "1,2,3"
result = cli.parse_no_raise(input_str)
assert result == [1, 2, 3]
def test_parse_no_raise_error_code():
input_str = "NO_COMMITIZEN_FOUND,NO_COMMITS_FOUND,NO_PATTERN_MAP"
result = cli.parse_no_raise(input_str)
assert result == [1, 3, 5]
def test_parse_no_raise_mix_integer_error_code():
input_str = "NO_COMMITIZEN_FOUND,2,NO_COMMITS_FOUND,4"
result = cli.parse_no_raise(input_str)
assert result == [1, 2, 3, 4]
def test_parse_no_raise_mix_invalid_arg_is_skipped():
input_str = "NO_COMMITIZEN_FOUND,2,nothing,4"
result = cli.parse_no_raise(input_str)
assert result == [1, 2, 4]