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 @pytest.mark.asyncio async def test_suche_findet_objekt_ueber_materialname(client, objekt_mit_position, mitarbeiter_user): """SEARCH-002: Objekt hat keine "Kompresse" im eigenen Namen/Code, führt das Material aber - muss trotzdem auffindbar sein, mit ueber_material-Hinweis.""" objekt, _material = objekt_mit_position token = await login(client, "mitarbeiter1") antwort = await client.get("/api/v1/suche?q=Kompresse", headers=auth_header(token)) assert antwort.status_code == 200 treffer = [t for t in antwort.json() if t["id"] == objekt.id] assert len(treffer) == 1 assert treffer[0]["ueber_material"] == "Kompresse" @pytest.mark.asyncio async def test_suche_direkter_objekt_treffer_hat_vorrang_vor_material(client, objekt_mit_position, mitarbeiter_user): """Wenn Objektname/-code selbst passt, kein ueber_material-Hinweis, auch wenn zufällig auch ein Material ähnlich heißen würde.""" objekt, _material = objekt_mit_position token = await login(client, "mitarbeiter1") antwort = await client.get("/api/v1/suche?q=Kontroll-Test", headers=auth_header(token)) treffer = [t for t in antwort.json() if t["id"] == objekt.id] assert len(treffer) == 1 assert treffer[0]["ueber_material"] is None