OnyxMunk's picture
feat: Implement rate limiting, retry logic, input validation for API endpoints, add CI workflow, and enhance frontend UI with copy functionality and Tailwind CSS.
46b394e
from fastapi.testclient import TestClient
from server.main import app
import os
client = TestClient(app)
def test_health_check():
response = client.get("/health")
assert response.status_code == 200
assert response.json() == {"status": "ok"}
def test_healthz_check():
response = client.get("/healthz")
assert response.status_code == 200
assert response.json() == {"status": "ok"}
def test_generate_agent():
payload = {
"name": "TestApiAgent",
"prompt": "You are a test agent.",
"task": "Do nothing.",
"model": "claude-3-5-sonnet-20241022",
"provider": "anthropic"
}
response = client.post("/api/generate", json=payload)
assert response.status_code == 200
data = response.json()
assert data["status"] == "success"
assert "TestApiAgent" in data["code"]
assert "filename" in data
assert data["filename"] == "testapiagent.py"
def test_generate_agent_huggingface():
payload = {
"name": "TestHfAgent",
"prompt": "You are a test agent.",
"task": "Do nothing.",
"model": "meta-llama/Meta-Llama-3-8B-Instruct",
"provider": "huggingface"
}
response = client.post("/api/generate", json=payload)
assert response.status_code == 200
data = response.json()
assert data["status"] == "success"
assert "TestHfAgent" in data["code"]
def test_generate_agent_invalid_model():
payload = {
"name": "TestAgent",
"prompt": "Test",
"task": "Test",
"model": "invalid-model",
"provider": "anthropic"
}
response = client.post("/api/generate", json=payload)
assert response.status_code == 422 # Validation error
def test_generate_agent_long_prompt():
payload = {
"name": "TestAgent",
"prompt": "A" * 10001, # Exceeds 10000 char limit
"task": "Test",
"model": "claude-3-5-sonnet-20241022",
"provider": "anthropic"
}
response = client.post("/api/generate", json=payload)
assert response.status_code == 400
assert "exceeds maximum length" in response.json()["detail"].lower()
def test_execute_agent():
test_code = '''
class TestAgent:
def __init__(self, api_key):
self.api_key = api_key
def run(self, task):
return f"Processed: {task}"
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--task", default="test")
args = parser.parse_args()
agent = TestAgent("test")
print(agent.run(args.task))
'''
payload = {
"code": test_code,
"task": "Hello World"
}
response = client.post("/api/execute", json=payload)
assert response.status_code == 200
data = response.json()
assert data["status"] == "success"
assert "Processed: Hello World" in data["output"]
def test_execute_agent_large_code():
payload = {
"code": "A" * 100001, # Exceeds 100KB limit
"task": "Test"
}
response = client.post("/api/execute", json=payload)
assert response.status_code == 400
assert "exceeds maximum size" in response.json()["detail"].lower()