Voice / backend /tests /test_capabilities_api.py
Thang6822
Deploy OmniVoice Docker Space
342571f
Raw
History Blame Contribute Delete
2.74 kB
from __future__ import annotations
import importlib
import os
import sys
import tempfile
import unittest
from pathlib import Path
from fastapi.testclient import TestClient
BACKEND_DIR = Path(__file__).resolve().parents[1]
if str(BACKEND_DIR) not in sys.path:
sys.path.insert(0, str(BACKEND_DIR))
class CapabilitiesApiTests(unittest.TestCase):
def _load_client(
self,
runtime_mode: str,
enabled_features: str | None = None,
) -> TestClient:
self.temp_dir = tempfile.TemporaryDirectory()
os.environ["OMNIVOICE_RUNTIME_MODE"] = runtime_mode
os.environ["OMNIVOICE_DATA_ROOT"] = self.temp_dir.name
if enabled_features is None:
os.environ.pop("OMNIVOICE_ENABLED_FEATURES", None)
else:
os.environ["OMNIVOICE_ENABLED_FEATURES"] = enabled_features
sys.modules.pop("main", None)
main = importlib.import_module("main")
main = importlib.reload(main)
self.addCleanup(self.temp_dir.cleanup)
return TestClient(main.app)
def tearDown(self) -> None:
os.environ.pop("OMNIVOICE_RUNTIME_MODE", None)
os.environ.pop("OMNIVOICE_DATA_ROOT", None)
os.environ.pop("OMNIVOICE_ENABLED_FEATURES", None)
def test_self_hosted_mode_enables_all_local_features(self) -> None:
client = self._load_client(runtime_mode="self_hosted")
response = client.get("/api/capabilities")
self.assertEqual(response.status_code, 200)
payload = response.json()
self.assertEqual(payload["runtime_mode"], "self_hosted")
self.assertEqual(payload["license"]["state"], "dev_override")
self.assertFalse(payload["ui"]["show_runtime_help"])
self.assertTrue(payload["features"]["playground"])
self.assertTrue(payload["features"]["audio_studio"])
self.assertTrue(payload["features"]["video_studio"])
self.assertTrue(payload["features"]["post_production"])
self.assertTrue(payload["features"]["audio_export"])
self.assertTrue(payload["features"]["video_export"])
def test_production_mode_defaults_to_playground_only(self) -> None:
client = self._load_client(runtime_mode="production")
response = client.get("/api/capabilities")
self.assertEqual(response.status_code, 200)
payload = response.json()
self.assertEqual(payload["runtime_mode"], "production")
self.assertTrue(payload["features"]["playground"])
self.assertFalse(payload["features"]["audio_studio"])
self.assertFalse(payload["features"]["video_studio"])
self.assertFalse(payload["features"]["post_production"])
self.assertTrue(payload["ui"]["show_runtime_help"])