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
|
import os
import re
from qa.base import BaseTestCase
from qa.shell import gitlint
class ConfigTests(BaseTestCase):
"""Integration tests for gitlint configuration and configuration precedence."""
def test_ignore_by_id(self):
self.create_simple_commit("WIP: Thïs is a title.\nContënt on the second line")
output = gitlint("--ignore", "T5,B4", _tty_in=True, _cwd=self.tmp_git_repo, _ok_code=[1])
expected = '1: T3 Title has trailing punctuation (.): "WIP: Thïs is a title."\n'
self.assertEqualStdout(output, expected)
def test_ignore_by_name(self):
self.create_simple_commit("WIP: Thïs is a title.\nContënt on the second line")
output = gitlint(
"--ignore",
"title-must-not-contain-word,body-first-line-empty",
_cwd=self.tmp_git_repo,
_tty_in=True,
_ok_code=[1],
)
expected = '1: T3 Title has trailing punctuation (.): "WIP: Thïs is a title."\n'
self.assertEqualStdout(output, expected)
def test_verbosity(self):
self.create_simple_commit("WIP: Thïs is a title.\nContënt on the second line")
output = gitlint("-v", _cwd=self.tmp_git_repo, _tty_in=True, _ok_code=[3])
expected = "1: T3\n1: T5\n2: B4\n"
self.assertEqualStdout(output, expected)
output = gitlint("-vv", _cwd=self.tmp_git_repo, _tty_in=True, _ok_code=[3])
self.assertEqualStdout(output, self.get_expected("test_config/test_verbosity_1"))
output = gitlint("-vvv", _cwd=self.tmp_git_repo, _tty_in=True, _ok_code=[3])
self.assertEqualStdout(output, self.get_expected("test_config/test_verbosity_2"))
# test silent mode
output = gitlint("--silent", _cwd=self.tmp_git_repo, _tty_in=True, _ok_code=[3])
self.assertEqualStdout(output, "")
def test_set_rule_option(self):
self.create_simple_commit("This ïs a title.")
output = gitlint("-c", "title-max-length.line-length=5", _tty_in=True, _cwd=self.tmp_git_repo, _ok_code=[3])
self.assertEqualStdout(output, self.get_expected("test_config/test_set_rule_option_1"))
def test_config_from_file(self):
commit_msg = (
"WIP: Thïs is a title thåt is a bit longer.\nContent on the second line\n"
"This line of the body is here because we need it"
)
self.create_simple_commit(commit_msg)
config_path = self.get_sample_path("config/gitlintconfig")
output = gitlint("--config", config_path, _cwd=self.tmp_git_repo, _tty_in=True, _ok_code=[5])
self.assertEqualStdout(output, self.get_expected("test_config/test_config_from_file_1"))
def test_config_from_file_debug(self):
# Test both on existing and new repo (we've had a bug in the past that was unique to empty repos)
repos = [self.tmp_git_repo, self.create_tmp_git_repo()]
for target_repo in repos:
commit_msg = (
"WIP: Thïs is a title thåt is a bit longer.\nContent on the second line\n"
"This line of the body is here because we need it"
)
filename = self.create_simple_commit(commit_msg, git_repo=target_repo)
config_path = self.get_sample_path(os.path.join("config", "gitlintconfig"))
output = gitlint("--config", config_path, "--debug", _cwd=target_repo, _tty_in=True, _ok_code=[5])
expected_kwargs = self.get_debug_vars_last_commit(git_repo=target_repo)
expected_kwargs.update(
{
"config_path": config_path,
"changed_files": [filename],
"changed_files_stats": f"{filename}: 0 additions, 0 deletions",
}
)
self.assertEqualStdout(
output, self.get_expected("test_config/test_config_from_file_debug_1", expected_kwargs)
)
def test_config_from_env(self):
"""Test for configuring gitlint from environment variables"""
# We invoke gitlint, configuring it via env variables, we can check whether gitlint picks these up correctly
# by comparing the debug output with what we'd expect
target_repo = self.create_tmp_git_repo()
commit_msg = (
"WIP: Thïs is a title thåt is a bit longer.\nContent on the second line\n"
"This line of the body is here because we need it"
)
filename = self.create_simple_commit(commit_msg, git_repo=target_repo)
env = self.create_environment(
{
"GITLINT_DEBUG": "1",
"GITLINT_VERBOSITY": "2",
"GITLINT_IGNORE": "T1,T2",
"GITLINT_CONTRIB": "CC1,CT1",
"GITLINT_FAIL_WITHOUT_COMMITS": "1",
"GITLINT_IGNORE_STDIN": "1",
"GITLINT_TARGET": target_repo,
"GITLINT_COMMITS": self.get_last_commit_hash(git_repo=target_repo),
}
)
output = gitlint(_env=env, _cwd=self.tmp_git_repo, _tty_in=True, _ok_code=[5])
expected_kwargs = self.get_debug_vars_last_commit(git_repo=target_repo)
expected_kwargs.update(
{"changed_files": [filename], "changed_files_stats": f"{filename}: 0 additions, 0 deletions"}
)
self.assertEqualStdout(output, self.get_expected("test_config/test_config_from_env_1", expected_kwargs))
# For some env variables, we need a separate test ast they are mutually exclusive with the ones tested above
tmp_commit_msg_file = self.create_tmpfile("WIP: msg-fïlename test.")
env = self.create_environment(
{"GITLINT_DEBUG": "1", "GITLINT_TARGET": target_repo, "GITLINT_SILENT": "1", "GITLINT_STAGED": "1"}
)
output = gitlint(
"--msg-filename", tmp_commit_msg_file, _env=env, _cwd=self.tmp_git_repo, _tty_in=True, _ok_code=[3]
)
# Extract date from actual output to insert it into the expected output
# We have to do this since there's no way for us to deterministically know that date otherwise
p = re.compile("Date: (.*)\n", re.UNICODE | re.MULTILINE)
result = p.search(str(output))
date = result.group(1).strip()
expected_kwargs.update({"date": date})
self.assertEqualStdout(output, self.get_expected("test_config/test_config_from_env_2", expected_kwargs))
|