Some checks are pending
CI/CD Pipeline / test (push) Waiting to run
- Simplified the FastAPI application structure and improved error handling with middleware. - Introduced a retry decorator for asynchronous functions to enhance reliability. - Modularized the LLM initialization and prompt loading into separate functions for better maintainability. - Updated Pydantic models for Jira webhook payload and analysis flags to ensure proper validation and structure. - Implemented a structured logging configuration for better traceability and debugging. - Added comprehensive unit tests for prompt loading, response validation, and webhook handling. - Established a CI/CD pipeline with GitHub Actions for automated testing and coverage reporting. - Enhanced the prompt template for LLM analysis to include specific instructions for handling escalations.
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
import pytest
|
|
from fastapi import HTTPException
|
|
from jira_webhook_llm import app
|
|
from llm.models import JiraWebhookPayload
|
|
|
|
def test_error_handling_middleware(test_client, mock_jira_payload):
|
|
# Test 404 error handling
|
|
response = test_client.post("/nonexistent-endpoint", json={})
|
|
assert response.status_code == 404
|
|
assert "error_id" in response.json()
|
|
|
|
# Test validation error handling
|
|
invalid_payload = mock_jira_payload.copy()
|
|
invalid_payload.pop("issueKey")
|
|
response = test_client.post("/jira-webhook", json=invalid_payload)
|
|
assert response.status_code == 422
|
|
assert "details" in response.json()
|
|
|
|
def test_webhook_handler(test_client, mock_jira_payload):
|
|
# Test successful webhook handling
|
|
response = test_client.post("/jira-webhook", json=mock_jira_payload)
|
|
assert response.status_code == 200
|
|
assert "response" in response.json()
|
|
|
|
def test_llm_test_endpoint(test_client):
|
|
# Test LLM test endpoint
|
|
response = test_client.post("/test-llm")
|
|
assert response.status_code == 200
|
|
assert "response" in response.json()
|
|
|
|
def test_retry_decorator():
|
|
# Test retry decorator functionality
|
|
@app.retry(max_retries=3)
|
|
async def failing_function():
|
|
raise Exception("Test error")
|
|
|
|
with pytest.raises(Exception):
|
|
failing_function() |