vending-machine/mobile/__tests__/stamps-redeem.property.test.js
2026-04-08 20:45:41 +08:00

44 lines
1.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, it, expect } from 'vitest'
import * as fc from 'fast-check'
import { resolveStampRedeemButton } from '../utils/stamps.js'
describe('Property 10: 印花优惠券兑换状态显示', () => {
/**
* **Feature: mobile-app, Property 10: 印花优惠券兑换状态显示**
* **Validates: Requirements 6.6**
*
* 对于任意印花优惠券列表redeemed为true的优惠券应显示"已兑换"灰色不可点击按钮,
* redeemed为false的应显示可点击的"兑换"按钮。
*/
it('兑换按钮状态应根据redeemed和会员状态正确显示', () => {
const stateArb = fc.record({
redeemed: fc.boolean(),
isMember: fc.boolean()
})
fc.assert(
fc.property(stateArb, (state) => {
const result = resolveStampRedeemButton(state)
if (state.redeemed) {
// 已兑换:灰色不可点击,显示"已兑换"
expect(result.label).toBe('redeemedBtn')
expect(result.disabled).toBe(true)
expect(result.action).toBe('none')
} else if (!state.isMember) {
// 未兑换 + 非会员:可点击,跳转会员页
expect(result.label).toBe('redeemBtn')
expect(result.disabled).toBe(false)
expect(result.action).toBe('goMembership')
} else {
// 未兑换 + 会员:可点击,执行兑换
expect(result.label).toBe('redeemBtn')
expect(result.disabled).toBe(false)
expect(result.action).toBe('redeem')
}
}),
{ numRuns: 100 }
)
})
})