useCompleteOnboarding.spec.js
1 month ago
useDateRangePicker.spec.js
2 months ago
useEmail.spec.js
2 months ago
useEngagementChartData.spec.js
2 months ago
useLicenseSettings.spec.js
2 months ago
useLink.spec.js
2 months ago
useMediaDetail.spec.js
2 months ago
useMediaLibrary.spec.js
2 months ago
useMediaList.spec.js
1 month ago
usePerformanceSettings.spec.js
2 months ago
useRegisterActivePage.spec.js
2 months ago
useSettingOption.spec.js
2 months ago
useSimpleSettingsPage.spec.js
2 months ago
useTopPerforming.spec.js
2 months ago
useTopVideosPaginated.spec.js
2 months ago
useUpgradeCTA.spec.js
2 months ago
useUserDetail.spec.js
2 months ago
useLink.spec.js
64 lines
| 1 | import { renderHook } from "@testing-library/react-hooks"; |
| 2 | |
| 3 | const mockPush = jest.fn(); |
| 4 | const mockUseHistory = jest.fn(() => ({ push: mockPush })); |
| 5 | const mockRunNavGuards = jest.fn(); |
| 6 | |
| 7 | jest.mock("../../router/router", () => ({ |
| 8 | useHistory: () => mockUseHistory(), |
| 9 | })); |
| 10 | |
| 11 | jest.mock("../../pages/settings/shared/navigationGuard", () => ({ |
| 12 | runNavGuards: (...args) => mockRunNavGuards(...args), |
| 13 | })); |
| 14 | |
| 15 | import useLink from "../useLink"; |
| 16 | |
| 17 | describe("useLink", () => { |
| 18 | let originalLocation; |
| 19 | |
| 20 | beforeEach(() => { |
| 21 | mockPush.mockReset(); |
| 22 | mockRunNavGuards.mockReset().mockReturnValue(false); |
| 23 | originalLocation = window.location; |
| 24 | delete window.location; |
| 25 | window.location = { pathname: "/wp-admin/admin.php" }; |
| 26 | }); |
| 27 | |
| 28 | afterEach(() => { |
| 29 | window.location = originalLocation; |
| 30 | }); |
| 31 | |
| 32 | it("computes href by appending params to the current pathname", () => { |
| 33 | const { result } = renderHook(() => |
| 34 | useLink({ tab: "Analytics", section: "Top" }) |
| 35 | ); |
| 36 | expect(result.current.href).toBe( |
| 37 | "/wp-admin/admin.php?tab=Analytics§ion=Top" |
| 38 | ); |
| 39 | }); |
| 40 | |
| 41 | it("onClick prevents default and calls history.push when no guard blocks", () => { |
| 42 | const params = { tab: "Settings" }; |
| 43 | const { result } = renderHook(() => useLink(params)); |
| 44 | |
| 45 | const event = { preventDefault: jest.fn() }; |
| 46 | result.current.onClick(event); |
| 47 | |
| 48 | expect(event.preventDefault).toHaveBeenCalled(); |
| 49 | expect(mockRunNavGuards).toHaveBeenCalledWith(params); |
| 50 | expect(mockPush).toHaveBeenCalledWith(params); |
| 51 | }); |
| 52 | |
| 53 | it("onClick does NOT call history.push when a nav guard returns true", () => { |
| 54 | mockRunNavGuards.mockReturnValue(true); |
| 55 | const { result } = renderHook(() => useLink({ tab: "Settings" })); |
| 56 | |
| 57 | const event = { preventDefault: jest.fn() }; |
| 58 | result.current.onClick(event); |
| 59 | |
| 60 | expect(event.preventDefault).toHaveBeenCalled(); |
| 61 | expect(mockPush).not.toHaveBeenCalled(); |
| 62 | }); |
| 63 | }); |
| 64 |