Files
by-ae-ComfyUI-ByAE-Ideogram…/tests/conftest.py
by-aeandCursor Agent 223ec7e15b Add comprehensive test coverage for routes and nodes
Tests cover:
- routes.py: Input validation, path traversal protection, JSON
  error handling, GUID sanitization (12 new tests)
- nodes/ideogram4_nodes.py: Prompt assembly, bbox normalization,
  palette handling, JSON serialization, input coercion (28 new tests)

All tests use mocks via conftest.py to avoid ComfyUI dependencies.
Tests import the repo as a proper package so routes.py relative
imports work unchanged.

CI: Install aiohttp for route tests.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-23 21:16:56 +00:00

76 lines
2.6 KiB
Python

"""pytest configuration for ComfyUI-ByAE-IdeogramTools tests."""
import sys
import os
from unittest.mock import MagicMock
# Mock ComfyUI dependencies before any imports
sys.modules['folder_paths'] = MagicMock()
sys.modules['torch'] = MagicMock()
sys.modules['numpy'] = MagicMock()
sys.modules['PIL'] = MagicMock()
sys.modules['PIL.Image'] = MagicMock()
sys.modules['PIL.ImageDraw'] = MagicMock()
sys.modules['PIL.ImageFont'] = MagicMock()
sys.modules['comfy_api'] = MagicMock()
sys.modules['comfy_api.latest'] = MagicMock()
sys.modules['comfy_api.latest.io'] = MagicMock()
sys.modules['server'] = MagicMock()
# Make the repo root importable as a package
repo_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
parent_dir = os.path.dirname(repo_root)
package_name = os.path.basename(repo_root).replace('-', '_')
if parent_dir not in sys.path:
sys.path.insert(0, parent_dir)
# Create a pseudo-package that wraps the repo
import importlib.util
import types
# Create package module
pkg = types.ModuleType(package_name)
pkg.__path__ = [repo_root]
pkg.__file__ = os.path.join(repo_root, '__init__.py')
sys.modules[package_name] = pkg
# Import and register store module
store_spec = importlib.util.spec_from_file_location(
f"{package_name}.store",
os.path.join(repo_root, 'store.py')
)
store_module = importlib.util.module_from_spec(store_spec)
sys.modules[f"{package_name}.store"] = store_module
store_spec.loader.exec_module(store_module)
# Import and register nodes package
nodes_pkg = types.ModuleType(f"{package_name}.nodes")
nodes_pkg.__path__ = [os.path.join(repo_root, 'nodes')]
sys.modules[f"{package_name}.nodes"] = nodes_pkg
# Import and register ideogram4_nodes
nodes_spec = importlib.util.spec_from_file_location(
f"{package_name}.nodes.ideogram4_nodes",
os.path.join(repo_root, 'nodes', 'ideogram4_nodes.py')
)
nodes_module = importlib.util.module_from_spec(nodes_spec)
sys.modules[f"{package_name}.nodes.ideogram4_nodes"] = nodes_module
nodes_spec.loader.exec_module(nodes_module)
# Import and register routes with the package context
routes_spec = importlib.util.spec_from_file_location(
f"{package_name}.routes",
os.path.join(repo_root, 'routes.py'),
submodule_search_locations=[repo_root]
)
routes_module = importlib.util.module_from_spec(routes_spec)
sys.modules[f"{package_name}.routes"] = routes_module
routes_spec.loader.exec_module(routes_module)
# Make them available without package prefix in test files
sys.modules['store'] = store_module
sys.modules['routes'] = routes_module
sys.modules['nodes'] = nodes_pkg
sys.modules['nodes.ideogram4_nodes'] = nodes_module