Spaces:
Running
Running
File size: 5,269 Bytes
b4ac377 | 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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
"""Tests for the openenv fork command."""
from unittest.mock import MagicMock, patch
from openenv.cli.__main__ import app
from typer.testing import CliRunner
runner = CliRunner()
def test_fork_requires_source_space() -> None:
"""Test that fork requires SOURCE_SPACE argument."""
result = runner.invoke(app, ["fork"])
assert result.exit_code != 0
assert "source" in result.output.lower() or "argument" in result.output.lower()
def test_fork_validates_source_space_format() -> None:
"""Test that fork validates source space format (owner/name)."""
result = runner.invoke(app, ["fork", "invalid-no-slash"])
assert result.exit_code != 0
assert "format" in result.output.lower() or "invalid" in result.output.lower()
def test_fork_calls_duplicate_space_with_from_id() -> None:
"""Test that fork calls HfApi.duplicate_space with correct from_id."""
with (
patch("openenv.cli.commands.fork.whoami") as mock_whoami,
patch("openenv.cli.commands.fork.HfApi") as mock_hf_api_class,
):
mock_whoami.return_value = {"name": "testuser"}
mock_api = MagicMock()
mock_api.duplicate_space.return_value = (
"https://huggingface.co/spaces/testuser/source-space"
)
mock_hf_api_class.return_value = mock_api
result = runner.invoke(app, ["fork", "owner/source-space"])
assert result.exit_code == 0
mock_api.duplicate_space.assert_called_once()
call_kwargs = mock_api.duplicate_space.call_args[1]
assert call_kwargs["from_id"] == "owner/source-space"
assert call_kwargs["private"] is False
# HF API requires hardware; default to free cpu-basic when not specified
assert call_kwargs["hardware"] == "cpu-basic"
def test_fork_passes_private_and_to_id() -> None:
"""Test that fork passes --private and --repo-id to duplicate_space."""
with (
patch("openenv.cli.commands.fork.whoami") as mock_whoami,
patch("openenv.cli.commands.fork.HfApi") as mock_hf_api_class,
):
mock_whoami.return_value = {"name": "testuser"}
mock_api = MagicMock()
mock_api.duplicate_space.return_value = (
"https://huggingface.co/spaces/myuser/my-fork"
)
mock_hf_api_class.return_value = mock_api
result = runner.invoke(
app,
["fork", "owner/source-space", "--private", "--repo-id", "myuser/my-fork"],
)
assert result.exit_code == 0
call_kwargs = mock_api.duplicate_space.call_args[1]
assert call_kwargs["private"] is True
assert call_kwargs["to_id"] == "myuser/my-fork"
def test_fork_passes_variables_and_secrets() -> None:
"""Test that fork passes --set-env and --set-secret to duplicate_space."""
with (
patch("openenv.cli.commands.fork.whoami") as mock_whoami,
patch("openenv.cli.commands.fork.HfApi") as mock_hf_api_class,
):
mock_whoami.return_value = {"name": "testuser"}
mock_api = MagicMock()
mock_api.duplicate_space.return_value = (
"https://huggingface.co/spaces/testuser/source-space"
)
mock_hf_api_class.return_value = mock_api
result = runner.invoke(
app,
[
"fork",
"owner/source-space",
"--set-env",
"KEY1=val1",
"--set-secret",
"SECRET1=secretval",
],
)
assert result.exit_code == 0
call_kwargs = mock_api.duplicate_space.call_args[1]
assert call_kwargs["variables"] == [{"key": "KEY1", "value": "val1"}]
assert call_kwargs["secrets"] == [{"key": "SECRET1", "value": "secretval"}]
def test_fork_validates_set_env_format() -> None:
"""Test that fork validates KEY=VALUE format for --set-env."""
with patch("openenv.cli.commands.fork.whoami") as mock_whoami:
mock_whoami.return_value = {"name": "testuser"}
result = runner.invoke(
app,
["fork", "owner/source-space", "--set-env", "no-equals-sign"],
)
assert result.exit_code != 0
assert "KEY=VALUE" in result.output or "format" in result.output.lower()
def test_fork_handles_duplicate_space_error() -> None:
"""Test that fork handles duplicate_space API errors."""
with (
patch("openenv.cli.commands.fork.whoami") as mock_whoami,
patch("openenv.cli.commands.fork.HfApi") as mock_hf_api_class,
):
mock_whoami.return_value = {"name": "testuser"}
mock_api = MagicMock()
mock_api.duplicate_space.side_effect = Exception("Space not found")
mock_hf_api_class.return_value = mock_api
result = runner.invoke(app, ["fork", "owner/source-space"])
assert result.exit_code != 0
assert "fork" in result.output.lower() or "failed" in result.output.lower()
|