Refine scheduling UI and progress

This commit is contained in:
2026-02-19 20:18:11 +03:00
parent 8656c4dac9
commit c172515110
3 changed files with 683 additions and 175 deletions

View File

@@ -4,7 +4,15 @@ from pathlib import Path
import pytest
from main import find_latest_file_in_folder, should_copy_file, compute_file_checksum, verify_copy
import tkinter as tk
from main import (
BackgroundFileCopyApp,
find_latest_file_in_folder,
should_copy_file,
compute_file_checksum,
verify_copy,
)
@@ -93,3 +101,65 @@ def test_verify_copy_false_for_different_files(tmp_path):
src.write_text('data1', encoding='utf-8')
dst.write_text('data2', encoding='utf-8')
assert verify_copy(src, dst) is False
def _create_app():
root = tk.Tk()
root.withdraw()
app = BackgroundFileCopyApp(root)
return app, root
def test_copy_full_folder(tmp_path):
app, root = _create_app()
try:
src = tmp_path / "src"
dst = tmp_path / "dst"
(src / "sub").mkdir(parents=True)
(src / "a.bak").write_text("a", encoding="utf-8")
(src / "sub" / "b.sql").write_text("b", encoding="utf-8")
app.min_free_gb_var.set(0)
app.include_masks_var.set("*.bak;*.sql")
app.exclude_masks_var.set("")
copied, skipped, errors = app.copy_full_folder(src, dst)
assert errors == 0
assert copied == 2
assert (dst / "a.bak").exists()
assert (dst / "sub" / "b.sql").exists()
finally:
root.destroy()
def test_save_and_load_settings(tmp_path, monkeypatch):
app, root = _create_app()
try:
settings_path = tmp_path / "settings.json"
monkeypatch.setattr(app, "get_settings_path", lambda: str(settings_path))
app.add_path_pair("C:/src", "D:/dst", False)
app.include_masks_var.set("*.bak")
app.exclude_masks_var.set("*.tmp")
app.min_free_gb_var.set(2)
app.max_workers_var.set(4)
app.schedules = [{"time": "01:00", "days": ["Mon", "Wed"]}]
app.refresh_schedules_tree()
app.save_settings()
app2, root2 = _create_app()
try:
monkeypatch.setattr(app2, "get_settings_path", lambda: str(settings_path))
app2.load_settings()
profile = app2.profiles.get(app2.active_profile.get())
assert profile is not None
assert profile.get("include_masks") == "*.bak"
assert profile.get("exclude_masks") == "*.tmp"
assert int(profile.get("max_workers")) == 4
assert profile.get("min_free_gb") == 2
assert profile.get("schedules") == [{"time": "01:00", "days": ["Mon", "Wed"]}]
assert len(profile.get("pairs")) == 1
finally:
root2.destroy()
finally:
root.destroy()