84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
package agent
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"viewsagent/internal/capture"
|
|
"viewsagent/internal/config"
|
|
"viewsagent/internal/llm"
|
|
)
|
|
|
|
// readyCfg 造一份只差一个接入点的配置。
|
|
func readyCfg(p config.Profile) *config.Config {
|
|
cfg := &config.Config{Models: []config.Profile{p}}
|
|
cfg.Active = p.Name
|
|
cfg.Normalize()
|
|
return cfg
|
|
}
|
|
|
|
func TestEnsureReadyRejectsIncompleteModel(t *testing.T) {
|
|
e := New(&config.Config{Models: []config.Profile{{Name: "空"}}}, nil)
|
|
if err := e.EnsureReady(); err == nil {
|
|
t.Fatal("模型未配置时应拒绝监听")
|
|
}
|
|
}
|
|
|
|
func TestEnsureReadyRequiresAPIKey(t *testing.T) {
|
|
e := New(readyCfg(config.Profile{
|
|
Name: "远程", BaseURL: "https://api.example.com/v1", Model: "vl-model",
|
|
}), nil)
|
|
if err := e.EnsureReady(); err == nil {
|
|
t.Fatal("远程服务缺少 API Key 时应拒绝监听")
|
|
}
|
|
}
|
|
|
|
func TestEnsureReadyAllowsLocalWithoutKey(t *testing.T) {
|
|
e := New(readyCfg(config.Profile{
|
|
Name: "本地", BaseURL: "http://localhost:11434/v1", Model: "qwen2.5vl:7b",
|
|
}), nil)
|
|
if err := e.EnsureReady(); err != nil {
|
|
t.Fatalf("本地服务不应要求 API Key: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestEnsureReadyPassesWithKey(t *testing.T) {
|
|
e := New(readyCfg(config.Profile{
|
|
Name: "远程", BaseURL: "https://api.example.com/v1", Model: "vl-model", APIKey: "sk-test",
|
|
}), nil)
|
|
if err := e.EnsureReady(); err != nil {
|
|
t.Fatalf("配置完整时应通过检测: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestStartWatchRefusesWhenModelNotReady(t *testing.T) {
|
|
e := New(readyCfg(config.Profile{
|
|
Name: "远程", BaseURL: "https://api.example.com/v1", Model: "vl-model",
|
|
}), nil)
|
|
e.region = capture.Region{X: 0, Y: 0, W: 100, H: 100}
|
|
|
|
if err := e.StartWatch(); err == nil {
|
|
t.Fatal("模型未接好时不应开始监听")
|
|
}
|
|
if e.State().Watching {
|
|
t.Fatal("监听不应被启动")
|
|
}
|
|
}
|
|
|
|
func TestActiveProfileIsUsed(t *testing.T) {
|
|
cfg := &config.Config{Models: []config.Profile{
|
|
{Name: "甲", Format: llm.FormatOpenAI, BaseURL: "https://a.example/v1", Model: "a-vl", APIKey: "sk-a"},
|
|
{Name: "乙", Format: llm.FormatAnthropic, BaseURL: "https://b.example", Model: "b-vl", APIKey: "sk-b"},
|
|
}}
|
|
cfg.Active = "乙"
|
|
cfg.Normalize()
|
|
|
|
e := New(cfg, nil)
|
|
st := e.State()
|
|
if st.Profile != "乙" || st.Model != "b-vl" {
|
|
t.Fatalf("状态应反映生效接入点: %+v", st)
|
|
}
|
|
if st.Format != llm.FormatAnthropic {
|
|
t.Fatalf("状态应带出接口格式: %s", st.Format)
|
|
}
|
|
}
|