import React from "react"; import { render, act } from "@testing-library/react-native"; import { Touchable } from "../../Touchable"; const mockUseIsRTL = jest.fn(); jest.mock("@applicaster/zapp-react-native-utils/localizationUtils", () => ({ useIsRTL: mockUseIsRTL, })); const mockUseFocusManager = jest.fn(); jest.mock("@applicaster/zapp-react-native-utils/focusManager", () => ({ useFocusManager: mockUseFocusManager, })); const mockUsePrevious = jest.fn(); jest.mock("@applicaster/zapp-react-native-utils/reactHooks/utils", () => ({ usePrevious: mockUsePrevious, })); const { Focusable } = require("../index.android"); describe("Focusable", () => { const mockFocusManager = { isFocused: jest.fn(), onDisableFocusChange: jest.fn(), registerFocusable: jest.fn(), focusedId: "test-id", }; beforeEach(() => { jest.clearAllMocks(); mockUseIsRTL.mockReturnValue(false); mockUseFocusManager.mockReturnValue(mockFocusManager); mockUsePrevious.mockReturnValue(false); }); it("updates disableFocus state when disableFocus prop changes", () => { const unregister = jest.fn(); mockFocusManager.registerFocusable.mockReturnValue(unregister); const { rerender } = render( ); rerender( ); expect(mockFocusManager.onDisableFocusChange).toHaveBeenCalledWith( "test-id" ); }); it("calls focusManager.registerFocusable on mount and unregisters on unmount", () => { const unregister = jest.fn(); mockFocusManager.registerFocusable.mockReturnValue(unregister); const { unmount } = render( ); expect(mockFocusManager.registerFocusable).toHaveBeenCalled(); act(() => unmount()); expect(unregister).toHaveBeenCalled(); }); });