import pytest from httpx import AsyncClient, ASGITransport from app.main import app @pytest.mark.asyncio async def test_create_source(): async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as ac: response = await ac.post("/api/sources/", json={ "name": "Test Source", "type": "local", "config": {"path": "/tmp/test"} }) assert response.status_code == 200 data = response.json() assert data["name"] == "Test Source" assert data["type"] == "local" assert "id" in data @pytest.mark.asyncio async def test_list_sources(): async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as ac: # Create source first await ac.post("/api/sources/", json={ "name": "Test Source", "type": "local", "config": {"path": "/tmp/test"} }) response = await ac.get("/api/sources/") assert response.status_code == 200 data = response.json() assert len(data) >= 1 @pytest.mark.asyncio async def test_get_source(): async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as ac: create_resp = await ac.post("/api/sources/", json={ "name": "Test Source", "type": "local", "config": {"path": "/tmp/test"} }) source_id = create_resp.json()["id"] response = await ac.get(f"/api/sources/{source_id}") assert response.status_code == 200 assert response.json()["id"] == source_id @pytest.mark.asyncio async def test_delete_source(): async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as ac: create_resp = await ac.post("/api/sources/", json={ "name": "Delete Me", "type": "local", "config": {"path": "/tmp/test"} }) source_id = create_resp.json()["id"] response = await ac.delete(f"/api/sources/{source_id}") assert response.status_code == 200 # Verify deletion async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as ac: get_resp = await ac.get(f"/api/sources/{source_id}") assert get_resp.status_code == 404 @pytest.mark.asyncio async def test_update_source(): async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as ac: create_resp = await ac.post("/api/sources/", json={ "name": "Original Name", "type": "local", "config": {"path": "/tmp/test"} }) source_id = create_resp.json()["id"] response = await ac.put(f"/api/sources/{source_id}", json={ "name": "Updated Name" }) assert response.status_code == 200 assert response.json()["name"] == "Updated Name" assert response.json()["type"] == "local" # Unchanged @pytest.mark.asyncio async def test_get_source_not_found(): async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as ac: response = await ac.get("/api/sources/99999") assert response.status_code == 404 @pytest.mark.asyncio async def test_update_source_not_found(): async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as ac: response = await ac.put("/api/sources/99999", json={"name": "Test"}) assert response.status_code == 404 @pytest.mark.asyncio async def test_delete_source_not_found(): async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as ac: response = await ac.delete("/api/sources/99999") assert response.status_code == 404