fix: update tests for path_append env dict change
This commit is contained in:
@@ -255,6 +255,7 @@ class ExecTool(Tool):
|
||||
home = os.environ.get("HOME", "/tmp")
|
||||
env = {
|
||||
"HOME": home,
|
||||
"PATH": os.environ.get ("PATH", "/usr/bin:/bin"),
|
||||
"LANG": os.environ.get("LANG", "C.UTF-8"),
|
||||
"TERM": os.environ.get("TERM", "dumb"),
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ class TestBuildEnvUnix:
|
||||
def test_expected_keys(self):
|
||||
with patch("nanobot.agent.tools.shell._IS_WINDOWS", False):
|
||||
env = ExecTool()._build_env()
|
||||
expected = {"HOME", "LANG", "TERM"}
|
||||
expected = {"HOME", "LANG", "PATH","TERM"}
|
||||
assert expected <= set(env)
|
||||
if sys.platform != "win32":
|
||||
assert set(env) == expected
|
||||
@@ -148,23 +148,32 @@ class TestSpawnWindows:
|
||||
class TestPathAppendPlatform:
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_unix_injects_export(self):
|
||||
"""On Unix, path_append is an export statement prepended to command."""
|
||||
mock_proc = AsyncMock()
|
||||
async def test_unix_injects_export (self):
|
||||
"""On Unix, path_append is passed via the env dict, not shell string."""
|
||||
mock_proc = AsyncMock ()
|
||||
mock_proc.communicate.return_value = (b"ok", b"")
|
||||
mock_proc.returncode = 0
|
||||
|
||||
with (
|
||||
patch("nanobot.agent.tools.shell._IS_WINDOWS", False),
|
||||
patch.object(ExecTool, "_spawn", return_value=mock_proc) as mock_spawn,
|
||||
patch.object(ExecTool, "_guard_command", return_value=None),
|
||||
):
|
||||
tool = ExecTool(path_append="/opt/bin")
|
||||
await tool.execute(command="ls")
|
||||
captured_cmd = None
|
||||
captured_env = {}
|
||||
|
||||
spawned_cmd = mock_spawn.call_args[0][0]
|
||||
assert 'export PATH="$PATH:/opt/bin"' in spawned_cmd
|
||||
assert spawned_cmd.endswith("ls")
|
||||
async def capture_spawn (cmd, cwd, env):
|
||||
nonlocal captured_cmd
|
||||
captured_cmd = cmd
|
||||
captured_env.update (env)
|
||||
return mock_proc
|
||||
|
||||
with (
|
||||
patch ("nanobot.agent.tools.shell._IS_WINDOWS", False),
|
||||
patch.object (ExecTool, "_spawn", side_effect=capture_spawn),
|
||||
patch.object (ExecTool, "_guard_command", return_value=None),
|
||||
):
|
||||
tool = ExecTool (path_append="/opt/bin")
|
||||
await tool.execute (command="ls")
|
||||
|
||||
# path_append must be in the env dict, NOT injected into the command
|
||||
assert captured_cmd == "ls"
|
||||
assert captured_env["PATH"].endswith (":/opt/bin")
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_windows_modifies_env(self):
|
||||
@@ -181,6 +190,7 @@ class TestPathAppendPlatform:
|
||||
|
||||
with (
|
||||
patch("nanobot.agent.tools.shell._IS_WINDOWS", True),
|
||||
patch ("nanobot.agent.tools.shell.os.pathsep", ";"),
|
||||
patch.object(ExecTool, "_spawn", side_effect=capture_spawn),
|
||||
patch.object(ExecTool, "_guard_command", return_value=None),
|
||||
):
|
||||
|
||||
Reference in New Issue
Block a user