import * as formatRelativeTimeAgoModule from '../formatRelativeTimeAgo'; import { formatInvoicePaymentConfirmationStatus } from './formatInvoicePaymentConfirmationStatus'; describe('formatInvoicePaymentConfirmationStatus', () => { let formatRelativeTimeAgoSpy: jest.SpiedFunction; 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'); }); }); });