amanpay / web /src /payments /status.test.ts
MHamdan's picture
CI deploy 84761d0
de6cac5 verified
Raw
History Blame Contribute Delete
1.7 kB
import { describe, it, expect } from 'vitest'
import {
isTerminal, isSuccess, statusTone, isCancellable, isRefundable, statusHelpKey,
} from './status'
import { PAYMENT_STATUSES } from '../types'
describe('payment status presentation', () => {
it('terminal states', () => {
for (const s of ['succeeded', 'failed', 'cancelled', 'refunded', 'expired'] as const)
expect(isTerminal(s)).toBe(true)
for (const s of ['created', 'requires_customer_action', 'authorizing', 'processing', 'partially_refunded'] as const)
expect(isTerminal(s)).toBe(false)
})
it('processing is NOT success', () => {
expect(isSuccess('processing')).toBe(false)
expect(isSuccess('succeeded')).toBe(true)
})
it('tones', () => {
expect(statusTone('succeeded')).toBe('ok')
expect(statusTone('failed')).toBe('bad')
expect(statusTone('processing')).toBe('warn')
})
it('cancellable states mirror the backend (created/req-action/authorizing only)', () => {
for (const s of ['created', 'requires_customer_action', 'authorizing'] as const)
expect(isCancellable(s)).toBe(true)
for (const s of ['processing', 'succeeded', 'failed', 'cancelled', 'refunded', 'expired', 'partially_refunded'] as const)
expect(isCancellable(s)).toBe(false)
})
it('refundable states are succeeded / partially_refunded', () => {
expect(isRefundable('succeeded')).toBe(true)
expect(isRefundable('partially_refunded')).toBe(true)
expect(isRefundable('processing')).toBe(false)
expect(isRefundable('failed')).toBe(false)
})
it('every status has a help key', () => {
for (const s of PAYMENT_STATUSES) expect(statusHelpKey(s)).toBe(`statusHelp.${s}`)
})
})