mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-04 21:00:40 +08:00
feat: add health test for PR agent commands and improve output handling
This commit is contained in:
@ -204,7 +204,8 @@ class PRCodeSuggestions:
|
|||||||
self.git_provider.remove_comment(self.progress_response)
|
self.git_provider.remove_comment(self.progress_response)
|
||||||
else:
|
else:
|
||||||
get_logger().info('Code suggestions generated for PR, but not published since publish_output is False.')
|
get_logger().info('Code suggestions generated for PR, but not published since publish_output is False.')
|
||||||
get_settings().data = {"artifact": data}
|
pr_body = self.generate_summarized_suggestions(data)
|
||||||
|
get_settings().data = {"artifact": pr_body}
|
||||||
return
|
return
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
get_logger().error(f"Failed to generate code suggestions for PR, error: {e}",
|
get_logger().error(f"Failed to generate code suggestions for PR, error: {e}",
|
||||||
|
@ -171,6 +171,10 @@ class PRDescription:
|
|||||||
update_comment = f"**[PR Description]({pr_url})** updated to latest commit ({latest_commit_url})"
|
update_comment = f"**[PR Description]({pr_url})** updated to latest commit ({latest_commit_url})"
|
||||||
self.git_provider.publish_comment(update_comment)
|
self.git_provider.publish_comment(update_comment)
|
||||||
self.git_provider.remove_initial_comment()
|
self.git_provider.remove_initial_comment()
|
||||||
|
else:
|
||||||
|
get_logger().info('PR description, but not published since publish_output is False.')
|
||||||
|
get_settings().data = {"artifact": pr_body}
|
||||||
|
return
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
get_logger().error(f"Error generating PR description {self.pr_id}: {e}")
|
get_logger().error(f"Error generating PR description {self.pr_id}: {e}")
|
||||||
|
|
||||||
|
@ -170,6 +170,10 @@ class PRReviewer:
|
|||||||
self.git_provider.remove_initial_comment()
|
self.git_provider.remove_initial_comment()
|
||||||
if get_settings().pr_reviewer.inline_code_comments:
|
if get_settings().pr_reviewer.inline_code_comments:
|
||||||
self._publish_inline_code_comments()
|
self._publish_inline_code_comments()
|
||||||
|
else:
|
||||||
|
get_logger().info("Review output is not published")
|
||||||
|
get_settings().data = {"artifact": pr_review}
|
||||||
|
return
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
get_logger().error(f"Failed to review PR: {e}")
|
get_logger().error(f"Failed to review PR: {e}")
|
||||||
|
|
||||||
|
70
tests/health_test/main.py
Normal file
70
tests/health_test/main.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
import argparse
|
||||||
|
import asyncio
|
||||||
|
import copy
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from starlette_context import request_cycle_context, context
|
||||||
|
|
||||||
|
from pr_agent.cli import run_command
|
||||||
|
from pr_agent.config_loader import get_settings, global_settings
|
||||||
|
|
||||||
|
from pr_agent.agent.pr_agent import PRAgent, commands
|
||||||
|
from pr_agent.log import get_logger, setup_logger
|
||||||
|
from tests.e2e_tests import e2e_utils
|
||||||
|
|
||||||
|
log_level = os.environ.get("LOG_LEVEL", "INFO")
|
||||||
|
setup_logger(log_level)
|
||||||
|
|
||||||
|
|
||||||
|
async def run_async():
|
||||||
|
pr_url = "https://github.com/Codium-ai/pr-agent/pull/1385" # A small PR to test the agent
|
||||||
|
|
||||||
|
get_settings().set("config.git_provider", "github")
|
||||||
|
get_settings().set("config.publish_output", False)
|
||||||
|
get_settings().set("config.fallback_models", [])
|
||||||
|
|
||||||
|
agent = PRAgent()
|
||||||
|
try:
|
||||||
|
# Run the 'describe' command
|
||||||
|
get_logger().info(f"\nSanity check for the 'describe' command...")
|
||||||
|
original_settings = copy.deepcopy(get_settings())
|
||||||
|
await agent.handle_request(pr_url, ['describe'])
|
||||||
|
pr_header_body = dict(get_settings().data)['artifact']
|
||||||
|
assert pr_header_body.startswith('###') and 'PR Type' in pr_header_body and 'Description' in pr_header_body
|
||||||
|
context['settings'] = copy.deepcopy(original_settings) # Restore settings state after each test to prevent test interference
|
||||||
|
get_logger().info("PR description generated successfully\n")
|
||||||
|
|
||||||
|
# Run the 'review' command
|
||||||
|
get_logger().info(f"\nSanity check for the 'review' command...")
|
||||||
|
original_settings = copy.deepcopy(get_settings())
|
||||||
|
await agent.handle_request(pr_url, ['review'])
|
||||||
|
pr_review_body = dict(get_settings().data)['artifact']
|
||||||
|
assert pr_review_body.startswith('##') and 'PR Reviewer Guide' in pr_review_body
|
||||||
|
context['settings'] = copy.deepcopy(original_settings) # Restore settings state after each test to prevent test interference
|
||||||
|
get_logger().info("PR review generated successfully\n")
|
||||||
|
|
||||||
|
# Run the 'improve' command
|
||||||
|
get_logger().info(f"\nSanity check for the 'improve' command...")
|
||||||
|
original_settings = copy.deepcopy(get_settings())
|
||||||
|
await agent.handle_request(pr_url, ['improve'])
|
||||||
|
pr_improve_body = dict(get_settings().data)['artifact']
|
||||||
|
assert pr_improve_body.startswith('##') and 'PR Code Suggestions' in pr_improve_body
|
||||||
|
context['settings'] = copy.deepcopy(original_settings) # Restore settings state after each test to prevent test interference
|
||||||
|
get_logger().info("PR improvements generated successfully\n")
|
||||||
|
|
||||||
|
get_logger().info(f"\n\n========\nHealth test passed successfully\n========")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
get_logger().exception(f"\n\n========\nHealth test failed\n========")
|
||||||
|
raise e
|
||||||
|
|
||||||
|
|
||||||
|
def run():
|
||||||
|
with request_cycle_context({}):
|
||||||
|
context['settings'] = copy.deepcopy(global_settings)
|
||||||
|
asyncio.run(run_async())
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
run()
|
Reference in New Issue
Block a user