2026-04-30 13:29:22 +08:00

120 lines
3.6 KiB
Go

package rechargeagency
import (
"context"
"testing"
"time"
"chatapp3-golang/internal/config"
"chatapp3-golang/internal/integration"
"chatapp3-golang/internal/model"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type fakeJavaGateway struct {
gotAuthorization string
gotSysOrigin string
gotCursor int
gotLimit int
page integration.FreightSellerPage
}
func (f *fakeJavaGateway) PageFreightSellers(_ context.Context, authorization string, sysOrigin string, cursor int, limit int) (integration.FreightSellerPage, error) {
f.gotAuthorization = authorization
f.gotSysOrigin = sysOrigin
f.gotCursor = cursor
f.gotLimit = limit
return f.page, nil
}
func TestPageSellersUsesAuthenticatedUserAndMapsRecords(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file:"+t.Name()+"?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("open sqlite: %v", err)
}
if err := db.AutoMigrate(&model.RechargeAgencySellerInfo{}); err != nil {
t.Fatalf("auto migrate: %v", err)
}
if err := db.Create(&model.RechargeAgencySellerInfo{
SysOrigin: "LIKEI",
UserID: 99,
Whatsapp: "+8613800138000",
CreateTime: time.Now(),
UpdateTime: time.Now(),
}).Error; err != nil {
t.Fatalf("seed whatsapp: %v", err)
}
java := &fakeJavaGateway{
page: integration.FreightSellerPage{
Total: 1,
Current: 1,
Size: 20,
Records: []integration.FreightSellerRecord{
{
ID: integration.Int64Value(11),
SysOrigin: "LIKEI",
UserID: integration.Int64Value(99),
Balance: integration.DecimalString("123.45"),
SuperDealer: true,
NationalFlag: []string{"", "https://flag.example/ae.png"},
OwnNationalFlag: "https://flag.example/own.png",
BecomeDays: 7,
TransactionCount: 12,
UserBaseInfo: integration.FreightSellerProfile{
Account: "u99",
UserNickname: "Nina",
UserAvatar: "https://avatar.example/u99.png",
CountryCode: "AE",
CountryName: "United Arab Emirates",
RegionCode: "MENA",
},
},
},
},
}
service := NewService(config.Config{}, db, java)
resp, err := service.PageSellers(context.Background(), AuthUser{
SysOrigin: "likei",
Authorization: "Bearer token",
}, 0, 200)
if err != nil {
t.Fatalf("PageSellers() error = %v", err)
}
if java.gotAuthorization != "Bearer token" || java.gotSysOrigin != "LIKEI" {
t.Fatalf("gateway auth/sysOrigin = %q/%q", java.gotAuthorization, java.gotSysOrigin)
}
if java.gotCursor != 1 || java.gotLimit != 100 {
t.Fatalf("gateway cursor/limit = %d/%d", java.gotCursor, java.gotLimit)
}
if resp.Total != 1 || len(resp.Records) != 1 {
t.Fatalf("response total/records = %d/%d", resp.Total, len(resp.Records))
}
record := resp.Records[0]
if record.ID != 11 || record.UserID != 99 || record.Account != "u99" || record.UserNickname != "Nina" {
t.Fatalf("mapped record identity mismatch: %+v", record)
}
if record.Balance != "123.45" || !record.SuperDealer || record.TransactionCount != 12 {
t.Fatalf("mapped record stats mismatch: %+v", record)
}
if record.Whatsapp != "+8613800138000" {
t.Fatalf("mapped whatsapp = %q", record.Whatsapp)
}
if len(record.NationalFlag) != 1 || record.NationalFlag[0] != "https://flag.example/ae.png" {
t.Fatalf("mapped flags mismatch: %+v", record.NationalFlag)
}
}
func TestPageSellersRequiresAuthorization(t *testing.T) {
service := NewService(config.Config{}, nil, &fakeJavaGateway{})
_, err := service.PageSellers(context.Background(), AuthUser{SysOrigin: "LIKEI"}, 1, 20)
if err == nil {
t.Fatal("PageSellers() error is nil")
}
}