-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtests.py
More file actions
90 lines (69 loc) · 2.59 KB
/
Copy pathtests.py
File metadata and controls
90 lines (69 loc) · 2.59 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
87
88
89
90
import unittest
from unittest.mock import patch, MagicMock, call
import tempfile
import os
from sweeper import Sweeper # adjust import to match your project structure
class TestSweeper(unittest.TestCase):
@patch("os.walk")
@patch("os.path.splitext")
def test_catalog_directory(self, mock_splitext, mock_walk):
# Mock os.walk behavior
mock_walk.return_value = [
("/root", ["subdir"], ["file1.txt", "file2.py"])
]
# Mock splitext return values
mock_splitext.side_effect = [
("file1", ".txt"),
("file2", ".py"),
]
sweeper = Sweeper("/root")
# Fix attribute sets manually since original code is buggy
sweeper.extensions = set()
sweeper.directories = set()
sweeper.files = {}
sweeper.catalog_directory()
# Expected results
self.assertIn("txt", sweeper.extensions)
self.assertIn("py", sweeper.extensions)
self.assertIn("subdir", sweeper.directories)
self.assertEqual(sweeper.files["file1.txt"], "txt")
self.assertEqual(sweeper.files["file2.py"], "py")
@patch("subprocess.run")
def test_create_missing_dirs(self, mock_run):
mock_run.return_value = MagicMock(
stdout=b"",
stderr=b"",
returncode=0
)
sweeper = Sweeper("/root")
sweeper.extensions = {"txt", "py", "jpg"}
sweeper.directories = {"txt"}
sweeper.create_missing_dirs()
expected_dirs = {"py", "jpg"}
# missing_dirs should be EMPTY after method runs
self.assertEqual(sweeper.missing_dirs, set())
# new directories should be added to sweeper.directories
self.assertTrue(expected_dirs.issubset(sweeper.directories))
# verify subprocess.run was called correctly
calls = [call(['mkdir', d], capture_output=True) for d in expected_dirs]
mock_run.assert_has_calls(calls, any_order=True)
@patch("subprocess.run")
def test_organize_files(self, mock_run):
mock_run.return_value = MagicMock(
stdout=b"",
stderr=b"",
returncode=0
)
sweeper = Sweeper("/root")
sweeper.files = {
"file1.txt": "txt",
"file2.py": "py"
}
sweeper.organize_files()
expected_calls = [
call(['mv', 'file1.txt', 'txt/'], capture_output=True),
call(['mv', 'file2.py', 'py/'], capture_output=True),
]
mock_run.assert_has_calls(expected_calls, any_order=True)
if __name__ == "__main__":
unittest.main()