From c5e3f4f7baf4ea10eea3552af9df660e6d236c8d Mon Sep 17 00:00:00 2001 From: AJAL ODORA JONATHAN <43242517+ODORA0@users.noreply.github.com> Date: Tue, 24 Sep 2024 09:25:18 +0300 Subject: [PATCH] (Test) Add Tests for the Require Payment Modal Component (#63) --- src/modal/require-payment-modal.test.tsx | 66 ++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/modal/require-payment-modal.test.tsx diff --git a/src/modal/require-payment-modal.test.tsx b/src/modal/require-payment-modal.test.tsx new file mode 100644 index 0000000..517b124 --- /dev/null +++ b/src/modal/require-payment-modal.test.tsx @@ -0,0 +1,66 @@ +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import { useBills } from '../billing.resource'; +import RequirePaymentModal from './require-payment-modal.component'; + +jest.mock('react-i18next', () => ({ + useTranslation: () => ({ t: (key: string) => key }), +})); + +jest.mock('@openmrs/esm-framework', () => ({ + useConfig: () => ({ defaultCurrency: 'USD' }), +})); + +jest.mock('../billing.resource', () => ({ + useBills: jest.fn(), +})); + +jest.mock('../helpers', () => ({ + convertToCurrency: (value, currency) => `${currency} ${value.toFixed(2)}`, +})); + +describe('RequirePaymentModal', () => { + const closeModal = jest.fn(); + const patientUuid = '12345'; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('renders correctly', () => { + (useBills as jest.Mock).mockReturnValue({ bills: [], isLoading: false, error: null }); + render(); + expect(screen.getByText('patientBillingAlert')).toBeInTheDocument(); + }); + + it('displays loading state', () => { + (useBills as jest.Mock).mockReturnValue({ bills: [], isLoading: true, error: null }); + render(); + expect(screen.getByText('inlineLoading')).toBeInTheDocument(); + }); + + it('displays line items', () => { + const bills = [ + { + status: 'UNPAID', + lineItems: [ + { billableService: 'Service 1', quantity: 1, price: 100 }, + { item: 'Item 1', quantity: 2, price: 50 }, + ], + }, + ]; + (useBills as jest.Mock).mockReturnValue({ bills, isLoading: false, error: null }); + render(); + expect(screen.getByText('Service 1')).toBeInTheDocument(); + expect(screen.getByText('Item 1')).toBeInTheDocument(); + }); + + it('handles closeModal', () => { + (useBills as jest.Mock).mockReturnValue({ bills: [], isLoading: false, error: null }); + render(); + fireEvent.click(screen.getByText('cancel')); + fireEvent.click(screen.getByText('ok')); + expect(closeModal).toHaveBeenCalledTimes(2); + }); +});