From c06e5aaafd189e494fa112730ce50fa9a28ac6ad Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sun, 16 Aug 2026 19:53:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E4=BB=A3=E7=AE=A1=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=BB=93=E7=AE=97=E5=9B=9E=E5=BD=92=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/repository_integration_test.go | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/backend/internal/modules/order/repository_integration_test.go b/backend/internal/modules/order/repository_integration_test.go index 02770ee..506d14d 100644 --- a/backend/internal/modules/order/repository_integration_test.go +++ b/backend/internal/modules/order/repository_integration_test.go @@ -1414,6 +1414,56 @@ func TestAdminPlatformCheckoutCounterCanBeAcceptedByRenter(t *testing.T) { } } +func TestPlatformManagedCheckoutIncludesConsumableAndDepositCompensation(t *testing.T) { + db := setupOrderTestDB(t) + repo := NewRepository(db) + adminID := uint64(80) + _, renter, order := createPlatformManagedCheckoutOrder(t, db, adminID) + + order.RentAmountCent = 12000 + order.OwnerRentAmountCent = 10000 + order.PlatformFeeCent = 2000 + order.DepositAmountCent = 1000 + order.PureCoinOriginalAmountCent = 10000 + order.ExtraItemOriginalAmountCent = 2000 + order.AccountSnapshot = datatypes.JSON([]byte(`{ + "haf_coin_amount":1000000, + "asset_summary":{"price_breakdown":{"buyer_coin_base_price":100,"seller_coin_base_price":80,"consumable_price":20}} + }`)) + if err := db.Save(&order).Error; err != nil { + t.Fatalf("update platform managed order: %v", err) + } + + checkout := createOpenPlatformCheckout(t, db, order, renter.ID) + if _, err := repo.AdminPlatformCheckoutCounter(t.Context(), adminID, order.ID, CounterCheckoutRequest{ + ConsumableAmountCent: 2000, + CoinConsumedM: 1, + DepositDeductAmountCent: 1000, + Reason: "客服核对消耗品和押金赔付", + }, AuditMeta{}); err != nil { + t.Fatalf("AdminPlatformCheckoutCounter() error = %v", err) + } + if err := repo.AcceptCheckout(t.Context(), renter.ID, order.ID); err != nil { + t.Fatalf("AcceptCheckout() error = %v", err) + } + + var savedOrder model.RentalOrder + if err := db.First(&savedOrder, order.ID).Error; err != nil { + t.Fatalf("reload order failed: %v", err) + } + if savedOrder.OfflineSettlementAmountCent != 11000 { + t.Fatalf("offline settlement amount = %d, want 11000", savedOrder.OfflineSettlementAmountCent) + } + + var savedCheckout model.OrderCheckout + if err := db.First(&savedCheckout, checkout.ID).Error; err != nil { + t.Fatalf("reload checkout failed: %v", err) + } + if savedCheckout.OwnerIncomeAmountCent != 11000 { + t.Fatalf("owner income amount = %d, want 11000", savedCheckout.OwnerIncomeAmountCent) + } +} + func TestAdminPlatformCheckoutDisputeCreatesArbitrationCase(t *testing.T) { db := setupOrderTestDB(t) if err := db.AutoMigrate(&model.Dispute{}); err != nil {