- 新增 Group 图片价格配置(image_price_1k/2k/4k) - BillingService 新增 CalculateImageCost 方法 - AntigravityGatewayService 支持识别图片生成模型并按次计费 - UsageLog 新增 image_count 和 image_size 字段 - 前端分组管理支持配置图片价格(antigravity 和 gemini 平台) - 图片计费复用通用计费能力(余额检查、扣费、倍率、订阅限额)
93 lines
2.2 KiB
Go
93 lines
2.2 KiB
Go
//go:build unit
|
|
|
|
package service
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// TestGroup_GetImagePrice_1K 测试 1K 尺寸返回正确价格
|
|
func TestGroup_GetImagePrice_1K(t *testing.T) {
|
|
price := 0.10
|
|
group := &Group{
|
|
ImagePrice1K: &price,
|
|
}
|
|
|
|
result := group.GetImagePrice("1K")
|
|
require.NotNil(t, result)
|
|
require.InDelta(t, 0.10, *result, 0.0001)
|
|
}
|
|
|
|
// TestGroup_GetImagePrice_2K 测试 2K 尺寸返回正确价格
|
|
func TestGroup_GetImagePrice_2K(t *testing.T) {
|
|
price := 0.15
|
|
group := &Group{
|
|
ImagePrice2K: &price,
|
|
}
|
|
|
|
result := group.GetImagePrice("2K")
|
|
require.NotNil(t, result)
|
|
require.InDelta(t, 0.15, *result, 0.0001)
|
|
}
|
|
|
|
// TestGroup_GetImagePrice_4K 测试 4K 尺寸返回正确价格
|
|
func TestGroup_GetImagePrice_4K(t *testing.T) {
|
|
price := 0.30
|
|
group := &Group{
|
|
ImagePrice4K: &price,
|
|
}
|
|
|
|
result := group.GetImagePrice("4K")
|
|
require.NotNil(t, result)
|
|
require.InDelta(t, 0.30, *result, 0.0001)
|
|
}
|
|
|
|
// TestGroup_GetImagePrice_UnknownSize 测试未知尺寸回退 2K
|
|
func TestGroup_GetImagePrice_UnknownSize(t *testing.T) {
|
|
price2K := 0.15
|
|
group := &Group{
|
|
ImagePrice2K: &price2K,
|
|
}
|
|
|
|
// 未知尺寸 "3K" 应该回退到 2K
|
|
result := group.GetImagePrice("3K")
|
|
require.NotNil(t, result)
|
|
require.InDelta(t, 0.15, *result, 0.0001)
|
|
|
|
// 空字符串也回退到 2K
|
|
result = group.GetImagePrice("")
|
|
require.NotNil(t, result)
|
|
require.InDelta(t, 0.15, *result, 0.0001)
|
|
}
|
|
|
|
// TestGroup_GetImagePrice_NilValues 测试未配置时返回 nil
|
|
func TestGroup_GetImagePrice_NilValues(t *testing.T) {
|
|
group := &Group{
|
|
// 所有 ImagePrice 字段都是 nil
|
|
}
|
|
|
|
require.Nil(t, group.GetImagePrice("1K"))
|
|
require.Nil(t, group.GetImagePrice("2K"))
|
|
require.Nil(t, group.GetImagePrice("4K"))
|
|
require.Nil(t, group.GetImagePrice("unknown"))
|
|
}
|
|
|
|
// TestGroup_GetImagePrice_PartialConfig 测试部分配置
|
|
func TestGroup_GetImagePrice_PartialConfig(t *testing.T) {
|
|
price1K := 0.10
|
|
group := &Group{
|
|
ImagePrice1K: &price1K,
|
|
// ImagePrice2K 和 ImagePrice4K 未配置
|
|
}
|
|
|
|
result := group.GetImagePrice("1K")
|
|
require.NotNil(t, result)
|
|
require.InDelta(t, 0.10, *result, 0.0001)
|
|
|
|
// 2K 和 4K 返回 nil
|
|
require.Nil(t, group.GetImagePrice("2K"))
|
|
require.Nil(t, group.GetImagePrice("4K"))
|
|
}
|