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);
+ });
+});