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") } }