import React from 'react'; import { describe, expect, it, vi, beforeEach } from 'vitest'; import { act, render, screen, waitFor } from '@testing-library/react'; import { PaddleCheckout } from '../pages/WelcomeOrderSummaryPage'; const { createPaddleCheckoutMock } = vi.hoisted(() => ({ createPaddleCheckoutMock: vi.fn(), })); vi.mock('../../api', () => ({ assignFreeTenantPackage: vi.fn(), createTenantPaddleCheckout: createPaddleCheckoutMock, })); describe('PaddleCheckout', () => { beforeEach(() => { createPaddleCheckoutMock.mockReset(); }); it('opens Paddle checkout when created successfully', async () => { createPaddleCheckoutMock.mockResolvedValue({ checkout_url: 'https://paddle.example/checkout' }); const onSuccess = vi.fn(); const openSpy = vi.spyOn(window, 'open').mockImplementation(() => null); render( key} /> ); await act(async () => { screen.getByRole('button').click(); }); await waitFor(() => { expect(createPaddleCheckoutMock).toHaveBeenCalledWith(99); expect(openSpy).toHaveBeenCalledWith('https://paddle.example/checkout', '_blank', 'noopener'); expect(onSuccess).toHaveBeenCalled(); }); openSpy.mockRestore(); }); it('shows an error message on failure', async () => { createPaddleCheckoutMock.mockRejectedValue(new Error('boom')); render( key} /> ); await act(async () => { screen.getByRole('button').click(); }); await waitFor(() => { expect(screen.getByText('summary.paddle.genericError')).toBeInTheDocument(); }); }); });