mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-03 04:10:49 +08:00
Initial commit - PR-Agent OSS release
This commit is contained in:
84
tests/unit/test_handle_patch_deletions.py
Normal file
84
tests/unit/test_handle_patch_deletions.py
Normal file
@ -0,0 +1,84 @@
|
||||
# Generated by CodiumAI
|
||||
import logging
|
||||
|
||||
from pr_agent.algo.git_patch_processing import handle_patch_deletions
|
||||
from pr_agent.config_loader import settings
|
||||
|
||||
"""
|
||||
Code Analysis
|
||||
|
||||
Objective:
|
||||
The objective of the function is to handle entire file or deletion patches and return the patch after omitting the
|
||||
deletion hunks.
|
||||
|
||||
Inputs:
|
||||
- patch: a string representing the patch to be handled
|
||||
- original_file_content_str: a string representing the original content of the file
|
||||
- new_file_content_str: a string representing the new content of the file
|
||||
- file_name: a string representing the name of the file
|
||||
|
||||
Flow:
|
||||
- If new_file_content_str is empty, set patch to "File was deleted" and return it
|
||||
- Otherwise, split patch into lines and omit the deletion hunks using the omit_deletion_hunks function
|
||||
- If the resulting patch is different from the original patch, log a message and set patch to the new patch
|
||||
- Return the resulting patch
|
||||
|
||||
Outputs:
|
||||
- A string representing the patch after omitting the deletion hunks
|
||||
|
||||
Additional aspects:
|
||||
- The function uses the settings from the configuration files to determine the verbosity level of the logging messages
|
||||
- The omit_deletion_hunks function is called to remove the deletion hunks from the patch
|
||||
- The function handles the case where the new_file_content_str is empty by setting the patch to "File was deleted"
|
||||
"""
|
||||
|
||||
|
||||
class TestHandlePatchDeletions:
|
||||
# Tests that handle_patch_deletions returns the original patch when new_file_content_str is not empty
|
||||
def test_handle_patch_deletions_happy_path_new_file_content_exists(self):
|
||||
patch = '--- a/file.py\n+++ b/file.py\n@@ -1,2 +1,2 @@\n-foo\n-bar\n+baz\n'
|
||||
original_file_content_str = 'foo\nbar\n'
|
||||
new_file_content_str = 'foo\nbaz\n'
|
||||
file_name = 'file.py'
|
||||
assert handle_patch_deletions(patch, original_file_content_str, new_file_content_str,
|
||||
file_name) == patch.rstrip()
|
||||
|
||||
# Tests that handle_patch_deletions logs a message when verbosity_level is greater than 0
|
||||
def test_handle_patch_deletions_happy_path_verbosity_level_greater_than_0(self, caplog):
|
||||
patch = '--- a/file.py\n+++ b/file.py\n@@ -1,2 +1,2 @@\n-foo\n-bar\n+baz\n'
|
||||
original_file_content_str = 'foo\nbar\n'
|
||||
new_file_content_str = ''
|
||||
file_name = 'file.py'
|
||||
settings.config.verbosity_level = 1
|
||||
|
||||
with caplog.at_level(logging.INFO):
|
||||
handle_patch_deletions(patch, original_file_content_str, new_file_content_str, file_name)
|
||||
assert any("Processing file" in message for message in caplog.messages)
|
||||
|
||||
# Tests that handle_patch_deletions returns 'File was deleted' when new_file_content_str is empty
|
||||
def test_handle_patch_deletions_edge_case_new_file_content_empty(self):
|
||||
patch = '--- a/file.py\n+++ b/file.py\n@@ -1,2 +1,2 @@\n-foo\n-bar\n'
|
||||
original_file_content_str = 'foo\nbar\n'
|
||||
new_file_content_str = ''
|
||||
file_name = 'file.py'
|
||||
assert handle_patch_deletions(patch, original_file_content_str, new_file_content_str,
|
||||
file_name) == 'File was deleted\n'
|
||||
|
||||
# Tests that handle_patch_deletions returns the original patch when patch and patch_new are equal
|
||||
def test_handle_patch_deletions_edge_case_patch_and_patch_new_are_equal(self):
|
||||
patch = '--- a/file.py\n+++ b/file.py\n@@ -1,2 +1,2 @@\n-foo\n-bar\n'
|
||||
original_file_content_str = 'foo\nbar\n'
|
||||
new_file_content_str = 'foo\nbar\n'
|
||||
file_name = 'file.py'
|
||||
assert handle_patch_deletions(patch, original_file_content_str, new_file_content_str,
|
||||
file_name).rstrip() == patch.rstrip()
|
||||
|
||||
# Tests that handle_patch_deletions returns the modified patch when patch and patch_new are not equal
|
||||
def test_handle_patch_deletions_edge_case_patch_and_patch_new_are_not_equal(self):
|
||||
patch = '--- a/file.py\n+++ b/file.py\n@@ -1,2 +1,2 @@\n-foo\n-bar\n'
|
||||
original_file_content_str = 'foo\nbar\n'
|
||||
new_file_content_str = 'foo\nbaz\n'
|
||||
file_name = 'file.py'
|
||||
expected_patch = '--- a/file.py\n+++ b/file.py\n@@ -1,2 +1,2 @@\n-foo\n-bar'
|
||||
assert handle_patch_deletions(patch, original_file_content_str, new_file_content_str,
|
||||
file_name) == expected_patch
|
Reference in New Issue
Block a user