63 lines
2.5 KiB
Go

package financeorder
import (
"testing"
"hyapp-admin-server/internal/model"
"hyapp-admin-server/internal/repository"
"github.com/DATA-DOG/go-sqlmock"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func TestFinanceUSDTAddressesFromConfigsKeepsSupportedValidChainsInBusinessOrder(t *testing.T) {
items, err := financeUSDTAddressesFromConfigs([]model.AppConfig{
{Key: "BSC", Value: "0x55d398326f99059fF775485246999027B3197955", UpdatedAtMS: 200},
{Key: "future-chain", Value: "not-exposed", UpdatedAtMS: 300},
{Key: "TRON", Value: "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", UpdatedAtMS: 100},
})
if err != nil {
t.Fatalf("normalize USDT address configs failed: %v", err)
}
if len(items) != 2 || items[0].Chain != "TRON" || items[1].Chain != "BSC" {
t.Fatalf("USDT addresses must expose only supported chains in business order: %+v", items)
}
}
func TestFinanceUSDTAddressesFromConfigsRejectsMalformedStoredAddress(t *testing.T) {
_, err := financeUSDTAddressesFromConfigs([]model.AppConfig{{Key: "TRON", Value: "wrong-app-address"}})
if err == nil {
t.Fatal("malformed SQL address must fail closed instead of being copied into a recharge order")
}
}
func TestFinanceUSDTReceiveAddressMapsOffchainToCurrentTRONSQLRow(t *testing.T) {
sqlDB, mock, err := sqlmock.New()
if err != nil {
t.Fatalf("create sql mock failed: %v", err)
}
defer func() { _ = sqlDB.Close() }()
gormDB, err := gorm.Open(mysql.New(mysql.Config{Conn: sqlDB, SkipInitializeWithVersion: true}), &gorm.Config{})
if err != nil {
t.Fatalf("create gorm db failed: %v", err)
}
const address = "TLv7wERsM42ZeobMrrKVC5C72d3gFUa44J"
mock.ExpectQuery("SELECT \\* FROM `admin_app_configs` WHERE app_code = \\? AND `group` = \\? AND `key` = \\? AND is_deleted = FALSE").
WithArgs("aslan", financeUSDTAddressGroup, "TRON", 1).
WillReturnRows(sqlmock.NewRows([]string{"id", "app_code", "group", "key", "value", "description", "is_deleted", "created_at_ms", "updated_at_ms"}).
AddRow(9, "aslan", financeUSDTAddressGroup, "TRON", address, "财务 USDT 收款地址", false, int64(100), int64(200)))
service := NewService(repository.New(gormDB), nil, nil)
got, err := service.financeUSDTReceiveAddress(" ASLAN ", "OFFCHAIN")
if err != nil {
t.Fatalf("load current Off-chain TRON address failed: %v", err)
}
if got != address {
t.Fatalf("Off-chain must use current app-scoped TRON SQL address, got %q", got)
}
if err := mock.ExpectationsWereMet(); err != nil {
t.Fatalf("sql expectations mismatch: %v", err)
}
}