55 lines
1.9 KiB
Go
55 lines
1.9 KiB
Go
package service
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"infinite-canvas/backend/internal/model"
|
|
"infinite-canvas/backend/internal/repository"
|
|
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func TestTaskBillingOrderMatchesSystemImagePriceTierFromRequestedSpec(t *testing.T) {
|
|
db, err := gorm.Open(sqlite.Open("file:"+newID()+"?mode=memory&cache=shared"), &gorm.Config{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := db.AutoMigrate(&model.SystemSetting{}, &model.ChannelModel{}, &model.ChannelModelPriceTier{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
channelModel := model.ChannelModel{
|
|
ID: "channel-model-1", ChannelID: "channel-1", ModelKey: "gpt-image-2", ProviderModelKey: "gpt-image-2",
|
|
Capability: "image", Protocol: model.ChannelInterfaceOpenAIImage, BillingMode: "fixed_request",
|
|
PriceConfigured: true, Enabled: true, PriceVersion: 1,
|
|
}
|
|
if err := db.Create(&channelModel).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
tier := model.ChannelModelPriceTier{
|
|
ID: "tier-2k", ChannelModelID: channelModel.ID, SelectorKey: `{"quality":"2k"}`, SelectorJSON: `{"quality":"2k"}`,
|
|
Resolution: "*", ProviderModelKey: channelModel.ProviderModelKey, BillingMode: "fixed_request",
|
|
UnitPriceMicrocredits: 4_000_000, PriceConfigured: true, Enabled: true, PriceVersion: 1,
|
|
}
|
|
if err := db.Create(&tier).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
svc := New(repository.New(db), t.TempDir())
|
|
order, err := svc.taskBillingOrder("user-1", &model.Task{ID: "task-1", Type: "canvas_image", Operation: "image"}, map[string]any{
|
|
"mode": "image",
|
|
"config": map[string]any{
|
|
"channelId": "channel-1",
|
|
"model": "gpt-image-2",
|
|
"quality": "2K",
|
|
"size": "*",
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("taskBillingOrder() error = %v", err)
|
|
}
|
|
if order == nil || order.PriceTierID != tier.ID || order.AmountMicrocredits != tier.UnitPriceMicrocredits {
|
|
t.Fatalf("taskBillingOrder() = %#v, want tier %s", order, tier.ID)
|
|
}
|
|
}
|