44 lines
1.5 KiB
JavaScript
44 lines
1.5 KiB
JavaScript
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 }
|
||
)
|
||
})
|
||
})
|