JewelryMall/server/tests/adminOrder.test.ts
2026-02-14 19:29:15 +08:00

28 lines
1017 B
TypeScript

import { describe, it, expect } from 'vitest'
import * as fc from 'fast-check'
import { recalculateOrderTotal } from '../src/controllers/adminOrder'
// Generate an order item with arbitrary unitPrice and quantity
const orderItemArb = fc.record({
unitPrice: fc.float({ min: 0, max: 999999, noNaN: true }).map((n) => Math.round(n * 100) / 100),
quantity: fc.integer({ min: 1, max: 100 }),
})
// Feature: jewelry-mall, Property 8: 订单价格自动重算
// **Validates: Requirements 9.4**
describe('Property 8: 订单价格自动重算', () => {
it('变更后的订单总价应等于所有订单项的单价乘以数量之和', () => {
fc.assert(
fc.property(
fc.array(orderItemArb, { minLength: 1, maxLength: 20 }),
(items) => {
const total = recalculateOrderTotal(items)
const expected = items.reduce((sum, item) => sum + item.unitPrice * item.quantity, 0)
expect(total).toBeCloseTo(expected, 2)
}
),
{ numRuns: 100 }
)
})
})