feat: use GitTemporaryDirectory for scripting tests

This commit is contained in:
Paul Gauthier (aider) 2024-08-01 15:44:55 -03:00
parent 99ce27f151
commit a4b6dea54d

View file

@ -1,67 +1,75 @@
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
from pathlib import Path
from aider.coders import Coder from aider.coders import Coder
from aider.io import InputOutput from aider.io import InputOutput
from aider.models import Model from aider.models import Model
from aider.utils import GitTemporaryDirectory
class TestScriptingAPI(unittest.TestCase): class TestScriptingAPI(unittest.TestCase):
@patch("aider.coders.base_coder.Coder.send") @patch("aider.coders.base_coder.Coder.send")
def test_basic_scripting(self, mock_send): def test_basic_scripting(self, mock_send):
# Setup with GitTemporaryDirectory():
def mock_send_side_effect(messages, functions=None): # Setup
coder.partial_response_content = "Changes applied successfully." def mock_send_side_effect(messages, functions=None):
coder.partial_response_function_call = None coder.partial_response_content = "Changes applied successfully."
return "Changes applied successfully." coder.partial_response_function_call = None
return "Changes applied successfully."
mock_send.side_effect = mock_send_side_effect mock_send.side_effect = mock_send_side_effect
# Test script # Test script
fnames = ["greeting.py"] fname = Path("greeting.py")
model = Model("gpt-4-turbo") fname.touch()
coder = Coder.create(main_model=model, fnames=fnames) fnames = [str(fname)]
model = Model("gpt-4-turbo")
coder = Coder.create(main_model=model, fnames=fnames)
result1 = coder.run("make a script that prints hello world") result1 = coder.run("make a script that prints hello world")
result2 = coder.run("make it say goodbye") result2 = coder.run("make it say goodbye")
# Assertions # Assertions
self.assertEqual(mock_send.call_count, 2) self.assertEqual(mock_send.call_count, 2)
mock_send.assert_any_call( mock_send.assert_any_call(
[{"role": "user", "content": "make a script that prints hello world"}], functions=None [{"role": "user", "content": "make a script that prints hello world"}], functions=None
) )
mock_send.assert_any_call( mock_send.assert_any_call(
[{"role": "user", "content": "make it say goodbye"}], functions=None [{"role": "user", "content": "make it say goodbye"}], functions=None
) )
self.assertEqual(result1, "Changes applied successfully.") self.assertEqual(result1, "Changes applied successfully.")
self.assertEqual(result2, "Changes applied successfully.") self.assertEqual(result2, "Changes applied successfully.")
self.assertEqual(coder.partial_response_content, "Changes applied successfully.") self.assertEqual(coder.partial_response_content, "Changes applied successfully.")
@patch("aider.coders.base_coder.Coder.send") @patch("aider.coders.base_coder.Coder.send")
def test_scripting_with_io(self, mock_send): def test_scripting_with_io(self, mock_send):
# Setup with GitTemporaryDirectory():
def mock_send_side_effect(messages, functions=None): # Setup
coder.partial_response_content = "New function added successfully." def mock_send_side_effect(messages, functions=None):
coder.partial_response_function_call = None coder.partial_response_content = "New function added successfully."
return "New function added successfully." coder.partial_response_function_call = None
return "New function added successfully."
mock_send.side_effect = mock_send_side_effect mock_send.side_effect = mock_send_side_effect
# Test script # Test script
fnames = ["greeting.py"] fname = Path("greeting.py")
model = Model("gpt-4-turbo") fname.touch()
io = InputOutput(yes=True) fnames = [str(fname)]
coder = Coder.create(main_model=model, fnames=fnames, io=io) model = Model("gpt-4-turbo")
io = InputOutput(yes=True)
coder = Coder.create(main_model=model, fnames=fnames, io=io)
result = coder.run("add a new function") result = coder.run("add a new function")
# Assertions # Assertions
mock_send.assert_called_once_with( mock_send.assert_called_once_with(
[{"role": "user", "content": "add a new function"}], functions=None [{"role": "user", "content": "add a new function"}], functions=None
) )
self.assertEqual(result, "New function added successfully.") self.assertEqual(result, "New function added successfully.")
self.assertTrue(io.yes) # Check that 'yes' is set to True self.assertTrue(io.yes) # Check that 'yes' is set to True
self.assertEqual(coder.partial_response_content, "New function added successfully.") self.assertEqual(coder.partial_response_content, "New function added successfully.")
if __name__ == "__main__": if __name__ == "__main__":