import { describe, expect, it } from 'vitest' import { storageRentBillingShare, storageRentChargeStatus, storageRentGeneratedAmounts, storageRentSummaryStatus, storageRentTime } from './storageRentPresentation' import type { StorageRentLot } from './api/storageRent' it('distinguishes missing charges, genuine free rent and incomplete settlement', () => { const lot = { status: 'CLEARED', originalQuantity: 4, billingQuantity: 1, billingUnit: 'PALLET', chargeCount: 2, settledChargeCount: 2, settledAmount: 10 } as StorageRentLot expect(storageRentSummaryStatus(lot)).toBe('已扣款') expect(storageRentSummaryStatus({ ...lot, settledChargeCount: 1 })).toBe('有待完成扣款') expect(storageRentSummaryStatus({ ...lot, settledAmount: 0 })).toBe('免租 · 已结算') expect(storageRentSummaryStatus({ ...lot, chargeCount: 0 })).toBe('仓租记录待核对') expect(storageRentBillingShare(2, lot)).toBe('0.5 托') expect(storageRentBillingShare(1, lot, { billingQuantity: 1, billingUnit: 'PALLET' })).toBe('1 托') }) describe('仓租原币汇总显示', () => { it('displays server currency groups without adding different currencies', () => { expect(storageRentGeneratedAmounts({ generatedAmounts: [{ currency: 'USD', amount: 12 }, { currency: 'CNY', amount: 23 }], generatedAmount: null, generatedCurrency: null })).toEqual(['USD 12.00', 'CNY 23.00']) expect(storageRentGeneratedAmounts({ generatedAmounts: [{ currency: 'EUR', amount: 0 }], generatedAmount: 0, generatedCurrency: 'EUR' })).toEqual(['EUR 0.00']) }) it('keeps scalar single currency totals and empty totals free of assumed currencies', () => { expect(storageRentGeneratedAmounts({ generatedAmounts: [], generatedAmount: 8.5, generatedCurrency: 'CNY' })).toEqual(['CNY 8.50']) expect(storageRentGeneratedAmounts({ generatedAmounts: [], generatedAmount: 0, generatedCurrency: null })).toEqual(['0.00']) expect(storageRentGeneratedAmounts({ generatedAmounts: [], generatedAmount: null, generatedCurrency: null })).toEqual(['—']) }) }) describe('仓租扣费状态', () => { it('labels only settled zero-original-amount charges as rent free', () => { expect(storageRentChargeStatus({ status: 'SETTLED', originalAmount: 0 })).toBe('免租') expect(storageRentChargeStatus({ status: 'SETTLED', originalAmount: '0.00' })).toBe('免租') expect(storageRentChargeStatus({ status: 'SETTLED', originalAmount: 12 })).toBe('已扣费') expect(storageRentChargeStatus({ status: 'SETTLED', originalAmount: null })).toBe('已扣费') expect(storageRentChargeStatus({ status: 'CONSUMED', originalAmount: 0 })).toBe('扣费中') expect(storageRentChargeStatus({ status: 'SETTLE_FAILED', originalAmount: 0 })).toBe('扣费失败') }) }) describe('仓租带时区时间显示', () => { it('converts UTC and equivalent offset timestamps before displaying local business dates', () => { expect(storageRentTime('2026-10-22T18:30:45Z', 'Asia/Shanghai')).toBe('2026-10-23 02:30:45') expect(storageRentTime('2026-10-23T02:30:45+08:00', 'Asia/Shanghai')).toBe('2026-10-23 02:30:45') expect(storageRentTime('2026-10-22T02:30:45Z', 'America/Los_Angeles')).toBe('2026-10-21 19:30:45') }) it('defaults to the browser timezone and handles missing or invalid values', () => { const value = '2026-10-22T18:30:45Z' expect(storageRentTime(value)).toBe(storageRentTime(value, Intl.DateTimeFormat().resolvedOptions().timeZone)) expect(storageRentTime(null)).toBe('—') expect(storageRentTime('invalid')).toBe('—') }) })