43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import * as fc from 'fast-check'
|
|
import { getOrderDisplayFields } from './orderDisplay'
|
|
import type { OrderStatus } from '../types'
|
|
|
|
const orderStatusArb: fc.Arbitrary<OrderStatus> = fc.constantFrom(
|
|
'pending' as const,
|
|
'paid' as const,
|
|
'shipped' as const,
|
|
'cancelled' as const,
|
|
)
|
|
|
|
// Feature: jewelry-mall, Property 3: 订单状态与展示字段匹配
|
|
// **Validates: Requirements 3.5, 3.6**
|
|
describe('Property 3: 订单状态与展示字段匹配', () => {
|
|
it('已支付状态应展示支付时间,已发货状态应展示物流信息', () => {
|
|
fc.assert(
|
|
fc.property(orderStatusArb, (status) => {
|
|
const fields = getOrderDisplayFields(status)
|
|
|
|
// Requirements 3.5: 已支付时展示支付时间
|
|
if (status === 'paid') {
|
|
expect(fields.showPaymentTime).toBe(true)
|
|
expect(fields.showShippingInfo).toBe(false)
|
|
}
|
|
|
|
// Requirements 3.6: 已发货时展示物流信息(且也展示支付时间)
|
|
if (status === 'shipped') {
|
|
expect(fields.showPaymentTime).toBe(true)
|
|
expect(fields.showShippingInfo).toBe(true)
|
|
}
|
|
|
|
// 待支付和已取消不展示支付时间和物流信息
|
|
if (status === 'pending' || status === 'cancelled') {
|
|
expect(fields.showPaymentTime).toBe(false)
|
|
expect(fields.showShippingInfo).toBe(false)
|
|
}
|
|
}),
|
|
{ numRuns: 100 },
|
|
)
|
|
})
|
|
})
|