feat: add local zero-cost configuration

This commit is contained in:
2026-07-30 18:03:40 +02:00
parent e57186f678
commit ab6ea485dc
7 changed files with 232 additions and 30 deletions
+56
View File
@@ -1,6 +1,12 @@
import tempfile
import unittest
from pathlib import Path
from javis.config.local_config import (
LocalConfigError,
load_local_defaults,
write_gemini_activation,
)
from javis.config.settings import ConfigurationError, Settings, default_data_dir
@@ -61,6 +67,56 @@ class SettingsTests(unittest.TestCase):
}
)
def test_local_toml_enables_only_confirmed_free_gemini(self) -> None:
with tempfile.TemporaryDirectory() as directory:
data_dir = Path(directory)
write_gemini_activation(data_dir / "javis.toml")
settings = Settings.from_env({"JAVIS_DATA_DIR": str(data_dir)})
self.assertTrue(settings.gemini_enabled)
self.assertTrue(settings.free_only)
self.assertTrue(settings.billing_confirmed_disabled)
self.assertEqual(settings.provider_mode, "auto")
self.assertEqual(settings.gemini_max_retries, 1)
def test_environment_can_safely_disable_local_cloud_config(self) -> None:
with tempfile.TemporaryDirectory() as directory:
data_dir = Path(directory)
write_gemini_activation(data_dir / "javis.toml")
settings = Settings.from_env(
{
"JAVIS_DATA_DIR": str(data_dir),
"JAVIS_GEMINI_ENABLED": "false",
}
)
self.assertFalse(settings.gemini_enabled)
def test_activation_file_contains_no_secret_and_is_not_overwritten(self) -> None:
with tempfile.TemporaryDirectory() as directory:
path = Path(directory) / "javis.toml"
write_gemini_activation(path)
content = path.read_text(encoding="utf-8")
self.assertNotIn("api_key", content.lower())
self.assertNotIn("password", content.lower())
self.assertEqual(
load_local_defaults(path)["JAVIS_GEMINI_BILLING_CONFIRMED_DISABLED"],
"true",
)
with self.assertRaises(LocalConfigError):
write_gemini_activation(path)
def test_malformed_local_config_is_rejected(self) -> None:
with tempfile.TemporaryDirectory() as directory:
data_dir = Path(directory)
(data_dir / "javis.toml").write_text("[providers", encoding="utf-8")
with self.assertRaises(ConfigurationError):
Settings.from_env({"JAVIS_DATA_DIR": str(data_dir)})
if __name__ == "__main__":
unittest.main()