import pytest from backend.app.models import TagAllowlist, TagKind from backend.app.services.tag_service import TagService pytestmark = pytest.mark.integration @pytest.mark.asyncio async def test_list_and_patch_and_delete(client, db): tag = await TagService(db).find_or_create("AL", TagKind.character) db.add(TagAllowlist(tag_id=tag.id, min_confidence=0.95)) await db.commit() resp = await client.get("/api/allowlist") assert resp.status_code == 200 assert any(r["tag_id"] == tag.id for r in await resp.get_json()) resp = await client.patch( f"/api/tags/{tag.id}/allowlist", json={"min_confidence": 0.80} ) assert resp.status_code == 204 resp = await client.get(f"/api/tags/{tag.id}/allowlist") assert (await resp.get_json())["min_confidence"] == pytest.approx(0.80) resp = await client.delete(f"/api/tags/{tag.id}/allowlist") assert resp.status_code == 204 resp = await client.get(f"/api/tags/{tag.id}/allowlist") assert resp.status_code == 404 @pytest.mark.asyncio async def test_patch_rejects_out_of_range(client, db): tag = await TagService(db).find_or_create("AL2", TagKind.character) db.add(TagAllowlist(tag_id=tag.id)) await db.commit() resp = await client.patch( f"/api/tags/{tag.id}/allowlist", json={"min_confidence": 1.5} ) assert resp.status_code == 400