From 6d22dd06f80f253dc0db9962d4a1f3b9c3bf4ea6 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 21 Jul 2023 15:56:27 -0300 Subject: [PATCH] aider: Refactored `test_main_with_empty_dir_new_file` to use `@patch` decorator to mock `get_commit_message` method. # Aider chat conversation: USER: @patch("aider.repo.AiderRepo.get_commit_message") is not patching it ASSISTANT: It seems like you're having trouble with the `@patch` decorator not correctly patching the `get_commit_message` method of the `AiderRepo` class in your tests. To help you with this, I need to understand the context better. Could you please provide more details about the issue? Are you getting any error messages? If so, could you share them? USER: in `test_main_with_empty_dir_new_file` i don't want `get_commit_message` to be actually called. just to return a mock value ASSISTANT: The `@patch` decorator from the `unittest.mock` module is used to replace the actual method with a mock method during testing. If `get_commit_message` is still being called, it might be due to the incorrect import path in the `@patch` decorator. In your case, the `@patch` decorator should be used as follows: ```python @patch("aider.repo.AiderRepo.get_commit_message", return_value="commit message!") ``` This will replace the `get_commit_message` method with a mock method that always returns "commit message!". Here is the updated `test_main_with_empty_dir_new_file` method: ```python tests/test_main.py <<<<<<< ORIGINAL @patch("aider.repo.AiderRepo.get_commit_message") def test_main_with_empty_dir_new_file(self, get_commit_message): get_commit_message.return_value = "commit message!" main(["foo.txt", "--yes","--no-git"], input=DummyInput(), output=DummyOutput()) self.assertTrue(os.path.exists("foo.txt")) ======= @patch("aider.repo.AiderRepo.get_commit_message", return_value="commit message!") def test_main_with_empty_dir_new_file(self, get_commit_message): main(["foo.txt", "--yes","--no-git"], input=DummyInput(), output=DummyOutput()) self.assertTrue(os.path.exists("foo.txt")) >>>>>>> UPDATED ``` This change should ensure that the actual `get_commit_message` method is not called during the test. Instead, the mock method will be used, returning the specified mock value. --- aider/main.py | 5 +++-- aider/repo.py | 17 +++++++++-------- tests/test_main.py | 5 +++-- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/aider/main.py b/aider/main.py index 3958f2d38..c6c5e6091 100644 --- a/aider/main.py +++ b/aider/main.py @@ -440,8 +440,6 @@ def main(args=None, input=None, output=None): io.tool_output(repo_map) return - coder.dirty_commit() - if args.apply: content = io.read_text(args.apply) if content is None: @@ -450,6 +448,9 @@ def main(args=None, input=None, output=None): return io.tool_output("Use /help to see in-chat commands, run with --help to see cmd line args") + + coder.dirty_commit() + if args.message: io.tool_output() coder.run(with_message=args.message) diff --git a/aider/repo.py b/aider/repo.py index 330827adf..0016c332d 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -129,6 +129,15 @@ class AiderRepo: return commit_message def get_diffs(self, pretty, *args): + try: + commits = self.repo.iter_commits(self.repo.active_branch) + current_branch_has_commits = any(commits) + except git.exc.GitCommandError: + current_branch_has_commits = False + + if not current_branch_has_commits: + return "" + if pretty: args = ["--color"] + list(args) if not args: @@ -138,14 +147,6 @@ class AiderRepo: return diffs def show_diffs(self, pretty): - try: - current_branch_has_commits = any(self.repo.iter_commits(self.repo.active_branch)) - except git.exc.GitCommandError: - current_branch_has_commits = False - - if not current_branch_has_commits: - return "" - diffs = self.get_diffs(pretty) print(diffs) diff --git a/tests/test_main.py b/tests/test_main.py index e85c8439d..d5bc80d10 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -34,8 +34,9 @@ class TestMain(TestCase): def test_main_with_empty_dir_no_files_on_command(self): main(["--no-git"], input=DummyInput(), output=DummyOutput()) - def test_main_with_empty_dir_new_file(self): - main(["foo.txt", "--yes"], input=DummyInput(), output=DummyOutput()) + @patch("aider.repo.AiderRepo.get_commit_message", return_value="commit message!") + def test_main_with_empty_dir_new_file(self, get_commit_message): + main(["foo.txt", "--yes","--no-git"], input=DummyInput(), output=DummyOutput()) self.assertTrue(os.path.exists("foo.txt")) def test_main_with_empty_git_dir_new_file(self):