"""Tests for the example plugin.""" import pytest from httpx import AsyncClient, ASGITransport from app.main import create_app @pytest.fixture async def client(): """Create a test client.""" app = create_app() transport = ASGITransport(app=app) async with AsyncClient(transport=transport, base_url="http://test") as ac: yield ac @pytest.fixture def auth_headers(): """Return headers with valid authentication.""" return { "Authorization": "Bearer test-token", "X-Tenant-ID": "test-tenant", } @pytest.mark.asyncio async def test_list_items_requires_auth(client: AsyncClient): """Test that listing items requires authentication.""" response = await client.get("/api/v1/example") assert response.status_code in (401, 403) @pytest.mark.asyncio async def test_list_items_with_auth(client: AsyncClient, auth_headers: dict): """Test that listing items works with authentication.""" response = await client.get("/api/v1/example", headers=auth_headers) assert response.status_code == 200 data = response.json() assert "items" in data assert "total" in data @pytest.mark.asyncio async def test_create_item_requires_write_permission(client: AsyncClient, auth_headers: dict): """Test that creating items requires write permission.""" response = await client.post( "/api/v1/example", headers=auth_headers, json={"name": "Test Item"}, ) # May return 201 or 403 depending on test permissions assert response.status_code in (201, 403) @pytest.mark.asyncio async def test_get_item_returns_404_for_missing(client: AsyncClient, auth_headers: dict): """Test that getting a non-existent item returns 404.""" response = await client.get( "/api/v1/example/non-existent-id", headers=auth_headers, ) assert response.status_code == 404