Răsfoiți Sursa

add test for removal from subfolder

Fabian Peter Hammerle 2 ani în urmă
părinte
comite
4df77ef79e
2 a modificat fișierele cu 39 adăugiri și 5 ștergeri
  1. 3 1
      free_disk/__init__.py
  2. 36 4
      tests/test_cleanup.py

+ 3 - 1
free_disk/__init__.py

@@ -75,7 +75,9 @@ def _main() -> None:
         for filename in filenames
     ]
     delete_re = re.compile(args.delete_re)
-    file_mtime_paths = [(os.stat(p).st_mtime, p) for p in file_paths if delete_re.match(p)]
+    file_mtime_paths = [
+        (os.stat(p).st_mtime, p) for p in file_paths if delete_re.match(p)
+    ]
     file_mtime_paths.sort()
     removed_files_counter = 0
     last_mtime = None

+ 36 - 4
tests/test_cleanup.py

@@ -11,8 +11,8 @@ import free_disk
 _DiskUsage = collections.namedtuple("_DiskUsage", ("free",))
 
 
-def _folder_size_bytes(path: pathlib.Path) -> int:
-    return sum(p.stat().st_size for p in path.rglob("*"))
+def _folder_content_size_bytes(path: pathlib.Path) -> int:
+    return sum(p.stat().st_size for p in path.rglob("*") if p.is_file())
 
 
 def test__main_remove_some(
@@ -25,7 +25,7 @@ def test__main_remove_some(
     tmp_path.joinpath("e").write_bytes(b"d" * 7)
     with unittest.mock.patch(
         "shutil.disk_usage",
-        lambda p: _DiskUsage(free=42 - _folder_size_bytes(tmp_path)),
+        lambda p: _DiskUsage(free=42 - _folder_content_size_bytes(tmp_path)),
     ), unittest.mock.patch(
         "sys.argv", ["", "--free-bytes", "30B", str(tmp_path)]
     ), caplog.at_level(
@@ -49,6 +49,38 @@ def test__main_remove_some(
     )
 
 
+def test__main_remove_from_subfolder(
+    caplog: _pytest.logging.LogCaptureFixture, tmp_path: pathlib.Path
+) -> None:
+    tmp_path.joinpath("a").mkdir()
+    tmp_path.joinpath("a", "aa").write_bytes(b"a" * 4)
+    tmp_path.joinpath("b").write_bytes(b"b" * 3)
+    tmp_path.joinpath("c").write_bytes(b"c" * 5)
+    with unittest.mock.patch(
+        "shutil.disk_usage",
+        lambda p: _DiskUsage(free=42 - _folder_content_size_bytes(tmp_path)),
+    ), unittest.mock.patch(
+        "sys.argv", ["", "--free-bytes", "35B", str(tmp_path)]
+    ), caplog.at_level(
+        logging.DEBUG
+    ):
+        free_disk._main()
+    assert {p.name for p in tmp_path.rglob("*")} == {"a", "c"}
+    assert caplog.record_tuples[:-1] == [
+        ("root", logging.DEBUG, m)
+        for m in [
+            "Required free bytes: 35",
+            "_DiskUsage(free=30)",
+            f"Removed file {tmp_path.joinpath('a', 'aa')}",
+            f"Removed file {tmp_path.joinpath('b')}",
+        ]
+    ]
+    assert caplog.records[-1].levelno == logging.INFO
+    assert caplog.records[-1].message.startswith(
+        "Removed 2 file(s) with modification date <= 20"
+    )
+
+
 def test__main_sufficient_space(
     caplog: _pytest.logging.LogCaptureFixture, tmp_path: pathlib.Path
 ) -> None:
@@ -57,7 +89,7 @@ def test__main_sufficient_space(
     tmp_path.joinpath("c").write_bytes(b"c" * 5)
     with unittest.mock.patch(
         "shutil.disk_usage",
-        lambda p: _DiskUsage(free=42 - _folder_size_bytes(tmp_path)),
+        lambda p: _DiskUsage(free=42 - _folder_content_size_bytes(tmp_path)),
     ), unittest.mock.patch(
         "sys.argv", ["", "--free-bytes", "30B", str(tmp_path)]
     ), caplog.at_level(