from pathlib import Path import shutil import uuid from facecloak.deploy import ( HF_TOKEN_ENV_VAR, create_or_update_space, default_space_repo_id, read_env_file, ) class DummyRuntime: stage = "BUILDING" hardware = "cpu-basic" class DummyCommit: oid = "abc123" class DummyApi: def __init__(self) -> None: self.created = None self.uploaded = None def whoami(self, token, cache=False): return {"name": "example-user"} def create_repo(self, **kwargs): self.created = kwargs def upload_folder(self, **kwargs): self.uploaded = kwargs return DummyCommit() def get_space_runtime(self, repo_id, token=None): return DummyRuntime() def _local_temp_dir(name: str) -> Path: path = Path("tests") / "_tmp" / f"{name}_{uuid.uuid4().hex}" path.mkdir(parents=True, exist_ok=True) return path def test_read_env_file_parses_simple_key_values() -> None: temp_dir = _local_temp_dir("env") env_path = temp_dir / ".env" env_path.write_text( f"{HF_TOKEN_ENV_VAR}=hf_test_token\nOTHER=value\n", encoding="utf-8" ) values = read_env_file(env_path) assert values[HF_TOKEN_ENV_VAR] == "hf_test_token" assert values["OTHER"] == "value" shutil.rmtree(temp_dir) def test_default_space_repo_id_uses_hf_username() -> None: repo_id = default_space_repo_id(DummyApi(), "hf_test_token") assert repo_id == "example-user/facecloak" def test_create_or_update_space_uses_space_repo_settings() -> None: api = DummyApi() temp_dir = _local_temp_dir("deploy") folder_path = temp_dir / "repo" folder_path.mkdir() (folder_path / "app.py").write_text("print('ok')\n", encoding="utf-8") result = create_or_update_space( api=api, token="hf_test_token", repo_id="example-user/facecloak", folder_path=folder_path, ) assert api.created["repo_type"] == "space" assert api.created["space_sdk"] == "gradio" assert api.uploaded["repo_type"] == "space" assert result.repo_id == "example-user/facecloak" assert result.runtime_stage == "BUILDING" shutil.rmtree(temp_dir)