89 lines
3.0 KiB
TypeScript
89 lines
3.0 KiB
TypeScript
import * as formatRelativeTimeAgoModule from '../formatRelativeTimeAgo';
|
|
import { formatInvoicePaymentConfirmationStatus } from './formatInvoicePaymentConfirmationStatus';
|
|
|
|
describe('formatInvoicePaymentConfirmationStatus', () => {
|
|
let formatRelativeTimeAgoSpy: jest.SpiedFunction<typeof formatRelativeTimeAgoModule.formatRelativeTimeAgo>;
|
|
|
|
beforeEach(() => {
|
|
formatRelativeTimeAgoSpy = jest
|
|
.spyOn(formatRelativeTimeAgoModule, 'formatRelativeTimeAgo')
|
|
.mockReturnValue('2 hours ago');
|
|
});
|
|
|
|
afterEach(() => {
|
|
formatRelativeTimeAgoSpy.mockRestore();
|
|
});
|
|
|
|
describe('compact', () => {
|
|
it('returns Confirmed when confirmations meet the requirement', () => {
|
|
expect(
|
|
formatInvoicePaymentConfirmationStatus({
|
|
confirmations: 3,
|
|
requiredConfirmations: 3,
|
|
format: 'compact'
|
|
})
|
|
).toBe('Confirmed');
|
|
});
|
|
|
|
it('returns compact progress with a slash separator', () => {
|
|
expect(
|
|
formatInvoicePaymentConfirmationStatus({
|
|
confirmations: 2,
|
|
requiredConfirmations: 10,
|
|
format: 'compact'
|
|
})
|
|
).toBe('2/10');
|
|
});
|
|
|
|
it('treats zero-confirmation tiers as confirmed', () => {
|
|
expect(
|
|
formatInvoicePaymentConfirmationStatus({
|
|
confirmations: 0,
|
|
requiredConfirmations: 0,
|
|
format: 'compact'
|
|
})
|
|
).toBe('Confirmed');
|
|
});
|
|
});
|
|
|
|
describe('extended', () => {
|
|
const createdAt = new Date('2026-01-01T12:00:00.000Z');
|
|
|
|
it('returns Confirmed when confirmations meet the requirement', () => {
|
|
expect(
|
|
formatInvoicePaymentConfirmationStatus({
|
|
confirmations: 1,
|
|
requiredConfirmations: 1,
|
|
createdAt,
|
|
format: 'extended'
|
|
})
|
|
).toBe('Confirmed');
|
|
|
|
expect(formatRelativeTimeAgoSpy).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('returns extended progress with relative detection time', () => {
|
|
expect(
|
|
formatInvoicePaymentConfirmationStatus({
|
|
confirmations: 2,
|
|
requiredConfirmations: 10,
|
|
createdAt,
|
|
format: 'extended'
|
|
})
|
|
).toBe('2 / 10 confirmations · detected 2 hours ago');
|
|
|
|
expect(formatRelativeTimeAgoSpy).toHaveBeenCalledWith(createdAt);
|
|
});
|
|
|
|
it('requires createdAt for extended format', () => {
|
|
expect(() =>
|
|
formatInvoicePaymentConfirmationStatus({
|
|
confirmations: 1,
|
|
requiredConfirmations: 3,
|
|
format: 'extended'
|
|
})
|
|
).toThrow('createdAt is required for extended confirmation status format');
|
|
});
|
|
});
|
|
});
|