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 {