yao/llmprovider/process_test.go
Max 6f78f6066b feat(llm): refactor audio capabilities and enhance role management
- Replaced 'Voice' with 'Audio' in the system configuration and related tests to better reflect functionality.
- Introduced new methods for role management in the llmprovider, allowing for dynamic retrieval of roles based on user and team context.
- Updated the OpenAPI settings to support new role management endpoints and capabilities.
- Enhanced the handling of API keys in provider management, allowing for optional plain-text retrieval.
2026-04-30 12:33:05 +08:00

173 lines
4.6 KiB
Go

package llmprovider_test
import (
"encoding/json"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/yaoapp/gou/process"
)
func TestProcessCreate(t *testing.T) {
setupRegistry(t)
p := process.New("llmprovider.create", map[string]interface{}{
"key": "proc-test",
"name": "Proc Test",
"type": "openai",
"api_url": "https://api.openai.com",
"api_key": "sk-proc-test",
"enabled": true,
"require_key": true,
"models": []interface{}{map[string]interface{}{"id": "gpt-4o", "name": "GPT-4o", "capabilities": []interface{}{"streaming"}, "enabled": true}},
"owner": map[string]interface{}{"type": "system"},
})
result, err := p.Exec()
require.NoError(t, err)
require.NotNil(t, result)
m := toMapResult(t, result)
assert.Equal(t, "proc-test", m["key"])
assert.NotEmpty(t, m["connector_id"])
assert.Equal(t, "dynamic", m["source"])
}
func TestProcessGet(t *testing.T) {
setupRegistry(t)
createViaProcess(t, "proc-get")
// Default: masked
p := process.New("llmprovider.get", "proc-get")
result, err := p.Exec()
require.NoError(t, err)
m := toMapResult(t, result)
assert.Equal(t, "proc-get", m["key"])
assert.NotEqual(t, "sk-proc-test", m["api_key"], "default should be masked")
// withKey=true: plain text
p2 := process.New("llmprovider.get", "proc-get", true)
result2, err := p2.Exec()
require.NoError(t, err)
m2 := toMapResult(t, result2)
assert.Equal(t, "sk-proc-test", m2["api_key"], "withKey=true should return plain text")
}
func TestProcessGetMasked(t *testing.T) {
setupRegistry(t)
createViaProcess(t, "proc-masked")
p := process.New("llmprovider.getmasked", "proc-masked")
result, err := p.Exec()
require.NoError(t, err)
m := toMapResult(t, result)
apiKey, _ := m["api_key"].(string)
assert.NotEqual(t, "sk-proc-test", apiKey)
assert.Contains(t, apiKey, "test")
}
func TestProcessUpdate(t *testing.T) {
setupRegistry(t)
createViaProcess(t, "proc-upd")
p := process.New("llmprovider.update", "proc-upd", map[string]interface{}{
"name": "Updated Name",
"api_url": "https://custom.openai.com",
"enabled": true,
"models": []interface{}{map[string]interface{}{"id": "gpt-4o", "name": "GPT-4o", "capabilities": []interface{}{"streaming"}, "enabled": true}},
})
result, err := p.Exec()
require.NoError(t, err)
m := toMapResult(t, result)
assert.Equal(t, "Updated Name", m["name"])
assert.Equal(t, "https://custom.openai.com", m["api_url"])
}
func TestProcessDelete(t *testing.T) {
setupRegistry(t)
createViaProcess(t, "proc-del")
p := process.New("llmprovider.delete", "proc-del")
_, err := p.Exec()
require.NoError(t, err)
pGet := process.New("llmprovider.get", "proc-del")
_, err = pGet.Exec()
assert.Error(t, err)
}
func TestProcessList(t *testing.T) {
setupRegistry(t)
createViaProcess(t, "proc-list-1")
createViaProcess(t, "proc-list-2")
p := process.New("llmprovider.list", map[string]interface{}{
"source": "dynamic",
})
result, err := p.Exec()
require.NoError(t, err)
require.NotNil(t, result)
t.Logf("list result type: %T", result)
}
func TestProcessGetSetting(t *testing.T) {
setupRegistry(t)
createViaProcess(t, "proc-setting")
p := process.New("llmprovider.getsetting", "proc-setting")
result, err := p.Exec()
require.NoError(t, err)
require.NotNil(t, result)
}
func TestProcessGetPresets(t *testing.T) {
p := process.New("llmprovider.getpresets")
result, err := p.Exec()
require.NoError(t, err)
require.NotNil(t, result)
}
func TestProcessGetPreset(t *testing.T) {
p := process.New("llmprovider.getpreset", "openai")
result, err := p.Exec()
require.NoError(t, err)
require.NotNil(t, result)
m := toMapResult(t, result)
assert.Equal(t, "openai", m["key"])
}
// --- helpers ---
func createViaProcess(t *testing.T, key string) {
t.Helper()
p := process.New("llmprovider.create", map[string]interface{}{
"key": key,
"name": "Test " + key,
"type": "openai",
"api_url": "https://api.openai.com",
"api_key": "sk-proc-test",
"enabled": true,
"require_key": true,
"models": []interface{}{map[string]interface{}{"id": "gpt-4o", "name": "GPT-4o", "capabilities": []interface{}{"streaming"}, "enabled": true}},
"owner": map[string]interface{}{"type": "system"},
})
_, err := p.Exec()
require.NoError(t, err)
}
func toMapResult(t *testing.T, v interface{}) map[string]interface{} {
t.Helper()
if m, ok := v.(map[string]interface{}); ok {
return m
}
raw, err := json.Marshal(v)
require.NoError(t, err)
var m map[string]interface{}
require.NoError(t, json.Unmarshal(raw, &m))
return m
}