84 lines
2.2 KiB
Go
84 lines
2.2 KiB
Go
// ©AngelaMos | 2026
|
|
// factory_test.go
|
|
|
|
package ai
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/CarterPerez-dev/nadezhda/internal/config"
|
|
"github.com/CarterPerez-dev/nadezhda/internal/store"
|
|
)
|
|
|
|
func TestFactoryProviders(t *testing.T) {
|
|
base := config.Default().AI
|
|
|
|
t.Setenv(envOpenAIKey, "")
|
|
t.Setenv(envGeminiKey, "")
|
|
t.Setenv(envAnthropicKey, "")
|
|
|
|
base.Provider = ProviderQwen
|
|
p, err := Factory(base)
|
|
if err != nil || p.Name() != ProviderQwen {
|
|
t.Fatalf("qwen: p=%v err=%v", p, err)
|
|
}
|
|
|
|
base.Provider = ProviderOpenAI
|
|
if _, err := Factory(base); err == nil {
|
|
t.Error("openai without key should error")
|
|
}
|
|
t.Setenv(envOpenAIKey, "k")
|
|
if p, err := Factory(base); err != nil || p.Name() != ProviderOpenAI {
|
|
t.Errorf("openai: p=%v err=%v", p, err)
|
|
}
|
|
|
|
base.Provider = ProviderGemini
|
|
if _, err := Factory(base); err == nil {
|
|
t.Error("gemini without key should error")
|
|
}
|
|
t.Setenv(envGeminiKey, "k")
|
|
if p, err := Factory(base); err != nil || p.Name() != ProviderGemini {
|
|
t.Errorf("gemini: p=%v err=%v", p, err)
|
|
}
|
|
|
|
base.Provider = ProviderAnthropic
|
|
if _, err := Factory(base); err == nil {
|
|
t.Error("anthropic without key should error")
|
|
}
|
|
t.Setenv(envAnthropicKey, "k")
|
|
if p, err := Factory(base); err != nil || p.Name() != ProviderAnthropic {
|
|
t.Errorf("anthropic: p=%v err=%v", p, err)
|
|
}
|
|
|
|
base.Provider = "nope"
|
|
if _, err := Factory(base); err == nil {
|
|
t.Error("unknown provider should error")
|
|
}
|
|
}
|
|
|
|
func TestRequestFromCluster(t *testing.T) {
|
|
cvss := 9.8
|
|
epss := 0.5
|
|
c := store.DigestCluster{
|
|
Size: 3,
|
|
FirstSeen: 0,
|
|
LastSeen: 6 * secondsPerHour,
|
|
Articles: []store.DigestArticle{
|
|
{Title: "A", SourceName: "krebs"},
|
|
{Title: "A", SourceName: "krebs"},
|
|
{Title: "B", SourceName: "register"},
|
|
},
|
|
CVEs: []store.DigestCVE{{ID: "CVE-2025-1", CVSSScore: &cvss, EPSS: &epss, IsKEV: true}},
|
|
}
|
|
req := RequestFromCluster(c)
|
|
if len(req.Titles) != 2 || len(req.Sources) != 2 {
|
|
t.Errorf("dedup failed: titles=%v sources=%v", req.Titles, req.Sources)
|
|
}
|
|
if req.SpanHours != 6 || req.ClusterSize != 3 {
|
|
t.Errorf("span=%d size=%d", req.SpanHours, req.ClusterSize)
|
|
}
|
|
if len(req.CVEs) != 1 || !req.CVEs[0].KEV || req.CVEs[0].CVSS == nil {
|
|
t.Errorf("cve mapping: %+v", req.CVEs)
|
|
}
|
|
}
|