flow-pilot / tests /test_flowpilot_api.py
SushanthUV's picture
FIxed get owner function to return correct owner email id
f0c7697
from fastapi.testclient import TestClient
from backend.main import app
from backend.storage.database import InMemoryDatabase, db
client = TestClient(app)
def test_in_memory_database_creates_timezone_aware_owner_timestamp():
db = InMemoryDatabase()
owner = db.ensure_owner("owner-1", "owner-1@example.com")
assert owner["created_at"].endswith("+00:00")
def test_status_returns_404_for_unknown_owner_without_creating_placeholder():
db.reset()
status_response = client.get("/api/status", params={"owner_id": "missing-owner"})
assert status_response.status_code == 404
assert "missing-owner" not in db.owners
def test_analyze_updates_existing_owner_email():
db.reset()
db.ensure_owner("sushanth", "sushanth@example.com")
analyze_response = client.post(
"/api/analyze",
json={
"owner_id": "sushanth",
"owner_email": "real@example.com",
"description": "Weekly pricing and orders.",
},
)
assert analyze_response.status_code == 200
assert db.owners["sushanth"]["email"] == "real@example.com"
def test_owner_flow_builds_and_deploys_workflows():
db.reset()
analyze_response = client.post(
"/api/analyze",
json={
"owner_id": "raj",
"owner_email": "raj@orchard.com",
"description": (
"I run an apple orchard. Customers email me orders, I check inventory in my Google Sheet, "
"reply with pickup details, and every Friday I count weekly orders."
),
},
)
assert analyze_response.status_code == 200
analysis = analyze_response.json()
assert analysis["tasks"]["fully_automatable"]
suggest_response = client.post(
"/api/suggest-workflows",
json={
"owner_id": "raj",
"task_name": "Order processing",
"task_description": "Read order emails, update sheets, and send confirmations.",
"category": "fully_automatable",
},
)
assert suggest_response.status_code == 200
option = suggest_response.json()["options"][0]
build_response = client.post(
"/api/build-workflow",
json={
"owner_id": "raj",
"task_name": "Order processing",
"task_description": "Read order emails, update sheets, and send confirmations.",
"category": "fully_automatable",
"selected_option": option,
},
)
assert build_response.status_code == 200
workflow = build_response.json()["workflow"]
assert workflow["trigger"]["type"] == "email_received"
deploy_response = client.post(
"/api/deploy",
json={"owner_id": "raj", "workflows": [workflow]},
)
assert deploy_response.status_code == 200
assert deploy_response.json()["status"] == "deployed"
def test_upload_and_status_endpoints():
db.reset()
client.post(
"/api/analyze",
json={"owner_id": "raj2", "owner_email": "raj2@orchard.com", "description": "Weekly pricing and orders."},
)
upload_response = client.post(
"/api/upload-data",
json={
"owner_id": "raj2",
"filename": "price-list.csv",
"file_type": "csv",
"purpose": "price_list",
"content": "item,price\nHoneycrisp,3.50\nFuji,2.75\n",
},
)
assert upload_response.status_code == 200
status_response = client.get("/api/status", params={"owner_id": "raj2"})
assert status_response.status_code == 200
assert status_response.json()["owner"]["id"] == "raj2"
def test_reset_endpoint_clears_all_in_memory_data():
db.reset()
analyze_response = client.post(
"/api/analyze",
json={
"owner_id": "reset-user",
"owner_email": "reset-user@example.com",
"description": "Weekly pricing and orders.",
},
)
assert analyze_response.status_code == 200
reset_response = client.post("/api/reset")
assert reset_response.status_code == 200
assert reset_response.json() == {"status": "ok", "message": "In-memory data reset."}
assert db.owners == {}
assert db.workflows == {}
assert db.data_files == {}
assert db.execution_logs == {}
assert db.escalations == {}
assert db.sheets == {}
assert db.outbound_emails == {}