import unittest from unittest.mock import patch from crewai_tools.tools.code_interpreter_tool.code_interpreter_tool import ( CodeInterpreterTool, ) class TestCodeInterpreterTool(unittest.TestCase): @patch("crewai_tools.tools.code_interpreter_tool.code_interpreter_tool.docker_from_env") def test_run_code_in_docker(self, docker_mock): tool = CodeInterpreterTool() code = "print('Hello, World!')" libraries_used = ["numpy", "pandas"] expected_output = "Hello, World!\n" docker_mock().containers.run().exec_run().exit_code = 0 docker_mock().containers.run().exec_run().output = ( expected_output.encode() ) result = tool.run_code_in_docker(code, libraries_used) self.assertEqual(result, expected_output) @patch("crewai_tools.tools.code_interpreter_tool.code_interpreter_tool.docker_from_env") def test_run_code_in_docker_with_error(self, docker_mock): tool = CodeInterpreterTool() code = "print(1/0)" libraries_used = ["numpy", "pandas"] expected_output = "Something went wrong while running the code: \nZeroDivisionError: division by zero\n" docker_mock().containers.run().exec_run().exit_code = 1 docker_mock().containers.run().exec_run().output = ( b"ZeroDivisionError: division by zero\n" ) result = tool.run_code_in_docker(code, libraries_used) self.assertEqual(result, expected_output) @patch("crewai_tools.tools.code_interpreter_tool.code_interpreter_tool.docker_from_env") def test_run_code_in_docker_with_script(self, docker_mock): tool = CodeInterpreterTool() code = """print("This is line 1") print("This is line 2")""" libraries_used = [] # No additional libraries needed for this test expected_output = "This is line 1\nThis is line 2\n" # Mock Docker responses docker_mock().containers.run().exec_run().exit_code = 0 docker_mock().containers.run().exec_run().output = expected_output.encode() result = tool.run_code_in_docker(code, libraries_used) self.assertEqual(result, expected_output)