Skip to content

Commit 0724e5e

Browse files
committed
cover walk_ignore generator with tests
1 parent 5813c91 commit 0724e5e

File tree

1 file changed

+73
-6
lines changed

1 file changed

+73
-6
lines changed

tests/cli/files_collector/test_walk_ignore.py

Lines changed: 73 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
import os
12
from os.path import normpath
2-
from typing import TYPE_CHECKING
3+
from typing import TYPE_CHECKING, List
34

45
from cycode.cli.files_collector.walk_ignore import (
56
_collect_top_level_ignore_files,
67
_get_global_ignore_patterns,
78
_walk_to_top,
9+
walk_ignore,
810
)
911

1012
if TYPE_CHECKING:
@@ -44,21 +46,38 @@ def test_walk_to_top() -> None:
4446
def _create_mocked_file_structure(fs: 'FakeFilesystem') -> None:
4547
fs.create_dir('/home/user/project')
4648
fs.create_dir('/home/user/.git')
49+
50+
fs.create_dir('/home/user/project/.cycode')
51+
fs.create_file('/home/user/project/.cycode/config.yaml')
52+
fs.create_dir('/home/user/project/.git')
53+
fs.create_file('/home/user/project/.git/HEAD')
54+
4755
fs.create_file('/home/user/project/.gitignore', contents='*.pyc')
56+
fs.create_file('/home/user/project/ignored.pyc')
57+
fs.create_file('/home/user/project/presented.txt')
58+
4859
fs.create_file('/home/user/project/.cycodeignore', contents='*.log')
49-
fs.create_dir('/home/user/project/subdir')
50-
fs.create_file('/home/user/project/subdir/.gitignore', contents='*.txt')
60+
fs.create_file('/home/user/project/ignored2.log')
61+
fs.create_file('/home/user/project/ignored2.pyc')
62+
fs.create_file('/home/user/project/presented2.txt')
63+
64+
fs.create_dir('/home/user/project/subproject')
65+
fs.create_file('/home/user/project/subproject/.gitignore', contents='*.txt')
66+
fs.create_file('/home/user/project/subproject/ignored.txt')
67+
fs.create_file('/home/user/project/subproject/ignored.log')
68+
fs.create_file('/home/user/project/subproject/ignored.pyc')
69+
fs.create_file('/home/user/project/subproject/presented.py')
5170

5271

5372
def test_collect_top_level_ignore_files(fs: 'FakeFilesystem') -> None:
5473
_create_mocked_file_structure(fs)
5574

5675
# Test with path inside the project
57-
path = normpath('/home/user/project/subdir')
76+
path = normpath('/home/user/project/subproject')
5877
ignore_files = _collect_top_level_ignore_files(path)
5978

6079
assert len(ignore_files) == 3
61-
assert normpath('/home/user/project/subdir/.gitignore') in ignore_files
80+
assert normpath('/home/user/project/subproject/.gitignore') in ignore_files
6281
assert normpath('/home/user/project/.gitignore') in ignore_files
6382
assert normpath('/home/user/project/.cycodeignore') in ignore_files
6483

@@ -85,7 +104,7 @@ def test_collect_top_level_ignore_files(fs: 'FakeFilesystem') -> None:
85104

86105
def test_get_global_ignore_patterns(fs: 'FakeFilesystem') -> None:
87106
_create_mocked_file_structure(fs)
88-
ignore_patterns = _get_global_ignore_patterns('/home/user/project/subdir')
107+
ignore_patterns = _get_global_ignore_patterns('/home/user/project/subproject')
89108

90109
assert len(ignore_patterns) == 5
91110
# default global:
@@ -95,3 +114,51 @@ def test_get_global_ignore_patterns(fs: 'FakeFilesystem') -> None:
95114
assert '*.txt' in ignore_patterns
96115
assert '*.pyc' in ignore_patterns
97116
assert '*.log' in ignore_patterns
117+
118+
119+
def _collect_walk_ignore_files(path: str) -> List[str]:
120+
files = []
121+
for root, _, filenames in walk_ignore(path):
122+
for filename in filenames:
123+
files.append(os.path.join(root, filename))
124+
125+
return files
126+
127+
128+
def test_walk_ignore(fs: 'FakeFilesystem') -> None:
129+
_create_mocked_file_structure(fs)
130+
131+
path = normpath('/home/user/project')
132+
result = _collect_walk_ignore_files(path)
133+
134+
assert len(result) == 6
135+
# ignored globally by default:
136+
assert normpath('/home/user/project/.git/HEAD') not in result
137+
assert normpath('/home/user/project/.cycode/config.yaml') not in result
138+
# ignored by .gitignore in project directory:
139+
assert normpath('/home/user/project/ignored.pyc') not in result
140+
assert normpath('/home/user/project/subproject/ignored.pyc') not in result
141+
# ignored by .gitignore in subproject directory:
142+
assert normpath('/home/user/project/subproject/ignored.txt') not in result
143+
# ignored by .cycodeignore in project directory:
144+
assert normpath('/home/user/project/ignored2.log') not in result
145+
assert normpath('/home/user/project/ignored2.pyc') not in result
146+
assert normpath('/home/user/project/subproject/ignored.log') not in result
147+
# presented after both .gitignore and .cycodeignore:
148+
assert normpath('/home/user/project/.gitignore') in result
149+
assert normpath('/home/user/project/.cycodeignore') in result
150+
assert normpath('/home/user/project/subproject/.gitignore') in result
151+
assert normpath('/home/user/project/presented.txt') in result
152+
assert normpath('/home/user/project/presented2.txt') in result
153+
assert normpath('/home/user/project/subproject/presented.py') in result
154+
155+
path = normpath('/home/user/project/subproject')
156+
result = _collect_walk_ignore_files(path)
157+
158+
assert len(result) == 2
159+
# ignored:
160+
assert normpath('/home/user/project/subproject/ignored.txt') not in result
161+
assert normpath('/home/user/project/subproject/ignored.log') not in result
162+
assert normpath('/home/user/project/subproject/ignored.pyc') not in result
163+
# presented:
164+
assert normpath('/home/user/project/subproject/presented.py') in result

0 commit comments

Comments
 (0)