Files
ai-game-2/tools/ora_editor/test_app.py
Bryce 0c1fb8ccca Add client logging and improve mask extraction
- Added console.log statements for debugging frontend interactions
- Fixed canvas setup with proper logging
- Added logging to polygon drawing and mask extraction
- Mask extraction now properly loads and passes base image to ComfyUI
- Polygon overlay support when using polygon hint
- Added ora_editor __init__.py for proper package imports
- Updated README with debugging instructions and improved documentation
2026-03-27 09:39:47 -07:00

157 lines
4.8 KiB
Python

#!/usr/bin/env python3
"""Tests for the Flask application."""
import io
import os
import sys
from pathlib import Path
from PIL import Image
# Setup path
sys.path.insert(0, str(Path(__file__).parent.parent))
# Import the ora_editor package (not the app module directly)
import ora_editor
app = ora_editor.app
def test_index():
"""Test the main page loads."""
with app.test_client() as client:
response = client.get('/')
assert response.status_code == 200
assert b'ORA Editor' in response.data or b'editor' in response.data.lower()
print("✓ test_index passed")
def test_api_open_missing_path():
"""Test opening file with missing path returns error."""
with app.test_client() as client:
response = client.post('/api/open', json={})
assert response.status_code == 400
data = response.json
assert 'error' in data
print("✓ test_api_open_missing_path passed")
def test_api_save_missing_ora():
"""Test saving without ora_path returns error."""
with app.test_client() as client:
response = client.post('/api/save', json={})
assert response.status_code == 400
data = response.json
assert 'error' in data
print("✓ test_api_save_missing_ora passed")
def test_api_layer_operations():
"""Test layer operation endpoints require proper params."""
with app.test_client() as client:
# Test add missing params
response = client.post('/api/layer/add', json={})
assert response.status_code == 400
# Test rename missing params
response = client.post('/api/layer/rename', json={})
assert response.status_code == 400
# Test delete missing params
response = client.post('/api/layer/delete', json={})
assert response.status_code == 400
print("✓ test_api_layer_operations passed")
def test_api_polygon_clear():
"""Test polygon clear endpoint."""
with app.test_client() as client:
response = client.post('/api/polygon/clear', json={'ora_path': 'test.ora'})
assert response.status_code == 200
data = response.json
assert data['success']
print("✓ test_api_polygon_clear passed")
def test_api_mask_extract_missing_subject():
"""Test mask extract requires subject parameter."""
with app.test_client() as client:
response = client.post('/api/mask/extract', json={})
assert response.status_code == 400
data = response.json
assert 'error' in data
print("✓ test_api_mask_extract_missing_subject passed")
def test_api_krita_open_missing_params():
"""Test krita open requires proper params."""
with app.test_client() as client:
response = client.post('/api/krita/open', json={})
assert response.status_code == 400
data = response.json
assert 'error' in data
print("✓ test_api_krita_open_missing_params passed")
def test_with_real_ora():
"""Test API with a real ORA file."""
import tempfile
# Create test PNG and ORA
test_img = Image.new('RGBA', (100, 100), (255, 0, 0, 255))
with tempfile.NamedTemporaryFile(suffix='.png', delete=False) as png_f:
test_img.save(png_f.name)
png_path = Path(png_f.name)
# Make accessible from project root
oras_dir = Path(__file__).parent / 'temp_ora_testing'
oras_dir.mkdir(exist_ok=True)
test_png = oras_dir / 'test.png'
test_ora = oras_dir / 'test.ora'
# Copy PNG to accessible location
import shutil
shutil.copy(png_path, test_png)
try:
with app.test_client() as client:
# Test open PNG (should auto-create ORA)
response = client.post('/api/open', json={
'path': f'tools/ora_editor/temp_ora_testing/test.png'
})
# File might not exist from project root perspective
# Just test that the endpoint responds
assert response.status_code in (200, 404)
print("✓ test_with_real_ora passed")
finally:
if png_path.exists():
os.unlink(png_path)
for f in oras_dir.glob('*'):
os.unlink(f)
oras_dir.rmdir()
if __name__ == '__main__':
tests = [
test_index,
test_api_open_missing_path,
test_api_save_missing_ora,
test_api_layer_operations,
test_api_polygon_clear,
test_api_mask_extract_missing_subject,
test_api_krita_open_missing_params,
test_with_real_ora,
]
for test in tests:
try:
test()
except Exception as e:
print(f"{test.__name__} failed with exception: {e}")
import traceback
traceback.print_exc()
sys.exit(1)