// Integrationstest (SRC-10): echte Manticore-Instanz, TEST_MANTICORE_URL // (gleiche Konvention wie facets_test.go/ranking_test.go). package search import ( "context" "testing" ) // TestAttachmentsBelowConfidence_QueryReturnsExpectedResults ist die // geforderte Pflichtprüfung 3: Abfrage aller Anhänge unterhalb einer // Konfidenzschwelle liefert erwartete Treffer. func TestAttachmentsBelowConfidence_QueryReturnsExpectedResults(t *testing.T) { client := setupClient(t) ctx := context.Background() tenant := "mandant-src10-konfidenz" docs := []Document{ {MessageID: "msg-conf-niedrig-1", Subject: "a", OCRLanguage: "deu", OCRConfidence: 22.5}, {MessageID: "msg-conf-niedrig-2", Subject: "b", OCRLanguage: "eng", OCRConfidence: 41.0}, {MessageID: "msg-conf-hoch", Subject: "c", OCRLanguage: "deu", OCRConfidence: 93.2}, {MessageID: "msg-conf-kein-ocr", Subject: "d"}, // kein OCR-Anhang, OCRConfidence bleibt 0 } for _, d := range docs { d.TenantSlug = tenant d.ID = DocumentID(tenant, d.MessageID) if err := client.Index(ctx, d); err != nil { t.Fatalf("index %s: %v", d.MessageID, err) } } results, err := client.AttachmentsBelowConfidence(ctx, tenant, 50.0) if err != nil { t.Fatalf("attachmentsbelowconfidence: %v", err) } ids := make(map[string]bool, len(results)) for _, r := range results { ids[r.MessageID] = true } if !ids["msg-conf-niedrig-1"] || !ids["msg-conf-niedrig-2"] { t.Fatalf("erwartete beide niedrig-konfidenten anhänge, habe: %+v", results) } if ids["msg-conf-hoch"] { t.Fatalf("hoch-konfidenter anhang hätte nicht auftauchen dürfen: %+v", results) } if ids["msg-conf-kein-ocr"] { t.Fatalf("dokument ohne ocr-anhang (confidence=0) hätte nicht auftauchen dürfen: %+v", results) } if len(results) != 2 { t.Fatalf("erwartete genau 2 treffer, habe %d: %+v", len(results), results) } }