|
1 | 1 | import sys
|
2 | 2 | import pytest
|
3 | 3 | from commit_check.main import main
|
4 |
| -from commit_check import DEFAULT_CONFIG |
| 4 | +from commit_check import DEFAULT_CONFIG, PASS, FAIL |
5 | 5 |
|
6 | 6 | CMD = "commit-check"
|
7 | 7 |
|
@@ -115,3 +115,65 @@ def test_main_validate_config_ret_none(self, mocker):
|
115 | 115 | main()
|
116 | 116 | assert m_check_commit.call_count == 1
|
117 | 117 | assert m_check_commit.call_args[0][0] == DEFAULT_CONFIG["checks"]
|
| 118 | + |
| 119 | + @pytest.mark.parametrize( |
| 120 | + "argv, message_result, branch_result, author_name_result, author_email_result, commit_signoff_result, merge_base_result, final_result", |
| 121 | + [ |
| 122 | + ([CMD, "--message"], PASS, PASS, PASS, PASS, PASS, PASS, PASS), |
| 123 | + ([CMD, "--message"], FAIL, PASS, PASS, PASS, PASS, PASS, FAIL), |
| 124 | + ([CMD, "--message", "--commit-signoff"], FAIL, PASS, PASS, PASS, PASS, PASS, FAIL,), |
| 125 | + ([CMD, "--message", "--commit-signoff"], PASS, PASS, PASS, PASS, FAIL, PASS, FAIL,), |
| 126 | + ([CMD, "--message", "--author-name", "--author-email"], PASS, PASS, PASS, PASS, PASS, PASS, PASS,), |
| 127 | + ([CMD, "--message", "--author-name", "--author-email"], FAIL, PASS, PASS, PASS, PASS, PASS, FAIL,), |
| 128 | + ([CMD, "--message", "--author-name", "--author-email"], PASS, PASS, FAIL, PASS, PASS, PASS, FAIL,), |
| 129 | + ([CMD, "--message", "--author-name", "--author-email"], PASS, PASS, PASS, FAIL, PASS, PASS, FAIL,), |
| 130 | + ([CMD, "--message", "--author-name", "--author-email"], PASS, PASS, FAIL, FAIL, PASS, PASS, FAIL,), |
| 131 | + ([CMD, "--message", "--branch", "--author-name", "--author-email", "--commit-signoff", "--merge-base", ], PASS, PASS, PASS, PASS, PASS, PASS, PASS,), |
| 132 | + ([CMD, "--message", "--branch", "--author-name", "--author-email", "--commit-signoff", "--merge-base", ], FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,), |
| 133 | + ([CMD, "--message", "--branch", "--author-name", "--author-email", "--commit-signoff", "--merge-base", ], FAIL, PASS, PASS, PASS, PASS, PASS, FAIL,), |
| 134 | + ([CMD, "--dry-run"], FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, PASS), |
| 135 | + ], |
| 136 | + ) |
| 137 | + def test_main_multiple_checks( |
| 138 | + self, |
| 139 | + mocker, |
| 140 | + argv, |
| 141 | + message_result, |
| 142 | + branch_result, |
| 143 | + author_name_result, |
| 144 | + author_email_result, |
| 145 | + commit_signoff_result, |
| 146 | + merge_base_result, |
| 147 | + final_result, |
| 148 | + ): |
| 149 | + mocker.patch( |
| 150 | + "commit_check.main.validate_config", |
| 151 | + return_value={}, |
| 152 | + ) |
| 153 | + |
| 154 | + mocker.patch( |
| 155 | + "commit_check.commit.check_commit_msg", return_value=message_result |
| 156 | + ) |
| 157 | + mocker.patch( |
| 158 | + "commit_check.commit.check_commit_signoff", |
| 159 | + return_value=commit_signoff_result, |
| 160 | + ) |
| 161 | + |
| 162 | + mocker.patch("commit_check.branch.check_branch", return_value=branch_result) |
| 163 | + mocker.patch( |
| 164 | + "commit_check.branch.check_merge_base", return_value=merge_base_result |
| 165 | + ) |
| 166 | + |
| 167 | + # this is messy. why isn't this a private implementation detail with a |
| 168 | + # public check_author_name and check_author email? |
| 169 | + def author_side_effect(_, check_type: str) -> int: # type: ignore[return] |
| 170 | + assert check_type in ("author_name", "author_email") |
| 171 | + if check_type == "author_name": |
| 172 | + return author_name_result |
| 173 | + elif check_type == "author_email": |
| 174 | + return author_email_result |
| 175 | + |
| 176 | + mocker.patch("commit_check.author.check_author", side_effect=author_side_effect) |
| 177 | + |
| 178 | + sys.argv = argv |
| 179 | + assert main() == final_result |
0 commit comments