"""Tests for .env loading and HF_TOKEN resolution.""" from __future__ import annotations import os import tempfile import unittest from pathlib import Path from unittest.mock import patch from zsgdp.config import hf_token, load_env_file class LoadEnvFileTests(unittest.TestCase): def test_loads_simple_key_value(self): with tempfile.TemporaryDirectory() as tmp: env = Path(tmp) / ".env" env.write_text("HF_TOKEN=hf_test_value_123\nOTHER=foo\n", encoding="utf-8") with patch.dict("os.environ", {}, clear=False): os.environ.pop("HF_TOKEN", None) os.environ.pop("OTHER", None) applied = load_env_file(env) self.assertEqual(applied["HF_TOKEN"], "hf_test_value_123") self.assertEqual(applied["OTHER"], "foo") def test_skips_comments_and_blank_lines(self): with tempfile.TemporaryDirectory() as tmp: env = Path(tmp) / ".env" env.write_text( "# top comment\n\nFOO=bar\n # indented\n\nBAZ=qux\n", encoding="utf-8", ) with patch.dict("os.environ", {}, clear=False): os.environ.pop("FOO", None) os.environ.pop("BAZ", None) applied = load_env_file(env) self.assertEqual(set(applied), {"FOO", "BAZ"}) def test_quoted_values_unquoted(self): with tempfile.TemporaryDirectory() as tmp: env = Path(tmp) / ".env" env.write_text('A="quoted value"\nB=\'single\'\nC=plain\n', encoding="utf-8") with patch.dict("os.environ", {}, clear=False): for key in ("A", "B", "C"): os.environ.pop(key, None) applied = load_env_file(env) self.assertEqual(applied["A"], "quoted value") self.assertEqual(applied["B"], "single") self.assertEqual(applied["C"], "plain") def test_export_prefix_stripped(self): with tempfile.TemporaryDirectory() as tmp: env = Path(tmp) / ".env" env.write_text("export FOO=bar\n", encoding="utf-8") with patch.dict("os.environ", {}, clear=False): os.environ.pop("FOO", None) applied = load_env_file(env) self.assertEqual(applied["FOO"], "bar") def test_existing_env_wins_unless_override(self): with tempfile.TemporaryDirectory() as tmp: env = Path(tmp) / ".env" env.write_text("FOO=from_file\n", encoding="utf-8") with patch.dict("os.environ", {"FOO": "from_env"}, clear=False): applied = load_env_file(env) # Default behaviour: don't override. self.assertNotIn("FOO", applied) self.assertEqual(os.environ["FOO"], "from_env") # With override=True, file wins. applied = load_env_file(env, override=True) self.assertEqual(applied["FOO"], "from_file") self.assertEqual(os.environ["FOO"], "from_file") def test_missing_file_returns_empty_no_error(self): self.assertEqual(load_env_file(Path("/tmp/zsgdp_does_not_exist.env")), {}) class HFTokenResolverTests(unittest.TestCase): def test_picks_up_hf_token(self): with patch.dict( "os.environ", {"HF_TOKEN": "primary", "HUGGING_FACE_HUB_TOKEN": "secondary"}, clear=False, ): self.assertEqual(hf_token(), "primary") def test_falls_through_alternative_names(self): with patch.dict("os.environ", {}, clear=True): os.environ["HUGGINGFACE_TOKEN"] = "fallback" self.assertEqual(hf_token(), "fallback") def test_recognises_hf_access_token_alias(self): with patch.dict("os.environ", {}, clear=True): os.environ["HF_ACCESS_TOKEN"] = "from_alias" self.assertEqual(hf_token(), "from_alias") def test_returns_none_when_unset(self): with patch.dict("os.environ", {}, clear=True): self.assertIsNone(hf_token()) if __name__ == "__main__": unittest.main()