Files
ai-operator/internal/agent/agent_test.go
T

54 lines
2.4 KiB
Go

package agent
import (
"strings"
"testing"
"ai-operator/internal/dialogue/state"
"ai-operator/internal/kb"
)
func TestBuildSystemPromptGuardrails(t *testing.T) {
p := BuildSystemPrompt(PromptContext{State: state.StateLanguageSelection})
if !strings.Contains(p, "Жанна") || !strings.Contains(p, "QazAimaqGas") || !strings.Contains(p, "Do not block on explicit language selection") {
t.Fatalf("language prompt missing guardrails: %s", p)
}
p = BuildSystemPrompt(PromptContext{State: state.StateReadyToHelp, Language: state.LanguageRU, RegionCode: "almaty_city"})
if !strings.Contains(p, "search_knowledge_base") || !strings.Contains(p, "do not invent") || !strings.Contains(p, "global KB") {
t.Fatalf("ready prompt missing KB guardrails: %s", p)
}
if strings.Contains(strings.ToLower(p), "authorization") || strings.Contains(p, "OPENAI_API_KEY") {
t.Fatalf("prompt leaked secret wording: %s", p)
}
}
func TestKnowledgeAnswerUsesKBOnly(t *testing.T) {
resp := kb.SearchResponse{OK: true, ReasonCode: "ok", MessageKey: "knowledge.results_found", Results: []kb.SearchResult{{
Title: "Test title",
Content: "Краткий ответ: подключение выполняется по заявке.",
Language: "ru",
SourceURI: "source.docx",
Citation: kb.Citation{DocumentTitle: "Test title", SourceURI: "source.docx"},
}}}
ru := BuildKnowledgeAnswer(state.LanguageRU, resp)
if !strings.Contains(ru, "По информации, которую я вижу") || !strings.Contains(ru, "подключение выполняется") {
t.Fatalf("bad ru answer: %s", ru)
}
kkResp := resp
kkResp.CrossLanguageFallbackUsed = true
kk := BuildKnowledgeAnswer(state.LanguageKK, kkResp)
if !strings.Contains(kk, "Мен көріп тұрған ақпарат бойынша") || !strings.Contains(kk, "подключение выполняется") {
t.Fatalf("bad kk fallback answer: %s", kk)
}
}
func TestKnowledgeNoAnswer(t *testing.T) {
resp := kb.SearchResponse{OK: false, ReasonCode: "no_relevant_knowledge", MessageKey: "knowledge.no_answer"}
if got := BuildKnowledgeAnswer(state.LanguageRU, resp); !strings.Contains(got, "нет точной информации") {
t.Fatalf("bad no answer ru: %s", got)
}
if got := BuildKnowledgeAnswer(state.LanguageKK, resp); !strings.Contains(got, "нақты ақпарат жоқ") {
t.Fatalf("bad no answer kk: %s", got)
}
}