"""Unit tests for TerminalSession docker exec invocation.""" import uuid from unittest.mock import AsyncMock, patch import pytest from src.services.terminal.terminal_session import TerminalSession @pytest.mark.unit @pytest.mark.asyncio async def test_start_passes_container_user_to_docker_exec() -> None: """When container_user is set, docker exec receives --user .""" session = TerminalSession( session_id=str(uuid.uuid4()), instance_id=uuid.uuid4(), container_id="container-123", container_user="dev", ) with patch( "src.services.terminal.terminal_session.pty.openpty", return_value=(1, 2), ): with patch("src.services.terminal.terminal_session.tty.setraw"): with patch( "src.services.terminal.terminal_session.asyncio.create_subprocess_exec", new=AsyncMock(), ) as mock_exec: with patch("src.services.terminal.terminal_session.os.close"): await session.start() args, _kwargs = mock_exec.call_args assert "docker" in args assert "exec" in args assert "--user" in args user_index = args.index("--user") assert args[user_index + 1] == "dev" assert "container-123" in args @pytest.mark.unit @pytest.mark.asyncio async def test_start_omits_user_when_not_configured() -> None: """Without container_user, docker exec does not receive --user.""" session = TerminalSession( session_id=str(uuid.uuid4()), instance_id=uuid.uuid4(), container_id="container-123", ) with patch( "src.services.terminal.terminal_session.pty.openpty", return_value=(1, 2), ): with patch("src.services.terminal.terminal_session.tty.setraw"): with patch( "src.services.terminal.terminal_session.asyncio.create_subprocess_exec", new=AsyncMock(), ) as mock_exec: with patch("src.services.terminal.terminal_session.os.close"): await session.start() args, _kwargs = mock_exec.call_args assert "--user" not in args