Initial commit
This commit is contained in:
95
tests/test_copy_logic.py
Normal file
95
tests/test_copy_logic.py
Normal file
@@ -0,0 +1,95 @@
|
||||
import os
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from main import find_latest_file_in_folder, should_copy_file, compute_file_checksum, verify_copy
|
||||
|
||||
|
||||
|
||||
def _touch(path: Path, mtime: float) -> None:
|
||||
path.write_text('data', encoding='utf-8')
|
||||
os.utime(path, (mtime, mtime))
|
||||
|
||||
|
||||
|
||||
def test_find_latest_file_returns_none_for_missing_folder(tmp_path):
|
||||
missing = tmp_path / 'missing'
|
||||
assert find_latest_file_in_folder(str(missing)) is None
|
||||
|
||||
|
||||
|
||||
def test_find_latest_file_picks_newest(tmp_path):
|
||||
folder = tmp_path / 'src'
|
||||
folder.mkdir()
|
||||
|
||||
now = time.time()
|
||||
older = folder / 'older.bak'
|
||||
newer = folder / 'newer.bak'
|
||||
other = folder / 'other.sql'
|
||||
|
||||
_touch(older, now - 10)
|
||||
_touch(newer, now - 5)
|
||||
_touch(other, now - 1)
|
||||
|
||||
latest = find_latest_file_in_folder(str(folder))
|
||||
assert latest is not None
|
||||
assert latest.name == 'other.sql'
|
||||
|
||||
|
||||
|
||||
def test_should_copy_file_when_target_missing(tmp_path):
|
||||
src = tmp_path / 'src.bak'
|
||||
src.write_text('x', encoding='utf-8')
|
||||
dst = tmp_path / 'dst.bak'
|
||||
|
||||
assert should_copy_file(src, dst) is True
|
||||
|
||||
|
||||
|
||||
def test_should_copy_file_when_source_newer(tmp_path):
|
||||
now = time.time()
|
||||
src = tmp_path / 'src.bak'
|
||||
dst = tmp_path / 'dst.bak'
|
||||
|
||||
_touch(dst, now - 10)
|
||||
_touch(src, now)
|
||||
|
||||
assert should_copy_file(src, dst) is True
|
||||
|
||||
|
||||
|
||||
def test_should_copy_file_when_target_newer_or_equal(tmp_path):
|
||||
now = time.time()
|
||||
src = tmp_path / 'src.bak'
|
||||
dst = tmp_path / 'dst.bak'
|
||||
|
||||
_touch(src, now)
|
||||
_touch(dst, now)
|
||||
|
||||
assert should_copy_file(src, dst) is False
|
||||
|
||||
|
||||
def test_compute_file_checksum_stable(tmp_path):
|
||||
src = tmp_path / 'a.bak'
|
||||
src.write_text('hello', encoding='utf-8')
|
||||
c1 = compute_file_checksum(src)
|
||||
c2 = compute_file_checksum(src)
|
||||
assert c1 == c2
|
||||
|
||||
|
||||
def test_verify_copy_true_for_equal_files(tmp_path):
|
||||
src = tmp_path / 'src.bak'
|
||||
dst = tmp_path / 'dst.bak'
|
||||
src.write_text('data', encoding='utf-8')
|
||||
dst.write_text('data', encoding='utf-8')
|
||||
assert verify_copy(src, dst) is True
|
||||
|
||||
|
||||
def test_verify_copy_false_for_different_files(tmp_path):
|
||||
src = tmp_path / 'src.bak'
|
||||
dst = tmp_path / 'dst.bak'
|
||||
src.write_text('data1', encoding='utf-8')
|
||||
dst.write_text('data2', encoding='utf-8')
|
||||
assert verify_copy(src, dst) is False
|
||||
Reference in New Issue
Block a user