IRIS-AI_DEMO / tests /test_optional_dependencies.py
Brajmovech's picture
Add API key rotation for NewsAPI and Webz
f7ce805
"""Tests for graceful startup when optional ML dependencies are unavailable."""
import os
from pathlib import Path
import subprocess
import sys
import unittest
from unittest.mock import patch
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
import iris_mvp
class TestOptionalTransformersDependency(unittest.TestCase):
def test_finbert_can_be_disabled_explicitly(self):
"""IRIS_System should honor the explicit FinBERT feature flag."""
with patch.object(iris_mvp, "FINBERT_ENABLED", False), \
patch.object(iris_mvp, "NEWS_API_KEYS", []), \
patch.object(iris_mvp, "NEWS_API_KEY", None), \
patch.object(iris_mvp, "WEBZ_API_KEYS", []), \
patch.object(iris_mvp, "WEBZ_API_KEY", None), \
patch.object(iris_mvp.IRIS_System, "merge_alias_reports", return_value=None):
system = iris_mvp.IRIS_System()
self.assertIsNone(system.sentiment_analyzer)
self.assertFalse(system.finbert_status["enabled"])
self.assertEqual(system.finbert_status["reason"], "disabled via IRIS_ENABLE_FINBERT")
def test_iris_system_initializes_without_transformers_stack(self):
"""IRIS_System should still initialize when transformers/PyTorch are unavailable."""
with patch.object(iris_mvp, "_TRANSFORMERS_AVAILABLE", False), \
patch.object(iris_mvp, "_TRANSFORMERS_IMPORT_ERROR", ImportError("PyTorch not found")), \
patch.object(iris_mvp, "NEWS_API_KEYS", []), \
patch.object(iris_mvp, "NEWS_API_KEY", None), \
patch.object(iris_mvp, "WEBZ_API_KEYS", []), \
patch.object(iris_mvp, "WEBZ_API_KEY", None), \
patch.object(iris_mvp.IRIS_System, "merge_alias_reports", return_value=None):
system = iris_mvp.IRIS_System()
self.assertIsNone(system.sentiment_analyzer)
self.assertFalse(system.finbert_status["ready"])
self.assertIn("PyTorch not found", system.finbert_status["reason"])
def test_app_imports_when_transformers_stack_is_missing(self):
"""The Flask app module should still import when FinBERT dependencies are unavailable."""
project_root = Path(__file__).resolve().parents[1]
script = """
import builtins
real_import = builtins.__import__
def fake_import(name, globals=None, locals=None, fromlist=(), level=0):
if name == "transformers":
raise ImportError("PyTorch not found")
return real_import(name, globals, locals, fromlist, level)
builtins.__import__ = fake_import
try:
import app
print("APP_IMPORTED", app.iris_app is not None)
finally:
builtins.__import__ = real_import
"""
result = subprocess.run(
[sys.executable, "-c", script],
cwd=project_root,
capture_output=True,
text=True,
check=False,
)
self.assertEqual(
result.returncode,
0,
msg=f"App import failed.\nSTDOUT:\n{result.stdout}\nSTDERR:\n{result.stderr}",
)
self.assertIn("APP_IMPORTED True", result.stdout)
if __name__ == "__main__":
unittest.main()