244 lines
8.3 KiB
Python
244 lines
8.3 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Test script for template manager functionality
|
|
"""
|
|
|
|
import os
|
|
import json
|
|
import shutil
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
def create_test_template(template_dir: Path, template_name: str):
|
|
"""Create a test template with draft_content.json"""
|
|
|
|
# Create template directory
|
|
template_path = template_dir / template_name
|
|
template_path.mkdir(parents=True, exist_ok=True)
|
|
|
|
# Create sample draft_content.json
|
|
draft_content = {
|
|
"version": "1.0",
|
|
"canvas_config": {
|
|
"width": 1920,
|
|
"height": 1080,
|
|
"fps": 30
|
|
},
|
|
"duration": 5000000, # 5 seconds in microseconds
|
|
"tracks": [
|
|
{
|
|
"id": "track_1",
|
|
"type": "video",
|
|
"segments": [
|
|
{
|
|
"id": "segment_1",
|
|
"material_id": "video_1",
|
|
"source_timerange": {"start": 0, "end": 3000000},
|
|
"target_timerange": {"start": 0, "end": 3000000}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "track_2",
|
|
"type": "audio",
|
|
"segments": [
|
|
{
|
|
"id": "segment_2",
|
|
"material_id": "audio_1",
|
|
"source_timerange": {"start": 0, "end": 5000000},
|
|
"target_timerange": {"start": 0, "end": 5000000}
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"materials": {
|
|
"videos": [
|
|
{
|
|
"id": "video_1",
|
|
"name": "sample_video.mp4",
|
|
"path": str(template_path / "sample_video.mp4"),
|
|
"duration": 3000000,
|
|
"width": 1920,
|
|
"height": 1080
|
|
}
|
|
],
|
|
"audios": [
|
|
{
|
|
"id": "audio_1",
|
|
"name": "sample_audio.mp3",
|
|
"path": str(template_path / "sample_audio.mp3"),
|
|
"duration": 5000000
|
|
}
|
|
],
|
|
"images": [
|
|
{
|
|
"id": "image_1",
|
|
"name": "sample_image.jpg",
|
|
"path": str(template_path / "sample_image.jpg"),
|
|
"width": 1920,
|
|
"height": 1080
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
# Save draft_content.json
|
|
with open(template_path / "draft_content.json", 'w', encoding='utf-8') as f:
|
|
json.dump(draft_content, f, ensure_ascii=False, indent=2)
|
|
|
|
# Create dummy media files
|
|
(template_path / "sample_video.mp4").touch()
|
|
(template_path / "sample_audio.mp3").touch()
|
|
(template_path / "sample_image.jpg").touch()
|
|
|
|
print(f"Created test template: {template_name}")
|
|
return template_path
|
|
|
|
def test_template_manager():
|
|
"""Test the template manager functionality"""
|
|
|
|
# Create temporary directory for test templates
|
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
temp_path = Path(temp_dir)
|
|
|
|
print(f"Creating test templates in: {temp_path}")
|
|
|
|
# Create multiple test templates
|
|
templates = [
|
|
"Wedding_Template",
|
|
"Birthday_Template",
|
|
"Corporate_Template",
|
|
"Travel_Template"
|
|
]
|
|
|
|
for template_name in templates:
|
|
create_test_template(temp_path, template_name)
|
|
|
|
# Test the template manager
|
|
print("\nTesting template manager...")
|
|
|
|
try:
|
|
from python_core.services.template_manager import TemplateManager
|
|
|
|
manager = TemplateManager()
|
|
|
|
# Test batch import
|
|
print("Testing batch import...")
|
|
result = manager.batch_import_templates(str(temp_path))
|
|
|
|
print(f"Import result: {result}")
|
|
|
|
if result['status']:
|
|
print(f"Successfully imported {result['imported_count']} templates")
|
|
|
|
# Test get templates
|
|
print("\nTesting get templates...")
|
|
templates = manager.get_templates()
|
|
print(f"Found {len(templates)} templates")
|
|
|
|
for template in templates:
|
|
print(f" - {template.name} (ID: {template.id})")
|
|
print(f" Duration: {template.duration/1000000:.1f}s")
|
|
print(f" Materials: {template.material_count}")
|
|
print(f" Tracks: {template.track_count}")
|
|
|
|
# Test get specific template
|
|
if templates:
|
|
template_id = templates[0].id
|
|
print(f"\nTesting get specific template: {template_id}")
|
|
template = manager.get_template(template_id)
|
|
if template:
|
|
print(f"Retrieved template: {template.name}")
|
|
else:
|
|
print("Failed to retrieve template")
|
|
|
|
# Test delete template
|
|
if templates:
|
|
template_id = templates[0].id
|
|
print(f"\nTesting delete template: {template_id}")
|
|
success = manager.delete_template(template_id)
|
|
if success:
|
|
print("Template deleted successfully")
|
|
|
|
# Verify deletion
|
|
remaining_templates = manager.get_templates()
|
|
print(f"Remaining templates: {len(remaining_templates)}")
|
|
else:
|
|
print("Failed to delete template")
|
|
else:
|
|
print(f"Import failed: {result['msg']}")
|
|
|
|
except Exception as e:
|
|
print(f"Error testing template manager: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
def test_command_line():
|
|
"""Test the command line interface"""
|
|
|
|
print("\nTesting command line interface...")
|
|
|
|
# Create temporary directory for test templates
|
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
temp_path = Path(temp_dir)
|
|
|
|
# Create a test template
|
|
create_test_template(temp_path, "CLI_Test_Template")
|
|
|
|
# Test CLI commands
|
|
import subprocess
|
|
import sys
|
|
|
|
try:
|
|
# Test batch import
|
|
print("Testing CLI batch import...")
|
|
result = subprocess.run([
|
|
sys.executable, "-m", "python_core.services.template_manager",
|
|
"--action", "batch_import",
|
|
"--source_folder", str(temp_path)
|
|
], capture_output=True, text=True, cwd=".")
|
|
|
|
print(f"CLI Exit code: {result.returncode}")
|
|
print(f"CLI Stdout: {result.stdout}")
|
|
if result.stderr:
|
|
print(f"CLI Stderr: {result.stderr}")
|
|
|
|
if result.returncode == 0:
|
|
# Parse result
|
|
import json
|
|
cli_result = json.loads(result.stdout)
|
|
print(f"CLI Import result: {cli_result}")
|
|
|
|
# Test get templates
|
|
print("\nTesting CLI get templates...")
|
|
result = subprocess.run([
|
|
sys.executable, "-m", "python_core.services.template_manager",
|
|
"--action", "get_templates"
|
|
], capture_output=True, text=True, cwd=".")
|
|
|
|
if result.returncode == 0:
|
|
templates_result = json.loads(result.stdout)
|
|
print(f"CLI Templates: {len(templates_result.get('templates', []))}")
|
|
else:
|
|
print(f"CLI get templates failed: {result.stderr}")
|
|
else:
|
|
print("CLI batch import failed")
|
|
|
|
except Exception as e:
|
|
print(f"Error testing CLI: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
if __name__ == "__main__":
|
|
print("Template Manager Test Script")
|
|
print("=" * 50)
|
|
|
|
# Test the template manager class
|
|
test_template_manager()
|
|
|
|
# Test the command line interface
|
|
test_command_line()
|
|
|
|
print("\nTest completed!")
|