131 lines
4.8 KiB
Python
131 lines
4.8 KiB
Python
"""
|
|
Test suite for Flask application routes and API endpoints.
|
|
|
|
This test module validates the main Flask application functionality,
|
|
route handling, and API responses.
|
|
"""
|
|
|
|
import unittest
|
|
import sys
|
|
import os
|
|
from unittest.mock import patch, MagicMock
|
|
|
|
# Add parent directory to path for imports
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
|
|
class TestFlaskApplication(unittest.TestCase):
|
|
"""Test class for Flask application and routes."""
|
|
|
|
def setUp(self):
|
|
"""Set up test fixtures before each test method."""
|
|
pass
|
|
|
|
def test_app_imports(self):
|
|
"""Test that main app module can be imported without errors."""
|
|
try:
|
|
import app
|
|
self.assertIsNotNone(app)
|
|
print('✓ Main app module imports successfully')
|
|
|
|
except Exception as e:
|
|
self.fail(f'App import failed: {e}')
|
|
|
|
@patch('app.Flask')
|
|
def test_app_initialization_components(self, mock_flask):
|
|
"""Test that app initialization components are available."""
|
|
try:
|
|
# Test manager imports
|
|
from keyboard_shortcuts import KeyboardShortcutManager
|
|
from drag_drop import DragDropManager
|
|
from accessibility_features import AccessibilityManager
|
|
from user_preferences import UserPreferencesManager
|
|
|
|
# Verify managers can be instantiated
|
|
keyboard_manager = KeyboardShortcutManager()
|
|
drag_manager = DragDropManager()
|
|
accessibility_manager = AccessibilityManager()
|
|
preferences_manager = UserPreferencesManager()
|
|
|
|
self.assertIsNotNone(keyboard_manager)
|
|
self.assertIsNotNone(drag_manager)
|
|
self.assertIsNotNone(accessibility_manager)
|
|
self.assertIsNotNone(preferences_manager)
|
|
|
|
print('✓ App manager components available')
|
|
|
|
except Exception as e:
|
|
self.fail(f'App component test failed: {e}')
|
|
|
|
|
|
class TestAPIEndpoints(unittest.TestCase):
|
|
"""Test class for API endpoint validation."""
|
|
|
|
def test_api_response_structure(self):
|
|
"""Test that API endpoints return proper JSON structure."""
|
|
try:
|
|
# Test that we can import the auth module for API responses
|
|
from auth import SessionManager
|
|
|
|
manager = SessionManager()
|
|
|
|
# Test login API response structure
|
|
response = manager.login('test_password')
|
|
self.assertIsInstance(response, dict)
|
|
self.assertIn('success', response)
|
|
|
|
print('✓ API response structure validated')
|
|
|
|
except Exception as e:
|
|
self.fail(f'API endpoint test failed: {e}')
|
|
|
|
|
|
class TestJavaScriptGeneration(unittest.TestCase):
|
|
"""Test class for dynamic JavaScript generation."""
|
|
|
|
def test_javascript_generation_no_syntax_errors(self):
|
|
"""Test that generated JavaScript doesn't contain Python syntax."""
|
|
try:
|
|
from multi_screen_support import MultiScreenSupportManager
|
|
|
|
manager = MultiScreenSupportManager()
|
|
js_code = manager.get_multiscreen_js()
|
|
|
|
# Check for Python-specific syntax that shouldn't be in JS
|
|
self.assertNotIn('True', js_code, 'JavaScript should use "true", not "True"')
|
|
self.assertNotIn('False', js_code, 'JavaScript should use "false", not "False"')
|
|
self.assertNotIn('None', js_code, 'JavaScript should use "null", not "None"')
|
|
|
|
# Check for proper JSON serialization indicators
|
|
self.assertIn('true', js_code.lower())
|
|
self.assertIn('false', js_code.lower())
|
|
|
|
print('✓ JavaScript generation syntax validated')
|
|
|
|
except Exception as e:
|
|
self.fail(f'JavaScript generation test failed: {e}')
|
|
|
|
def test_f_string_escaping(self):
|
|
"""Test that f-strings are properly escaped in JavaScript generation."""
|
|
try:
|
|
from multi_screen_support import MultiScreenSupportManager
|
|
|
|
manager = MultiScreenSupportManager()
|
|
js_code = manager.get_multiscreen_js()
|
|
|
|
# Ensure JavaScript object literals use proper syntax
|
|
# Look for proper JavaScript object/function syntax
|
|
self.assertGreater(len(js_code), 0)
|
|
|
|
# Check that braces are properly used (not bare Python f-string braces)
|
|
brace_count = js_code.count('{')
|
|
self.assertGreater(brace_count, 0)
|
|
|
|
print('✓ F-string escaping validated')
|
|
|
|
except Exception as e:
|
|
self.fail(f'F-string escaping test failed: {e}')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(verbosity=2, buffer=True) |