Files
AutoGPT-Code-Ability/codex/tests/exec_external_tool_test.py
Zamil Majdyandmajdyz fa72f11b22 [AGPT-580] Support async subprocess execution (#145)
Subprocess execution implementation (for Ruff & PyRight) is currently a blocking call. This doesn't work well with the event-loop used by the fastapi.

Scope:

Make AiBlock.validate async
Make subprocess execution async.

---------

Co-authored-by: majdyz <[email protected]>
2024-03-25 18:22:18 +04:00

91 lines
2.9 KiB
Python

from shutil import which
import pytest
from codex.common.exec_external_tool import OutputType, exec_external_on_contents
@pytest.mark.asyncio
async def test_exec_external():
# Test case 1: Valid command arguments and file contents
command_arguments = ["cat"]
file_contents = "print('Hello World')"
expected_output = "print('Hello World')"
result = await exec_external_on_contents(command_arguments, file_contents)
assert result == expected_output
@pytest.mark.asyncio
async def test_exec_external_no_command():
# Test case 2: Empty command arguments
command_arguments = []
file_contents = "print('Hello World')"
with pytest.raises(AssertionError):
await exec_external_on_contents(command_arguments, file_contents)
@pytest.mark.asyncio
async def test_exec_external_invalid_command():
# Test case 3: Command execution error
command_arguments = ["invalid_command"]
file_contents = "print('Hello World')"
with pytest.raises(Exception):
await exec_external_on_contents(command_arguments, file_contents)
# This test only runs if I'm in debug mode on vscode?????????????? otherwise it can't find
# the ruff command
@pytest.mark.asyncio
async def test_exec_external_with_ruff():
if which("ruff") is None:
pytest.skip("Ruff not installed")
# Test case 4: Command execution with ruff
command_arguments = ["ruff", "check"]
file_contents = "print('Hello World')"
expected_output = "print('Hello World')"
result = await exec_external_on_contents(
command_arguments, file_contents, output_type=OutputType.STD_OUT
)
assert result == expected_output
# This test only runs if I'm in debug mode on vscode?????????????? otherwise it can't find
# the ruff command
@pytest.mark.asyncio
async def test_exec_external_with_ruff_fails():
if which("ruff") is None:
pytest.skip("Ruff not installed")
# Test case 5: Command execution with ruff fails
command_arguments = ["ruff", "check"]
file_contents = "print('Hello World'"
with pytest.raises(Exception) as exc_info:
await exec_external_on_contents(
command_arguments, file_contents, output_type=OutputType.STD_OUT
)
assert exc_info.value.args[0]
## This test only runs if I'm in debug mode on vscode?????????????? otherwise it can't find
# the prisma command
@pytest.mark.asyncio
async def test_exec_external_with_prisma():
if which("prisma") is None:
pytest.skip("Prisma not installed")
# Test case 6: Command execution with prisma
command_arguments = ["prisma", "validate", "--schema"]
file_contents = (
"model User {\n id Int @id @default(autoincrement())\n name String\n}"
)
expected_output = (
"model User {\n id Int @id @default(autoincrement())\n name String\n}"
)
result = await exec_external_on_contents(
command_arguments, file_contents, output_type=OutputType.STD_ERR
)
assert result == expected_output