SXXXXXXX_PyUCC/tests/test_complete_workflow.py

149 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)