148 lines
4.9 KiB
Python
148 lines
4.9 KiB
Python
"""Test complete workflow: settings → baseline creation → verification."""
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
print("Testing complete baseline workflow with zip_baselines setting")
|
|
print("=" * 70)
|
|
print()
|
|
|
|
# Create test project
|
|
temp_project = tempfile.mkdtemp(prefix="workflow_test_")
|
|
|
|
try:
|
|
# Create some test files
|
|
test_files = {
|
|
"main.py": "# Main file\ndef main():\n print('Hello')\n",
|
|
"utils.py": "# Utilities\ndef helper():\n return 42\n",
|
|
"config.py": "# Configuration\nSETTING = 'value'\n"
|
|
}
|
|
|
|
for filename, content in test_files.items():
|
|
(Path(temp_project) / filename).write_text(content, encoding='utf-8')
|
|
|
|
print(f"✓ Test project created: {temp_project}")
|
|
print(f" Files: {len(test_files)}")
|
|
print()
|
|
|
|
from pyucc.core.differ import BaselineManager
|
|
from pyucc.config import settings as app_settings
|
|
|
|
baseline_dir = tempfile.mkdtemp(prefix="workflow_baselines_")
|
|
|
|
# Scenario 1: Default settings (no zip)
|
|
print("Scenario 1: Default settings (zip_baselines = False)")
|
|
print("-" * 70)
|
|
|
|
# Reset settings to default
|
|
app_settings.save_settings({
|
|
"baseline_dir": baseline_dir,
|
|
"max_keep": 5,
|
|
"zip_baselines": False
|
|
})
|
|
|
|
current_setting = app_settings.get_zip_baselines()
|
|
print(f" Current setting: zip_baselines = {current_setting}")
|
|
|
|
bm1 = BaselineManager(temp_project, baselines_root=baseline_dir)
|
|
baseline_1 = bm1.create_baseline_from_dir(
|
|
temp_project,
|
|
baseline_id="scenario_1_default",
|
|
snapshot=True,
|
|
compute_sha1=False
|
|
)
|
|
|
|
path_1 = bm1._baseline_dir(baseline_1)
|
|
has_dir_1 = os.path.exists(os.path.join(path_1, "files"))
|
|
has_zip_1 = os.path.exists(os.path.join(path_1, "files.zip"))
|
|
|
|
print(f" Baseline created: {baseline_1}")
|
|
print(f" Has files/ directory: {has_dir_1}")
|
|
print(f" Has files.zip: {has_zip_1}")
|
|
|
|
if has_dir_1 and not has_zip_1:
|
|
print(" ✅ Result: Fast mode (directory only)")
|
|
else:
|
|
print(" ❌ Result: Unexpected configuration!")
|
|
print()
|
|
|
|
# Scenario 2: Enable zip compression
|
|
print("Scenario 2: Enable ZIP compression (zip_baselines = True)")
|
|
print("-" * 70)
|
|
|
|
app_settings.save_settings({
|
|
"baseline_dir": baseline_dir,
|
|
"max_keep": 5,
|
|
"zip_baselines": True
|
|
})
|
|
|
|
current_setting = app_settings.get_zip_baselines()
|
|
print(f" Current setting: zip_baselines = {current_setting}")
|
|
|
|
bm2 = BaselineManager(temp_project, baselines_root=baseline_dir)
|
|
baseline_2 = bm2.create_baseline_from_dir(
|
|
temp_project,
|
|
baseline_id="scenario_2_with_zip",
|
|
snapshot=True,
|
|
compute_sha1=False
|
|
)
|
|
|
|
path_2 = bm2._baseline_dir(baseline_2)
|
|
has_dir_2 = os.path.exists(os.path.join(path_2, "files"))
|
|
has_zip_2 = os.path.exists(os.path.join(path_2, "files.zip"))
|
|
|
|
print(f" Baseline created: {baseline_2}")
|
|
print(f" Has files/ directory: {has_dir_2}")
|
|
print(f" Has files.zip: {has_zip_2}")
|
|
|
|
if has_dir_2 and has_zip_2:
|
|
# Compare sizes
|
|
dir_size = sum(f.stat().st_size for f in Path(os.path.join(path_2, "files")).rglob('*') if f.is_file())
|
|
zip_size = os.path.getsize(os.path.join(path_2, "files.zip"))
|
|
compression_ratio = (1 - zip_size / dir_size) * 100 if dir_size > 0 else 0
|
|
|
|
print(f" Directory size: {dir_size} bytes")
|
|
print(f" ZIP size: {zip_size} bytes")
|
|
print(f" Compression: {compression_ratio:.1f}% space saved")
|
|
print(" ✅ Result: Space-saving mode (directory + zip)")
|
|
else:
|
|
print(" ❌ Result: Unexpected configuration!")
|
|
print()
|
|
|
|
# Final summary
|
|
print("=" * 70)
|
|
print("SUMMARY")
|
|
print("=" * 70)
|
|
print()
|
|
print("User Setting Options:")
|
|
print(" • zip_baselines = False (default)")
|
|
print(" - Creates only files/ directory")
|
|
print(" - ⚡ Faster baseline creation")
|
|
print(" - 💾 Uses more disk space")
|
|
print(" - ✓ Recommended for most users")
|
|
print()
|
|
print(" • zip_baselines = True")
|
|
print(" - Creates both files/ directory AND files.zip")
|
|
print(" - 🐌 Slower baseline creation (compression)")
|
|
print(" - 📦 Saves disk space (~30-70% compression)")
|
|
print(" - ✓ Recommended for limited disk space")
|
|
print()
|
|
print("How to change:")
|
|
print(" 1. Click 'Settings...' button in the top bar")
|
|
print(" 2. Check/uncheck 'Create ZIP archives for baselines'")
|
|
print(" 3. Click 'Save'")
|
|
print()
|
|
|
|
success = has_dir_1 and not has_zip_1 and has_dir_2 and has_zip_2
|
|
if success:
|
|
print("🎉 ALL TESTS PASSED - Feature working correctly!")
|
|
else:
|
|
print("⚠️ Some tests failed")
|
|
|
|
finally:
|
|
# Cleanup
|
|
shutil.rmtree(temp_project, ignore_errors=True)
|
|
if 'baseline_dir' in locals():
|
|
shutil.rmtree(baseline_dir, ignore_errors=True)
|