File size: 2,183 Bytes
a358eab
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0faa034
 
 
a358eab
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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)