feat(search): pg_trgm-Suchindex + Backend-Endpunkt statt Client-Filter
Command Palette lud bisher beim Öffnen ALLE Objekte und filterte nur clientseitig per .includes() - unscharf und würde bei mehr Objekten langsam werden. Jetzt: GIN-Trigram-Index auf objekt.name/code (Migration 0023), neuer GET /suche?q=-Endpunkt (Ähnlichkeits-Ranking per pg_trgm similarity()), Frontend debounced (250ms) statt vollständiger Objektliste. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
import pytest
|
||||
|
||||
from tests.conftest import auth_header, login
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_suche_findet_treffer_ueber_name_und_code(client, objekt_mit_position, mitarbeiter_user):
|
||||
"""SEARCH-001: Objekt per (Teil-)Name UND per Code auffindbar."""
|
||||
objekt, _ = objekt_mit_position
|
||||
token = await login(client, "mitarbeiter1")
|
||||
|
||||
per_name = await client.get("/api/v1/suche?q=Kontroll-Test", headers=auth_header(token))
|
||||
assert per_name.status_code == 200
|
||||
treffer_ids = [t["id"] for t in per_name.json()]
|
||||
assert objekt.id in treffer_ids
|
||||
|
||||
per_code = await client.get("/api/v1/suche?q=KT-01", headers=auth_header(token))
|
||||
assert objekt.id in [t["id"] for t in per_code.json()]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_suche_zu_kurze_eingabe_liefert_leer(client, objekt_mit_position, mitarbeiter_user):
|
||||
token = await login(client, "mitarbeiter1")
|
||||
antwort = await client.get("/api/v1/suche?q=K", headers=auth_header(token))
|
||||
assert antwort.status_code == 200
|
||||
assert antwort.json() == []
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_suche_ohne_login_abgelehnt(client, objekt_mit_position):
|
||||
antwort = await client.get("/api/v1/suche?q=Kontroll")
|
||||
assert antwort.status_code == 401
|
||||
Reference in New Issue
Block a user