"""
Unit tests for the mobile interface functionality.
"""
import pytest
import os
class TestMobileInterfaceFiles:
"""Test cases for mobile interface file structure and content."""
def test_mobile_html_structure(self):
"""Test that mobile HTML has required structure."""
mobile_html = os.path.join(
os.path.dirname(__file__), "..", "web_mobile", "index.html"
)
if not os.path.exists(mobile_html):
pytest.skip("Mobile HTML file not found")
with open(mobile_html, 'r') as f:
content = f.read()
# Check essential HTML structure
assert "" in content
assert "" in content
assert "
" in content
assert "ComfyUI Mobile" in content
# Check required elements
assert 'id="app"' in content
assert 'id="workflowPipeline"' in content
assert 'id="queuePrompt"' in content
assert 'id="nodeDetailModal"' in content
assert 'class="action-bar"' in content
# Check CSS and JS includes
assert "/mobile_static/styles.css" in content
assert "/mobile_static/utils.js" in content
assert "/mobile_static/app.js" in content
assert "/mobile_static/mobile-interface.js" in content
def test_mobile_js_files_exist(self):
"""Test that all required JavaScript files exist."""
mobile_dir = os.path.join(os.path.dirname(__file__), "..", "web_mobile")
if not os.path.exists(mobile_dir):
pytest.skip("Mobile directory not found")
required_js_files = [
"utils.js",
"graph-linearization.js",
"api-client.js",
"mobile-interface.js",
"app.js"
]
for js_file in required_js_files:
file_path = os.path.join(mobile_dir, js_file)
assert os.path.exists(file_path), f"Missing required JS file: {js_file}"
# Check file is not empty
with open(file_path, 'r') as f:
content = f.read().strip()
assert len(content) > 0, f"JS file is empty: {js_file}"
def test_mobile_css_file_exists(self):
"""Test that the CSS file exists and has content."""
css_file = os.path.join(
os.path.dirname(__file__), "..", "web_mobile", "styles.css"
)
if not os.path.exists(css_file):
pytest.skip("CSS file not found")
with open(css_file, 'r') as f:
content = f.read().strip()
assert len(content) > 0, "CSS file is empty"
# Check for essential CSS classes
assert ".header" in content
assert ".workflow-pipeline" in content
assert ".node-card" in content
assert ".action-bar" in content
assert ".modal" in content
# Check for mobile-specific CSS
assert "@media" in content, "No responsive CSS found"
assert "touch" in content.lower(), "No touch-specific CSS found"
class TestMobileInterfaceJavaScript:
"""Test cases for mobile interface JavaScript functionality."""
def test_javascript_classes_defined(self):
"""Test that required JavaScript classes are defined."""
js_files = {
"utils.js": ["Utils"],
"graph-linearization.js": ["GraphLinearization"],
"api-client.js": ["ComfyUIAPIClient"],
"mobile-interface.js": ["MobileInterface"],
"app.js": ["MobileApp"]
}
mobile_dir = os.path.join(os.path.dirname(__file__), "..", "web_mobile")
for js_file, expected_classes in js_files.items():
file_path = os.path.join(mobile_dir, js_file)
if not os.path.exists(file_path):
pytest.skip(f"JS file not found: {js_file}")
with open(file_path, 'r') as f:
content = f.read()
for class_name in expected_classes:
assert f"class {class_name}" in content, \
f"Class {class_name} not found in {js_file}"
def test_javascript_exports(self):
"""Test that JavaScript files export classes to window."""
js_files = {
"utils.js": "Utils",
"graph-linearization.js": "GraphLinearization",
"api-client.js": "ComfyUIAPIClient",
"mobile-interface.js": "MobileInterface"
}
mobile_dir = os.path.join(os.path.dirname(__file__), "..", "web_mobile")
for js_file, class_name in js_files.items():
file_path = os.path.join(mobile_dir, js_file)
if not os.path.exists(file_path):
pytest.skip(f"JS file not found: {js_file}")
with open(file_path, 'r') as f:
content = f.read()
assert f"window.{class_name}" in content, \
f"Class {class_name} not exported to window in {js_file}"
def test_mobile_interface_initialization(self):
"""Test that mobile interface has proper initialization."""
app_js = os.path.join(
os.path.dirname(__file__), "..", "web_mobile", "app.js"
)
if not os.path.exists(app_js):
pytest.skip("app.js not found")
with open(app_js, 'r') as f:
content = f.read()
# Check for DOM ready event listener
assert "DOMContentLoaded" in content
# Check for MobileApp initialization
assert "new MobileApp()" in content
# Check for error handling
assert "try" in content and "catch" in content
# Check for proper cleanup
assert "beforeunload" in content
assert "cleanup" in content
if __name__ == "__main__":
pytest.main([__file__])