package processing
import (
"fmt"
"strings"
"testing"
"github.com/descrybe/descrybe-v2/apps/api/internal/aiprompts"
)
func TestBuildA1StyleEnhanceUserTemplate_mirrorsLegacyGenerator(t *testing.T) {
t.Parallel()
prompt := aiprompts.SectionTitleStart + "\n" +
`Napiši novo ime izdelka po formuli: "tip izdelka sentence case", "znamka", "model". Ne uporabljaj vejic.` + "\n" +
aiprompts.SectionTitleEnd + "\n\n" +
aiprompts.SectionDescriptionStart + "\n" +
`
{Napiši Novo ime izdelka in izpostavi en benefit}
` +
`{Napiši odstavek, ki je dolg 100 besed.}
` +
`{Tehnične specifikacije}- {Napiši 3-10 tehničnih specifikacij}
` + "\n" +
aiprompts.SectionDescriptionEnd + "\n\n" +
aiprompts.SectionMetaStart + "\n" +
`Najprej napiši Novo ime in potem nadaljuj do 140 znakov.` + "\n" +
aiprompts.SectionMetaEnd
descTpl := aiprompts.EffectiveDescriptionTemplateAny(nil, prompt)
if !categoryUsesA1StyleFormula(prompt, nil, descTpl) {
t.Fatal("expected A1-style formula detection")
}
user, slovenian := buildA1StyleEnhanceUserTemplate(prompt, nil, descTpl, false)
if !slovenian {
t.Fatal("Slovenian A1 formula must keep the Slovenian scaffolding")
}
for _, want := range []string{
"GPT predloga:",
"Sledi tej GPT predlogi",
"Staro_ime_izdelka: {{name}}",
"Star_opis_izdelka: {{description}}",
"{",
"{",
"{",
`"name"`,
`"description"`,
} {
if !strings.Contains(user, want) {
t.Fatalf("missing %q in:\n%s", want, user)
}
}
sys, renderedUser := resolveProductPromptTemplates(ProductInput{
CategoryEnhancePrompt: prompt,
Language: "sl",
})
if !strings.Contains(sys, "Si tekstopisec") {
t.Fatalf("system must be A1 copywriter, got:\n%s", sys)
}
if !strings.Contains(renderedUser, "GPT predloga:") {
t.Fatalf("user must be A1 GPT predloga, got:\n%s", renderedUser)
}
// Soft overlay framing must not win over GPT predloga.
if strings.Contains(renderedUser, "Category guidance (applies to name") {
t.Fatal("A1 path must not use soft category guidance overlay")
}
}
func TestParseLegacyEnhanceHTML(t *testing.T) {
t.Parallel()
raw := `ovitek PanzerGlass Honor 200 Smart črna` +
`Ovitek PanzerGlass za Honor 200 Smart z elegantnim videzom.` +
`Zaščita z elegantnim videzom
Dolg odstavek o ovitku.
` +
``
name, meta, body, ok := ParseLegacyEnhanceHTML(raw)
if !ok {
t.Fatal("expected parse ok")
}
if name != "ovitek PanzerGlass Honor 200 Smart črna" {
t.Fatalf("name=%q", name)
}
if !strings.Contains(meta, "PanzerGlass") {
t.Fatalf("meta=%q", meta)
}
if strings.Contains(body, "") || strings.Contains(body, "metaDescription") {
t.Fatalf("body still has tags: %q", body)
}
if !strings.Contains(body, "") || !strings.Contains(body, "") {
t.Fatalf("body missing HTML: %q", body)
}
obj := map[string]any{
"name": "",
"description": raw,
}
applyLegacyEnhanceTagFallback(obj, "")
if obj["name"] != name {
t.Fatalf("fallback name=%v", obj["name"])
}
if strings.Contains(fmt.Sprint(obj["description"]), "") {
t.Fatalf("fallback desc still has name tag: %v", obj["description"])
}
}