watch-my-escape / tests /test_cli.py
github-actions
Deploy Space
56fdedb
Raw
History Blame Contribute Delete
5.03 kB
import importlib.util
import os
import time
from watch_my_escape import cli
def test_assets_need_build_when_outputs_are_missing(tmp_path, monkeypatch):
source_dir = tmp_path / "src"
source_dir.mkdir()
(source_dir / "app.js").write_text("console.log('hi')", encoding="utf-8")
monkeypatch.setattr(cli, "SOURCE_STATIC_DIR", source_dir)
monkeypatch.setattr(cli, "ASSET_OUTPUTS", (tmp_path / "build" / "app.js",))
assert cli.assets_need_build()
def test_assets_skip_when_outputs_are_newer(tmp_path, monkeypatch):
source_dir = tmp_path / "src"
output_dir = tmp_path / "build"
source_dir.mkdir()
output_dir.mkdir()
source = source_dir / "app.js"
output = output_dir / "app.js"
source.write_text("console.log('hi')", encoding="utf-8")
output.write_text("bundle", encoding="utf-8")
now = time.time()
source_time = now - 10
output_time = now
source.touch()
output.touch()
os.utime(source, (source_time, source_time))
os.utime(output, (output_time, output_time))
monkeypatch.setattr(cli, "SOURCE_STATIC_DIR", source_dir)
monkeypatch.setattr(cli, "ASSET_OUTPUTS", (output,))
assert not cli.assets_need_build()
def test_ensure_llm_skips_existing_auto_cpu_without_state(monkeypatch, tmp_path):
monkeypatch.setattr(cli, "SETUP_STATE_PATH", tmp_path / "setup-state.json")
monkeypatch.setattr(cli, "detect_local_profile", lambda: "cpu")
monkeypatch.setattr(importlib.util, "find_spec", lambda name: object() if name == "llama_cpp" else None)
monkeypatch.setattr(cli, "_run", lambda *_args, **_kwargs: None)
cli.ensure_llm(profile="auto", force=False)
assert not (tmp_path / "setup-state.json").exists()
def test_ensure_llm_installs_when_profile_changes(monkeypatch, tmp_path):
calls = []
monkeypatch.setattr(cli, "SETUP_STATE_PATH", tmp_path / "setup-state.json")
monkeypatch.setattr(cli, "detect_local_profile", lambda: "vulkan")
monkeypatch.setattr(importlib.util, "find_spec", lambda name: object() if name == "llama_cpp" else None)
monkeypatch.setattr(cli, "build_command", lambda profile: (("uv", "pip", "install", profile), {}))
monkeypatch.setattr(cli, "_run", lambda command, **_kwargs: calls.append(command))
cli.ensure_llm(profile="auto", force=False)
assert calls == [("uv", "pip", "install", "vulkan")]
assert '"llm_profile": "vulkan"' in (tmp_path / "setup-state.json").read_text(encoding="utf-8")
def test_main_launches_browser_by_default(monkeypatch):
captured = {}
class FakeApp:
def launch(self, **kwargs):
captured.update(kwargs)
monkeypatch.setattr(cli, "server_port_in_use", lambda *_args: False)
monkeypatch.setattr(cli, "ensure_project_ready", lambda **_kwargs: None)
monkeypatch.setattr(cli, "create_app", FakeApp)
cli.main([])
assert captured["inbrowser"] is True
def test_main_respects_no_browser(monkeypatch):
captured = {}
class FakeApp:
def launch(self, **kwargs):
captured.update(kwargs)
monkeypatch.setattr(cli, "server_port_in_use", lambda *_args: False)
monkeypatch.setattr(cli, "ensure_project_ready", lambda **_kwargs: None)
monkeypatch.setattr(cli, "create_app", FakeApp)
cli.main(["--no-browser"])
assert captured["inbrowser"] is False
def test_main_skips_launch_when_default_server_port_is_in_use(monkeypatch, capsys):
launched = False
class FakeApp:
def launch(self, **_kwargs):
nonlocal launched
launched = True
monkeypatch.setattr(cli, "server_port_in_use", lambda server_name, port: server_name is None and port == 7860)
monkeypatch.setattr(cli, "ensure_project_ready", lambda **_kwargs: None)
monkeypatch.setattr(cli, "create_app", FakeApp)
cli.main([])
assert not launched
assert "already be running at http://127.0.0.1:7860/" in capsys.readouterr().out
def test_main_checks_requested_server_port(monkeypatch):
captured = {}
seen = {}
class FakeApp:
def launch(self, **kwargs):
captured.update(kwargs)
def port_in_use(server_name, port):
seen["server_name"] = server_name
seen["port"] = port
return False
monkeypatch.setattr(cli, "server_port_in_use", port_in_use)
monkeypatch.setattr(cli, "ensure_project_ready", lambda **_kwargs: None)
monkeypatch.setattr(cli, "create_app", FakeApp)
cli.main(["--server-port", "8000"])
assert seen == {"server_name": None, "port": 8000}
assert captured["server_port"] == 8000
def test_main_allow_multiple_skips_port_check(monkeypatch):
captured = {}
class FakeApp:
def launch(self, **kwargs):
captured.update(kwargs)
monkeypatch.setattr(cli, "server_port_in_use", lambda *_args: True)
monkeypatch.setattr(cli, "ensure_project_ready", lambda **_kwargs: None)
monkeypatch.setattr(cli, "create_app", FakeApp)
cli.main(["--allow-multiple"])
assert captured["server_port"] is None