区分线下提号账号来源
This commit is contained in:
@@ -181,6 +181,103 @@ func TestRepositoryListShopNamesReturnsDistinctPlatformOptions(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRepositoryListAvailableListingsFiltersAccountSource(t *testing.T) {
|
||||
repo, db := newPickupTestRepo(t)
|
||||
internal := seedAvailableListing(t, db, "LST-SOURCE-INTERNAL", "站内账号", false)
|
||||
external := seedAvailableListing(t, db, "LST-SOURCE-EXTERNAL", "外部账号", true)
|
||||
if err := db.Create(&model.ListingUpload{
|
||||
UploaderName: "外部号主",
|
||||
SourceChannel: "淘宝",
|
||||
ListingID: &external.ID,
|
||||
Status: "listing_created",
|
||||
}).Error; err != nil {
|
||||
t.Fatalf("创建外部上传记录失败: %v", err)
|
||||
}
|
||||
|
||||
all, err := repo.ListAvailableListings(t.Context(), AvailableListingQuery{Page: 1, PageSize: 20})
|
||||
if err != nil {
|
||||
t.Fatalf("ListAvailableListings() error = %v", err)
|
||||
}
|
||||
if all.Total != 2 || len(all.Items) != 2 {
|
||||
t.Fatalf("全部来源结果 = total %d, items %d, want 2", all.Total, len(all.Items))
|
||||
}
|
||||
|
||||
externalResult, err := repo.ListAvailableListings(t.Context(), AvailableListingQuery{
|
||||
SourceType: ListingSourceExternal,
|
||||
Page: 1,
|
||||
PageSize: 20,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("筛选外部上传 error = %v", err)
|
||||
}
|
||||
if externalResult.Total != 1 || len(externalResult.Items) != 1 {
|
||||
t.Fatalf("外部上传结果 = total %d, items %d, want 1", externalResult.Total, len(externalResult.Items))
|
||||
}
|
||||
externalItem := externalResult.Items[0]
|
||||
if externalItem.ID != external.ID || !externalItem.IsExternalUpload {
|
||||
t.Fatalf("外部上传账号 = id %d, external %t, want id %d", externalItem.ID, externalItem.IsExternalUpload, external.ID)
|
||||
}
|
||||
if externalItem.AccountSource != AccountSourceExternalPlatformManaged || externalItem.SourceChannel != "淘宝" {
|
||||
t.Fatalf("外部上传来源 = %q/%q", externalItem.AccountSource, externalItem.SourceChannel)
|
||||
}
|
||||
if externalItem.HandoffMode != "platform" || externalItem.SettlementMode != "platform_managed" {
|
||||
t.Fatalf("外部上传代管模式 = %q/%q", externalItem.HandoffMode, externalItem.SettlementMode)
|
||||
}
|
||||
|
||||
internalResult, err := repo.ListAvailableListings(t.Context(), AvailableListingQuery{
|
||||
SourceType: ListingSourceInternal,
|
||||
Page: 1,
|
||||
PageSize: 20,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("筛选站内上传 error = %v", err)
|
||||
}
|
||||
if internalResult.Total != 1 || len(internalResult.Items) != 1 {
|
||||
t.Fatalf("站内上传结果 = total %d, items %d, want 1", internalResult.Total, len(internalResult.Items))
|
||||
}
|
||||
internalItem := internalResult.Items[0]
|
||||
if internalItem.ID != internal.ID || internalItem.IsExternalUpload || internalItem.AccountSource != AccountSourceInternal {
|
||||
t.Fatalf("站内上传账号 = id %d, external %t, source %q", internalItem.ID, internalItem.IsExternalUpload, internalItem.AccountSource)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRepositoryCreateSnapshotsExternalAccountSource(t *testing.T) {
|
||||
repo, db := newPickupTestRepo(t)
|
||||
listing := seedAvailableListing(t, db, "LST-SOURCE-CREATE", "待提号外部账号", true)
|
||||
upload := model.ListingUpload{
|
||||
UploaderName: "外部号主",
|
||||
SourceChannel: "闲鱼",
|
||||
ListingID: &listing.ID,
|
||||
Status: "listing_created",
|
||||
}
|
||||
if err := db.Create(&upload).Error; err != nil {
|
||||
t.Fatalf("创建外部上传记录失败: %v", err)
|
||||
}
|
||||
|
||||
item, err := repo.Create(t.Context(), CreateRequest{
|
||||
ListingID: listing.ID,
|
||||
Platform: "微信",
|
||||
ProfitAmountCent: 1200,
|
||||
}, 99, auditlog.Meta{RequestID: "req-source"})
|
||||
if err != nil {
|
||||
t.Fatalf("Create() error = %v", err)
|
||||
}
|
||||
if item.AccountSource != AccountSourceExternalPlatformManaged || item.SourceChannel != "闲鱼" {
|
||||
t.Fatalf("创建来源快照 = %q/%q", item.AccountSource, item.SourceChannel)
|
||||
}
|
||||
|
||||
if err := db.Delete(&upload).Error; err != nil {
|
||||
t.Fatalf("删除上传关联失败: %v", err)
|
||||
}
|
||||
stored, err := repo.FindByID(t.Context(), item.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("FindByID() error = %v", err)
|
||||
}
|
||||
if stored.AccountSource != AccountSourceExternalPlatformManaged || stored.SourceChannel != "闲鱼" {
|
||||
t.Fatalf("关联删除后的来源快照 = %q/%q", stored.AccountSource, stored.SourceChannel)
|
||||
}
|
||||
}
|
||||
|
||||
func assertInt64(t *testing.T, name string, got, want int64) {
|
||||
t.Helper()
|
||||
if got != want {
|
||||
@@ -208,14 +305,53 @@ func newPickupTestRepo(t *testing.T) (*Repository, *gorm.DB) {
|
||||
&model.User{},
|
||||
&model.GameAccount{},
|
||||
&model.RentalListing{},
|
||||
&model.ListingUpload{},
|
||||
&model.AdminPickup{},
|
||||
&model.AuditLog{},
|
||||
&model.Notification{},
|
||||
&model.ListingStatusEvent{},
|
||||
); err != nil {
|
||||
t.Fatalf("迁移测试表失败: %v", err)
|
||||
}
|
||||
return NewRepository(db), db
|
||||
}
|
||||
|
||||
func seedAvailableListing(t *testing.T, db *gorm.DB, listingNo, title string, external bool) model.RentalListing {
|
||||
t.Helper()
|
||||
owner := model.User{Phone: "188" + listingNo}
|
||||
if err := db.Create(&owner).Error; err != nil {
|
||||
t.Fatalf("创建候选号主失败: %v", err)
|
||||
}
|
||||
account := model.GameAccount{
|
||||
OwnerID: owner.ID,
|
||||
ServerRegion: "测试区",
|
||||
LoginPlatform: "微信",
|
||||
Title: title,
|
||||
Status: "published",
|
||||
}
|
||||
if err := db.Create(&account).Error; err != nil {
|
||||
t.Fatalf("创建候选账号失败: %v", err)
|
||||
}
|
||||
listing := model.RentalListing{
|
||||
ListingNo: listingNo,
|
||||
AccountID: account.ID,
|
||||
OwnerID: owner.ID,
|
||||
PriceCent: 10000,
|
||||
Status: "published",
|
||||
ReviewStatus: "approved",
|
||||
HandoffMode: "owner",
|
||||
SettlementMode: "owner_wallet",
|
||||
}
|
||||
if external {
|
||||
listing.HandoffMode = "platform"
|
||||
listing.SettlementMode = "platform_managed"
|
||||
}
|
||||
if err := db.Create(&listing).Error; err != nil {
|
||||
t.Fatalf("创建候选上架记录失败: %v", err)
|
||||
}
|
||||
return listing
|
||||
}
|
||||
|
||||
func seedPickup(t *testing.T, db *gorm.DB, status string) model.AdminPickup {
|
||||
t.Helper()
|
||||
owner := model.User{Phone: "18800000000"}
|
||||
|
||||
Reference in New Issue
Block a user