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 } ) }) })