8926152fca
- Add showControls prop to TerminalComponent to optionally hide internal header - Add reset() method to TerminalRef for external reset control - TerminalPage now renders a unified fullscreen header bar combining: - Session tabs (TerminalSessionTabs) - Terminal controls (status dot, A-, A+, Reset, Exit Fullscreen) - Unified header is always visible in fullscreen (no hover-to-reveal) - TerminalComponent internal header hidden when in fullscreen mode - Remove old CSS that hid session tabs with opacity:0 until hover Quality gates: pytest 188 passed, frontend typecheck clean Fixes: terminal-fullscreen-unified-header
111 lines
4.4 KiB
Python
111 lines
4.4 KiB
Python
"""Unit tests for ~ / $HOME expansion in container paths."""
|
|
|
|
import pytest
|
|
|
|
from src.api.tool_instances import _resolve_git_mount_mappings
|
|
from src.services.config_profile_resolver import expand_container_path
|
|
from src.services.manifest_compiler import get_manifest_home_dir
|
|
|
|
|
|
class TestExpandContainerPath:
|
|
"""Tests for expand_container_path helper."""
|
|
|
|
def test_tilde_slash_expands(self) -> None:
|
|
"""~/foo should expand to home_dir/foo."""
|
|
assert (
|
|
expand_container_path("~/workspace", "/home/user") == "/home/user/workspace"
|
|
)
|
|
|
|
def test_tilde_alone_expands(self) -> None:
|
|
"""~ should expand to home_dir."""
|
|
assert expand_container_path("~", "/home/user") == "/home/user"
|
|
|
|
def test_dollar_home_slash_expands(self) -> None:
|
|
"""$HOME/foo should expand to home_dir/foo."""
|
|
assert (
|
|
expand_container_path("$HOME/workspace", "/home/user")
|
|
== "/home/user/workspace"
|
|
)
|
|
|
|
def test_dollar_home_alone_expands(self) -> None:
|
|
"""$HOME should expand to home_dir."""
|
|
assert expand_container_path("$HOME", "/home/user") == "/home/user"
|
|
|
|
def test_absolute_path_unchanged(self) -> None:
|
|
"""Absolute paths should not be modified."""
|
|
assert expand_container_path("/app/workspace", "/home/user") == "/app/workspace"
|
|
|
|
def test_relative_path_unchanged(self) -> None:
|
|
"""Relative paths should not be modified."""
|
|
assert expand_container_path("workspace", "/home/user") == "workspace"
|
|
|
|
def test_tilde_in_middle_unchanged(self) -> None:
|
|
"""~ in the middle of a path should not expand."""
|
|
assert expand_container_path("/app/~user", "/home/user") == "/app/~user"
|
|
|
|
def test_dollar_home_in_middle_unchanged(self) -> None:
|
|
"""$HOME in the middle of a path should not expand."""
|
|
assert expand_container_path("/app/$HOMEuser", "/home/user") == "/app/$HOMEuser"
|
|
|
|
def test_root_home(self) -> None:
|
|
"""Expansion works with /root as home."""
|
|
assert expand_container_path("~/config", "/root") == "/root/config"
|
|
|
|
|
|
class TestGetManifestHomeDir:
|
|
"""Tests for get_manifest_home_dir helper."""
|
|
|
|
def test_with_user_block(self) -> None:
|
|
"""Manifest with user block returns /home/{name}."""
|
|
manifest = {"user": {"name": "developer", "uid": 1000, "gid": 1000}}
|
|
assert get_manifest_home_dir(manifest) == "/home/developer"
|
|
|
|
def test_without_user_block(self) -> None:
|
|
"""Manifest without user block returns /root."""
|
|
manifest = {"base_image": "ubuntu:24.04"}
|
|
assert get_manifest_home_dir(manifest) == "/root"
|
|
|
|
def test_with_empty_user_name(self) -> None:
|
|
"""Manifest with empty user name returns /root."""
|
|
manifest = {"user": {"name": "", "uid": 1000, "gid": 1000}}
|
|
assert get_manifest_home_dir(manifest) == "/root"
|
|
|
|
def test_with_none_user_name(self) -> None:
|
|
"""Manifest with None user name returns /root."""
|
|
manifest = {"user": {"name": None, "uid": 1000, "gid": 1000}}
|
|
assert get_manifest_home_dir(manifest) == "/root"
|
|
|
|
|
|
class TestResolveGitMountMappingsExpansion:
|
|
"""Tests that git mount mapping targets expand ~ and $HOME."""
|
|
|
|
def test_tilde_target_expansion(self, tmp_path) -> None:
|
|
"""Mapping with ~/repo target expands to home dir."""
|
|
(tmp_path / "src").mkdir()
|
|
mappings = [{"source_path": "src", "target_path": "~/repo"}]
|
|
result = _resolve_git_mount_mappings(
|
|
str(tmp_path), mappings, None, "/home/user"
|
|
)
|
|
assert len(result) == 1
|
|
assert result[0]["target"] == "/home/user/repo"
|
|
|
|
def test_dollar_home_target_expansion(self, tmp_path) -> None:
|
|
"""Mapping with $HOME/repo target expands to home dir."""
|
|
(tmp_path / "src").mkdir()
|
|
mappings = [{"source_path": "src", "target_path": "$HOME/repo"}]
|
|
result = _resolve_git_mount_mappings(
|
|
str(tmp_path), mappings, None, "/home/user"
|
|
)
|
|
assert len(result) == 1
|
|
assert result[0]["target"] == "/home/user/repo"
|
|
|
|
def test_absolute_target_unchanged(self, tmp_path) -> None:
|
|
"""Absolute target paths are not modified."""
|
|
(tmp_path / "src").mkdir()
|
|
mappings = [{"source_path": "src", "target_path": "/app/src"}]
|
|
result = _resolve_git_mount_mappings(
|
|
str(tmp_path), mappings, None, "/home/user"
|
|
)
|
|
assert len(result) == 1
|
|
assert result[0]["target"] == "/app/src"
|