@forge/react
11.18.0-next.011.18.0-next.1
out/router/hooks/__test__/useParams.test.js+
out/router/hooks/__test__/useParams.test.jsNew file+69
Index: package/out/router/hooks/__test__/useParams.test.js
===================================================================
--- package/out/router/hooks/__test__/useParams.test.js
+++ package/out/router/hooks/__test__/useParams.test.js
@@ -0,0 +1,69 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+const jsx_runtime_1 = require("react/jsx-runtime");
+const testUtils_1 = require("../../../__test__/testUtils");
+const reconcilerTestRenderer_1 = tslib_1.__importDefault(require("../../../__test__/reconcilerTestRenderer"));
+const components_1 = require("../../components");
+const useParams_1 = require("../useParams");
+const __1 = require("../../..");
+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('useParams', () => {
+ 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('throws when used outside of Route', async () => {
+ const ComponentUsingParams = () => {
+ const params = (0, useParams_1.useParams)();
+ return (0, jsx_runtime_1.jsx)(__1.Text, { children: JSON.stringify(params) });
+ };
+ await expect(reconcilerTestRenderer_1.default.create((0, jsx_runtime_1.jsx)(ComponentUsingParams, {}))).rejects.toThrow('useParams must be used within a Route component');
+ });
+ it('renders route with no params', async () => {
+ await reconcilerTestRenderer_1.default.create((0, jsx_runtime_1.jsx)(components_1.Router, { children: (0, jsx_runtime_1.jsx)(components_1.Route, { path: "/", children: (0, jsx_runtime_1.jsx)(__1.Text, { children: "Home" }) }) }));
+ const forgeDoc = (0, testUtils_1.getLastBridgeCallForgeDoc)(bridgeCalls);
+ expect(forgeDoc).toHaveProperty('children[0].type', 'Text');
+ expect(forgeDoc).toHaveProperty('children[0].children[0].props.text', 'Home');
+ });
+ it('renders route with matched params', async () => {
+ mockCreateHistory.mockImplementation(async () => (0, test_utils_1.createMockHistory)('/posts/42'));
+ const Post = () => {
+ const { id } = (0, useParams_1.useParams)();
+ return (0, jsx_runtime_1.jsx)(__1.Text, { children: `Post ${id}` });
+ };
+ await reconcilerTestRenderer_1.default.create((0, jsx_runtime_1.jsx)(components_1.Router, { children: (0, jsx_runtime_1.jsx)(components_1.Route, { path: "/posts/:id", children: (0, jsx_runtime_1.jsx)(Post, {}) }) }));
+ const forgeDoc = (0, testUtils_1.getLastBridgeCallForgeDoc)(bridgeCalls);
+ expect(forgeDoc).toHaveProperty('children[0].type', 'Text');
+ expect(forgeDoc).toHaveProperty('children[0].children[0].props.text', 'Post 42');
+ });
+ it('renders route with multiple matched params', async () => {
+ mockCreateHistory.mockImplementation(async () => (0, test_utils_1.createMockHistory)('/posts/42/comments/7'));
+ const Comment = () => {
+ const { postId, commentId } = (0, useParams_1.useParams)();
+ return (0, jsx_runtime_1.jsx)(__1.Text, { children: `Post ${postId} Comment ${commentId}` });
+ };
+ await reconcilerTestRenderer_1.default.create((0, jsx_runtime_1.jsx)(components_1.Router, { children: (0, jsx_runtime_1.jsx)(components_1.Route, { path: "/posts/:postId/comments/:commentId", children: (0, jsx_runtime_1.jsx)(Comment, {}) }) }));
+ const forgeDoc = (0, testUtils_1.getLastBridgeCallForgeDoc)(bridgeCalls);
+ expect(forgeDoc).toHaveProperty('children[0].type', 'Text');
+ expect(forgeDoc).toHaveProperty('children[0].children[0].props.text', 'Post 42 Comment 7');
+ });
+ it('does not render route when dynamic path does not match', async () => {
+ mockCreateHistory.mockImplementation(async () => (0, test_utils_1.createMockHistory)('/users/alice'));
+ await reconcilerTestRenderer_1.default.create((0, jsx_runtime_1.jsx)(components_1.Router, { children: (0, jsx_runtime_1.jsx)(components_1.Route, { path: "/posts/:id", children: (0, jsx_runtime_1.jsx)(__1.Text, { children: "Post Detail" }) }) }));
+ const forgeDoc = (0, testUtils_1.getLastBridgeCallForgeDoc)(bridgeCalls);
+ expect(forgeDoc?.children).toHaveLength(0);
+ });
+});