120 lines
3.6 KiB
Go
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")
|
|
}
|
|
}
|