package onlyoffice import ( "encoding/json" "strings" "testing" ) func TestESUpdateBulkBodyDocAsUpsert(t *testing.T) { got := string(esUpdateBulkBody([]TextDoc{{ID: "42", Number: "RE-1", Seller: "ACME"}})) if !strings.Contains(got, `{"update":{"_id":"42"}}`) { t.Errorf("missing update action: %s", got) } if !strings.Contains(got, `"doc_as_upsert":true`) { t.Errorf("missing doc_as_upsert: %s", got) } if !strings.Contains(got, `"number":"RE-1"`) || !strings.Contains(got, `"seller":"ACME"`) { t.Errorf("gator fields missing: %s", got) } } func TestESTextSearchRequestGatorFilters(t *testing.T) { body, err := json.Marshal(esTextSearchRequest(SearchQuery{ Text: "rechnung", Seller: "ACME", Number: "RE-1", Status: "ok", })) if err != nil { t.Fatal(err) } s := string(body) for _, want := range []string{ `"seller":"ACME"`, `"number":"RE-1"`, `"status":"ok"`, } { if !strings.Contains(s, want) { t.Errorf("filter %s missing in %s", want, s) } } for _, src := range []string{`"seller"`, `"number"`, `"total"`, `"status"`, `"url"`} { if !strings.Contains(s, src) { t.Errorf("_source field %s missing in %s", src, s) } } } func TestGatorFields(t *testing.T) { if got := gatorFields(TextDoc{ID: "1", Title: "x"}); got != nil { t.Errorf("empty doc fields = %v, want nil", got) } got := gatorFields(TextDoc{ID: "1", Number: "RE-1", Seller: "ACME", Status: "ok"}) if got["number"] != "RE-1" || got["seller"] != "ACME" || got["status"] != "ok" { t.Errorf("gatorFields = %v", got) } if _, ok := got["total"]; ok { t.Errorf("empty total should be omitted: %v", got) } } func TestParseESTextResponseGatorFields(t *testing.T) { raw := []byte(`{"hits":{"total":{"value":1},"hits":[ {"_id":"42","_score":1.0,"_source":{"id":"42","title":"a.pdf","seller":"ACME","number":"RE-1","status":"ok"}} ]}}`) hits, err := parseESTextResponse(raw) if err != nil { t.Fatal(err) } if len(hits) != 1 { t.Fatalf("hits = %d", len(hits)) } if hits[0].Fields["seller"] != "ACME" || hits[0].Fields["number"] != "RE-1" { t.Errorf("Fields = %v", hits[0].Fields) } }