fix: seed AI model config at runtime
This commit is contained in:
@@ -10,6 +10,7 @@ from pathlib import Path
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
||||
|
||||
import services.config_service as cs
|
||||
import services.file_service as fs
|
||||
|
||||
|
||||
class TestOutfitConfigHelpers(unittest.TestCase):
|
||||
@@ -19,8 +20,13 @@ class TestOutfitConfigHelpers(unittest.TestCase):
|
||||
os.environ["CMBOT_DATA_DIR"] = str(self.tmp)
|
||||
self.config_dir = self.tmp / "config"
|
||||
self.config_dir.mkdir(parents=True, exist_ok=True)
|
||||
self.app_dir = self.tmp / "app"
|
||||
self.factory_config_dir = self.app_dir / "config"
|
||||
self._orig_get_app_dir = fs.get_app_dir
|
||||
fs.get_app_dir = lambda: self.app_dir
|
||||
|
||||
def tearDown(self):
|
||||
fs.get_app_dir = self._orig_get_app_dir
|
||||
if self._env is None:
|
||||
os.environ.pop("CMBOT_DATA_DIR", None)
|
||||
else:
|
||||
@@ -63,6 +69,40 @@ class TestOutfitConfigHelpers(unittest.TestCase):
|
||||
self.assertEqual([m["name"] for m in models], ["GPT Image 2", "Nano Banana 2"])
|
||||
self.assertTrue(all(m.get("api_key") == "" for m in models))
|
||||
|
||||
def test_load_ai_models_seeds_missing_user_file_from_factory_template(self):
|
||||
self.factory_config_dir.mkdir(parents=True, exist_ok=True)
|
||||
(self.factory_config_dir / "ai_models.json").write_text(
|
||||
json.dumps({"models": [{"name": "factory", "url": "https://x"}]}),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
models = cs.load_ai_models()
|
||||
|
||||
self.assertEqual(models[0]["name"], "factory")
|
||||
user_file = self.config_dir / "ai_models.json"
|
||||
self.assertTrue(user_file.exists())
|
||||
copied = json.loads(user_file.read_text(encoding="utf-8"))
|
||||
self.assertEqual(copied["models"][0]["name"], "factory")
|
||||
|
||||
def test_load_ai_models_does_not_overwrite_existing_user_file(self):
|
||||
self.factory_config_dir.mkdir(parents=True, exist_ok=True)
|
||||
(self.factory_config_dir / "ai_models.json").write_text(
|
||||
json.dumps({"models": [{"name": "factory"}]}), encoding="utf-8")
|
||||
(self.config_dir / "ai_models.json").write_text(
|
||||
json.dumps({"models": [{"name": "user", "api_key": "keep"}]}),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
models = cs.load_ai_models()
|
||||
|
||||
self.assertEqual(models[0]["name"], "user")
|
||||
kept = json.loads((self.config_dir / "ai_models.json").read_text(encoding="utf-8"))
|
||||
self.assertEqual(kept["models"][0]["api_key"], "keep")
|
||||
|
||||
def test_load_ai_models_missing_factory_template_returns_empty(self):
|
||||
self.assertEqual(cs.load_ai_models(), [])
|
||||
self.assertFalse((self.config_dir / "ai_models.json").exists())
|
||||
|
||||
# -- outfit_prompt.txt ----------------------------------------------
|
||||
|
||||
def test_prompt_default_when_missing(self):
|
||||
|
||||
Reference in New Issue
Block a user