easyai-ai-gateway/apps/api/internal/runner/service_test.go
wangbo 8ad5b06c18 feat(api): 添加多媒体内容支持并优化钱包计费系统
- 在 API 接口定义中为 video_url 和 audio_url 类型添加 mime_type 字段
- 实现 Google Gemini 客户端对视频和音频内容的支持,包括媒体类型检测和数据传输
- 添加 Gemini 客户端测试用例验证多媒体内容转换功能
- 重构 Playground 页面的媒体上传逻辑以支持 MIME 类型传递
- 实现钱包计费预留机制,确保任务执行前余额充足
- 添加钱包冻结余额管理,防止并发操作导致的超扣问题
- 实现计费预留释放逻辑,处理任务失败或取消情况下的资金返还
- 优化数据库事务处理,确保计费操作的原子性和一致性
- 添加数据库集成测试验证迁移脚本执行流程
- 统一 Google Gemini 相关模型提供商标识符映射
2026-05-22 23:46:08 +08:00

35 lines
988 B
Go

package runner
import (
"context"
"testing"
"github.com/easyai/easyai-ai-gateway/apps/api/internal/clients"
"github.com/easyai/easyai-ai-gateway/apps/api/internal/store"
)
type namedClient string
func (namedClient) Run(context.Context, clients.Request) (clients.Response, error) {
return clients.Response{}, nil
}
func TestClientForMapsGoogleGeminiSpecToGeminiClient(t *testing.T) {
service := &Service{clients: map[string]clients.Client{
"gemini": namedClient("gemini"),
"openai": namedClient("openai"),
}}
candidates := []store.RuntimeModelCandidate{
{SpecType: "google-gemini"},
{SpecType: "openai", Provider: "gemini-openai"},
{SpecType: "openai", BaseURL: "https://generativelanguage.googleapis.com/v1beta/openai"},
}
for _, candidate := range candidates {
client := service.clientFor(candidate, false)
if client != namedClient("gemini") {
t.Fatalf("Gemini candidate should use gemini client, candidate=%+v got %T %[2]v", candidate, client)
}
}
}