@forge/react

11.18.0-next.011.18.0-next.1
out/router/hooks/__test__/useLocation.test.js
+out/router/hooks/__test__/useLocation.test.jsNew file
+59
Index: package/out/router/hooks/__test__/useLocation.test.js
===================================================================
--- package/out/router/hooks/__test__/useLocation.test.js
+++ package/out/router/hooks/__test__/useLocation.test.js
@@ -0,0 +1,59 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+const jsx_runtime_1 = require("react/jsx-runtime");
+const react_1 = require("react");
+const testUtils_1 = require("../../../__test__/testUtils");
+const reconcilerTestRenderer_1 = tslib_1.__importDefault(require("../../../__test__/reconcilerTestRenderer"));
+const Router_1 = require("../../components/Router");
+const useNavigate_1 = require("../useNavigate");
+const useLocation_1 = require("../useLocation");
+const components_1 = require("../../../components");
+const test_utils_1 = require("../../utils/test-utils");
+const mockCreateHistory = jest.fn(async () => (0, test_utils_1.createMockHistory)());
+jest.mock('@forge/bridge', () => ({
+    view: {
+        createHistory: () => mockCreateHistory()
+    }
+}));
+describe('useLocation', () => {
+    let bridgeCalls;
+    beforeAll(() => {
+        bridgeCalls = (0, testUtils_1.setupBridge)();
+    });
+    beforeEach(() => {
+        bridgeCalls.length = 0;
+        mockCreateHistory.mockClear();
+        mockCreateHistory.mockImplementation(async () => (0, test_utils_1.createMockHistory)());
+    });
+    afterEach(() => jest.clearAllMocks());
+    it('returns the current location', async () => {
+        const locationListener = jest.fn();
+        const LocationTest = () => {
+            const location = (0, useLocation_1.useLocation)();
+            (0, react_1.useEffect)(() => locationListener(location), [location]);
+            return (0, jsx_runtime_1.jsx)(components_1.Text, { children: "Location Test" });
+        };
+        await reconcilerTestRenderer_1.default.create((0, jsx_runtime_1.jsx)(Router_1.Router, { children: (0, jsx_runtime_1.jsx)(LocationTest, {}) }));
+        expect(locationListener).toHaveBeenCalledWith(expect.objectContaining({
+            pathname: '/',
+            search: '',
+            hash: ''
+        }));
+    });
+    it('updates when navigation occurs', async () => {
+        const locationListener = jest.fn();
+        const LocationTest = () => {
+            const location = (0, useLocation_1.useLocation)();
+            const navigate = (0, useNavigate_1.useNavigate)();
+            (0, react_1.useEffect)(() => locationListener(location), [location]);
+            (0, react_1.useEffect)(() => {
+                navigate('/about');
+            }, [navigate]);
+            return (0, jsx_runtime_1.jsx)(components_1.Text, { children: "Location Test" });
+        };
+        await reconcilerTestRenderer_1.default.create((0, jsx_runtime_1.jsx)(Router_1.Router, { children: (0, jsx_runtime_1.jsx)(LocationTest, {}) }));
+        expect(locationListener).toHaveBeenCalledWith(expect.objectContaining({ pathname: '/' }));
+        expect(locationListener).toHaveBeenCalledWith(expect.objectContaining({ pathname: '/about' }));
+    });
+});