-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathtest_changed_files.py
More file actions
86 lines (66 loc) · 2.9 KB
/
Copy pathtest_changed_files.py
File metadata and controls
86 lines (66 loc) · 2.9 KB
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
import pytest
from mergify_cli.ci.scopes import changed_files
from mergify_cli.tests import utils as test_utils
def test_git_changed_files(mock_subprocess: test_utils.SubprocessMocks) -> None:
mock_subprocess.register(["git", "merge-base", "main", "HEAD"])
mock_subprocess.register(["git", "rev-list", "--count", "--all"], "100")
mock_subprocess.register(["git", "merge-base", "main", "HEAD"])
mock_subprocess.register(
["git", "diff", "--name-only", "--diff-filter=ACMRTD", "main...HEAD"],
"file1.py\nfile2.js\n",
)
result = changed_files.git_changed_files("main")
assert result == ["file1.py", "file2.js"]
def test_git_changed_files_fetch_alot_of_history(
mock_subprocess: test_utils.SubprocessMocks,
) -> None:
sha = "b3deb84c4befe1918995b18eb06fa05f9074636d"
mock_subprocess.register(
["git", "merge-base", sha, "HEAD"],
"No such git object",
1,
)
mock_subprocess.register(
["git", "fetch", "--no-tags", "--depth=100", "origin", sha, "HEAD"],
)
mock_subprocess.register(["git", "rev-list", "--count", "--all"], "100")
# Loop until we find it
for count in (200, 400, 800, 1600):
mock_subprocess.register(
["git", "merge-base", sha, "HEAD"],
"No such git object",
1,
)
mock_subprocess.register(
["git", "fetch", f"--deepen={count}", "origin", sha, "HEAD"],
)
mock_subprocess.register(["git", "rev-list", "--count", "--all"], f"{count}")
# We found it!
mock_subprocess.register(["git", "merge-base", sha, "HEAD"])
mock_subprocess.register(
["git", "diff", "--name-only", "--diff-filter=ACMRTD", f"{sha}...HEAD"],
"file1.py\nfile2.js\n",
)
result = changed_files.git_changed_files(sha)
assert result == ["file1.py", "file2.js"]
def test_git_changed_files_empty(mock_subprocess: test_utils.SubprocessMocks) -> None:
mock_subprocess.register(["git", "merge-base", "main", "HEAD"])
mock_subprocess.register(["git", "rev-list", "--count", "--all"], "100")
mock_subprocess.register(["git", "merge-base", "main", "HEAD"])
mock_subprocess.register(
["git", "diff", "--name-only", "--diff-filter=ACMRTD", "main...HEAD"],
"",
)
result = changed_files.git_changed_files("main")
assert result == []
def test_run_command_failure(mock_subprocess: test_utils.SubprocessMocks) -> None:
mock_subprocess.register(["git", "merge-base", "main", "HEAD"])
mock_subprocess.register(["git", "rev-list", "--count", "--all"], "100")
mock_subprocess.register(["git", "merge-base", "main", "HEAD"])
mock_subprocess.register(
["git", "diff", "--name-only", "--diff-filter=ACMRTD", "main...HEAD"],
"No such git object",
1,
)
with pytest.raises(changed_files.ChangedFilesError, match="Command failed"):
changed_files.git_changed_files("main")