Files
sm-golem-plugin/classes/factories/prompt_factory_test.go
Jakub Zych c93e2d9142 feat: AI models admin, settings import, Anthropic adapter and the rest of AIService
- golem15_golem_models (encrypted write-only api_key) with its cabana list
  and form under golem15.golem.access_settings, and the Settings lookups
  (Models, DefaultModel with PHP's position-0 quirk, Vision, Image, File,
  ByName), every one Trusted
- golem:import-settings copies the WinterCMS golem_settings repeater once
- AnthropicAdapter; SendStream, SendFile/SendFilePath/SendFileReader,
  SendWithModel, SendToImageModel, SendToVisionModel, GenerateImage, Ask
- PromptFactory; README documents the config keys, the environment
  variable, the command and the admin screen
2026-10-03 23:09:02 +02:00

49 lines
2.2 KiB
Go

package factories
import (
"strings"
"testing"
)
func TestPromptFactory(t *testing.T) {
f := PromptFactory{}
for in, want := range map[string]string{
"field_firstName": "First Name",
"input_meta-title": "Meta Title",
"txt_SEO_title": "Seo Title",
"catalog_number": "Catalog Number",
} {
if got := HumanizeFieldName(in); got != want {
t.Errorf("HumanizeFieldName(%q) = %q, want %q", in, got, want)
}
}
cur := "old-slug"
p := f.CreateSuggestionForField("post_slug", "slug", &cur, []Pair{{"title", "Hello World"}, {"empty", ""}, {"zero", "0"}}, nil)
if !strings.Contains(p.SystemPrompt(), "Generate a URL-friendly slug") {
t.Fatalf("system = %q", p.SystemPrompt())
}
want := "Generate a value for the 'Post Slug' field.\n\nContext from related fields:\n- Title: Hello World\n\nCurrent value (improve or keep if already good): old-slug\n\nFormat: lowercase letters, numbers, and hyphens only. No spaces or special characters."
if got := p.Messages()[0].Text; got != want {
t.Fatalf("user message = %q", got)
}
p = f.CreateSuggestionForField("format", "dropdown", nil, nil, []Pair{{"LP", "Vinyl LP"}, {"CD", "Compact disc"}})
if got := p.Messages()[0].Text; !strings.HasSuffix(got, "Available options:\n- LP: Vinyl LP\n- CD: Compact disc\n\nRespond with ONLY the option key.") {
t.Fatalf("dropdown = %q", got)
}
notes := "Keep it short."
p = f.SuggestFieldsValues([]FormField{{Name: "title"}, {Name: "body", Type: "markdown"}}, []Pair{{"topic", "Jazz"}}, &notes)
if got := p.Messages()[0].Text; got != "Fields to generate values for:\n- title (type: text)\n- body (type: markdown)\n\nContext to base the suggestions on:\n- Topic: Jazz\n\nAdditional notes:\nKeep it short.\n" {
t.Fatalf("fields = %q", got)
}
p = f.SuggestCategoriesForItem([]Category{{ID: "1", Name: "Jazz"}, {}}, nil, nil)
if got := p.Messages()[0].Text; got != "Existing categories:\n- 1: Jazz\n- unknown: unnamed\n" {
t.Fatalf("categories = %q", got)
}
if p := f.CreateChat(""); p.SystemPrompt() != "" || len(p.Messages()) != 0 {
t.Fatal("empty chat")
}
if p := f.CreateCompletion("hi", "sys"); p.SystemPrompt() != "sys" || p.Messages()[0].Text != "hi" {
t.Fatal("completion")
}
}