package models import ( "sort" "strings" "testing" "time" ) func TestSearchDocumentIsPlainText(t *testing.T) { past := time.Now().Add(-time.Hour) p := &Post{ ID: 7, Title: "Kurki", Excerpt: "Zajawka", Content: "## Kurki", ContentHTML: `
rosną w lesie & pachną
`, Published: true, PublishedAt: &past, } doc, err := p.ToSearchableArray(t.Context(), nil) if err != nil { t.Fatal(err) } content, _ := doc["content"].(string) if strings.ContainsAny(content, "<>") || strings.Contains(content, "href") || strings.Contains(content, "&") { t.Fatalf("content keeps markup: %q", content) } if content != "Kurki rosną w lesie & pachną" { t.Fatalf("content = %q", content) } p.ContentHTML = "" doc, _ = p.ToSearchableArray(t.Context(), nil) if doc["content"] != "## Kurki" { t.Fatalf("content without content_html = %q", doc["content"]) } } // TestSearchSchemaMatchesDocument: the schema declares exactly the keys // ToSearchableArray emits. func TestSearchSchemaMatchesDocument(t *testing.T) { doc, err := (&Post{ID: 1}).ToSearchableArray(t.Context(), nil) if err != nil { t.Fatal(err) } var docKeys, schemaKeys []string for k := range doc { docKeys = append(docKeys, k) } for _, f := range (Post{}).SearchIndexSchema()["fields"].([]map[string]any) { schemaKeys = append(schemaKeys, f["name"].(string)) } sort.Strings(docKeys) sort.Strings(schemaKeys) if strings.Join(docKeys, ",") != strings.Join(schemaKeys, ",") { t.Fatalf("document keys %v, schema fields %v", docKeys, schemaKeys) } }