import pytest pytestmark = pytest.mark.integration @pytest.mark.asyncio async def test_create_artist_returns_201(client): resp = await client.post("/api/artists", json={"name": "Alice"}) assert resp.status_code == 201 body = await resp.get_json() assert body["name"] == "Alice" assert body["slug"] == "alice" assert body["created"] is True @pytest.mark.asyncio async def test_create_artist_idempotent(client): a = await client.post("/api/artists", json={"name": "Bob"}) b = await client.post("/api/artists", json={"name": "Bob"}) assert (await a.get_json())["created"] is True body_b = await b.get_json() assert body_b["created"] is False assert body_b["id"] == (await a.get_json())["id"] @pytest.mark.asyncio async def test_create_artist_rejects_empty(client): resp = await client.post("/api/artists", json={"name": " "}) assert resp.status_code == 400 @pytest.mark.asyncio async def test_autocomplete_returns_matches(client): await client.post("/api/artists", json={"name": "Alice"}) await client.post("/api/artists", json={"name": "Alice Cooper"}) await client.post("/api/artists", json={"name": "Bob"}) resp = await client.get("/api/artists/autocomplete?q=alic") assert resp.status_code == 200 names = [a["name"] for a in await resp.get_json()] assert "Alice" in names assert "Alice Cooper" in names assert "Bob" not in names @pytest.mark.asyncio async def test_autocomplete_empty_query(client): resp = await client.get("/api/artists/autocomplete?q=") assert resp.status_code == 200 assert await resp.get_json() == [] @pytest.mark.asyncio async def test_patch_renames_display_name_only(client): # #130: PATCH renames the display name; slug unchanged (paths safe). created = await (await client.post("/api/artists", json={"name": "12345678"})).get_json() resp = await client.patch( f"/api/artists/{created['id']}", json={"name": "Kurotsuchi Machi"} ) assert resp.status_code == 200 body = await resp.get_json() assert body["name"] == "Kurotsuchi Machi" assert body["slug"] == created["slug"] # slug frozen @pytest.mark.asyncio async def test_patch_rename_validation(client): created = await (await client.post("/api/artists", json={"name": "Nn"})).get_json() assert (await client.patch( f"/api/artists/{created['id']}", json={"name": " "} )).status_code == 400 assert (await client.patch( f"/api/artists/{created['id']}", json={})).status_code == 400 assert (await client.patch( "/api/artists/999999", json={"name": "Ghost"})).status_code == 404