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 class SettingsTests(unittest.TestCase): def test_windows_default_uses_local_app_data(self) -> None: result = default_data_dir( {"LOCALAPPDATA": "C:\\Local"}, platform_name="nt", home=Path("C:\\Users\\test"), ) self.assertEqual(result, Path("C:\\Local") / "Javis") def test_posix_default_uses_xdg_data_home(self) -> None: result = default_data_dir( {"XDG_DATA_HOME": "/tmp/data"}, platform_name="posix", home=Path("/home/test"), ) self.assertEqual(result, Path("/tmp/data/javis")) def test_explicit_data_dir_must_be_absolute(self) -> None: with self.assertRaises(ConfigurationError): Settings.from_env({"JAVIS_DATA_DIR": "relative"}) def test_provider_url_must_remain_local(self) -> None: with self.assertRaises(ConfigurationError): Settings.from_env( { "JAVIS_DATA_DIR": str(Path.cwd()), "JAVIS_OLLAMA_URL": "https://example.com", } ) def test_zero_cost_defaults_are_conservative(self) -> None: settings = Settings.from_env({"JAVIS_DATA_DIR": str(Path.cwd())}) self.assertTrue(settings.free_only) self.assertFalse(settings.gemini_enabled) self.assertFalse(settings.billing_confirmed_disabled) self.assertEqual(settings.gemini_model, "gemini-3.6-flash") self.assertEqual(settings.provider_mode, "auto") def test_paid_mode_is_rejected(self) -> None: with self.assertRaises(ConfigurationError): Settings.from_env( { "JAVIS_DATA_DIR": str(Path.cwd()), "JAVIS_FREE_ONLY": "false", } ) def test_cloud_limits_are_bounded(self) -> None: with self.assertRaises(ConfigurationError): Settings.from_env( { "JAVIS_DATA_DIR": str(Path.cwd()), "JAVIS_MAX_CLOUD_REQUESTS_PER_DAY": "1001", } ) 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()