50 lines
1.7 KiB
Go
50 lines
1.7 KiB
Go
package database
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"yingce/backend/internal/model"
|
|
)
|
|
|
|
func TestChannelCreditCostMigrationPreservesSalesAndUnknownHistoricalCosts(t *testing.T) {
|
|
db, err := Open(Config{Driver: "sqlite", DSN: ":memory:"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, sql := range []string{
|
|
`CREATE TABLE channel_model_price_tiers (id TEXT PRIMARY KEY, unit_price_microcredits INTEGER, deleted_at DATETIME)`,
|
|
`CREATE TABLE billing_orders (id TEXT PRIMARY KEY, actual_amount_microcredits INTEGER)`,
|
|
`INSERT INTO channel_model_price_tiers VALUES ('tier',900000,NULL)`,
|
|
`INSERT INTO billing_orders VALUES ('order',13500000)`,
|
|
} {
|
|
if err := db.Exec(sql).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
for i := 0; i < 2; i++ {
|
|
if err := migrateChannelCreditCost(db); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
var tier model.ChannelModelPriceTier
|
|
var order model.BillingOrder
|
|
if err := db.First(&tier, "id = ?", "tier").Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := db.First(&order, "id = ?", "order").Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if tier.UnitPriceMicrocredits != 900000 || order.ActualAmountMicrocredits != 13500000 || tier.CostPricing.Configured || order.CostPricing.Configured || order.CostBillingMode != "" {
|
|
t.Fatalf("migration changed history: %#v %#v", tier, order)
|
|
}
|
|
if err := db.Table("channel_model_price_tiers").Where("id = ?", "tier").Updates(map[string]any{"cost_configured": true, "cost_unit_price_microcredits": 123456}).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := db.First(&tier, "id = ?", "tier").Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !tier.CostPricing.Configured || tier.CostPricing.UnitPriceMicrocredits != 123456 {
|
|
t.Fatalf("cost columns not mapped: %#v", tier)
|
|
}
|
|
}
|