// __tests__/components/pois/PoiUpdateModalWrapper.test.js import React from "react"; import { render, screen, fireEvent, act } from "@testing-library/react"; import "@testing-library/jest-dom"; import PoiUpdateModalWrapper from "../../../components/pois/PoiUpdateModalWrapper"; import { useRecoilValue, useSetRecoilState } from "recoil"; import { currentPoiState, selectedPoiState } from "../../../store/atoms/poiState"; import { poiReadFromDbTriggerAtom } from "../../../store/atoms/poiReadFromDbTriggerAtom"; // Mock Recoil hooks jest.mock("recoil"); describe("PoiUpdateModalWrapper", () => { const mockOnClose = jest.fn(); const currentPoiMock = { idPoi: "123", name: "Test POI", description: "Test Description", idPoiTyp: "1", idLD: "2", }; const latlngMock = { lat: 52.52, lng: 13.405 }; beforeEach(() => { // Mock the recoil values useRecoilValue.mockImplementation((atom) => { if (atom === currentPoiState) return currentPoiMock; if (atom === poiReadFromDbTriggerAtom) return 0; }); useSetRecoilState.mockImplementation(() => jest.fn()); mockOnClose.mockClear(); // Mock global fetch global.fetch = jest.fn((url) => Promise.resolve({ json: () => { if (url.includes("getDeviceIdById")) { return Promise.resolve({ idLD: "2", name: "Device1" }); } if (url.includes("readPoiTyp")) { return Promise.resolve([{ idPoiTyp: "1", name: "Type1" }]); } if (url.includes("locationDevices")) { return Promise.resolve([{ id: "2", name: "Device1" }]); } return Promise.resolve({}); }, }) ); }); test("renders PoiUpdateModal when 'show' is true", async () => { await act(async () => { render(); }); // Check if the modal and its contents are in the document expect(screen.getByDisplayValue("Test Description")).toBeInTheDocument(); }); test("does not render PoiUpdateModal when 'show' is false", () => { render(); // Check if the modal is not in the document expect(screen.queryByDisplayValue("Test POI")).not.toBeInTheDocument(); }); test("calls onClose when the modal close button is clicked", async () => { await act(async () => { render(); }); // Simulate closing the modal fireEvent.click(screen.getByLabelText("Close")); expect(mockOnClose).toHaveBeenCalledTimes(1); }); });