PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.2
Presto Player v4.3.2
4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / dashboard / hooks / test / useRegisterActivePage.spec.js
presto-player / src / admin / dashboard / hooks / test Last commit date
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
useRegisterActivePage.spec.js
152 lines
1 import { renderHook } from "@testing-library/react-hooks";
2 import useRegisterActivePage from "../useRegisterActivePage";
3
4 describe("useRegisterActivePage", () => {
5 it("registers a descriptor on mount that proxies isDirty / save / discard", () => {
6 const registerActivePage = jest.fn();
7 const save = jest.fn();
8 const discard = jest.fn();
9
10 renderHook(() =>
11 useRegisterActivePage(registerActivePage, {
12 isDirty: true,
13 save,
14 discard,
15 })
16 );
17
18 expect(registerActivePage).toHaveBeenCalledTimes(1);
19 const descriptor = registerActivePage.mock.calls[0][0];
20 expect(descriptor.isDirty).toBe(true);
21 expect(typeof descriptor.save).toBe("function");
22 expect(typeof descriptor.discard).toBe("function");
23
24 descriptor.save();
25 descriptor.discard();
26 expect(save).toHaveBeenCalledTimes(1);
27 expect(discard).toHaveBeenCalledTimes(1);
28 });
29
30 it("the registered isDirty getter reads the LATEST value across re-renders", () => {
31 const registerActivePage = jest.fn();
32
33 const { rerender } = renderHook(
34 ({ isDirty }) =>
35 useRegisterActivePage(registerActivePage, {
36 isDirty,
37 save: jest.fn(),
38 discard: jest.fn(),
39 }),
40 { initialProps: { isDirty: false } }
41 );
42
43 const descriptor = registerActivePage.mock.calls[0][0];
44 expect(descriptor.isDirty).toBe(false);
45
46 // Re-render with a new isDirty — the same descriptor should reflect it.
47 rerender({ isDirty: true });
48 expect(descriptor.isDirty).toBe(true);
49
50 // The effect MUST NOT re-fire just because props changed (registering on
51 // every keystroke would defeat the whole ref-based design).
52 expect(registerActivePage).toHaveBeenCalledTimes(1);
53 });
54
55 it("the registered save/discard callbacks delegate to the LATEST closures", () => {
56 const registerActivePage = jest.fn();
57 const firstSave = jest.fn();
58 const firstDiscard = jest.fn();
59
60 const { rerender } = renderHook(
61 ({ save, discard }) =>
62 useRegisterActivePage(registerActivePage, {
63 isDirty: false,
64 save,
65 discard,
66 }),
67 { initialProps: { save: firstSave, discard: firstDiscard } }
68 );
69
70 const descriptor = registerActivePage.mock.calls[0][0];
71
72 // Replace save/discard via re-render. The descriptor's wrappers should
73 // call the new closures, not the captured originals.
74 const secondSave = jest.fn();
75 const secondDiscard = jest.fn();
76 rerender({ save: secondSave, discard: secondDiscard });
77
78 descriptor.save();
79 descriptor.discard();
80
81 expect(firstSave).not.toHaveBeenCalled();
82 expect(firstDiscard).not.toHaveBeenCalled();
83 expect(secondSave).toHaveBeenCalledTimes(1);
84 expect(secondDiscard).toHaveBeenCalledTimes(1);
85 });
86
87 it("clears the registration on unmount so Settings.js doesn't keep stale handlers", () => {
88 const registerActivePage = jest.fn();
89 const { unmount } = renderHook(() =>
90 useRegisterActivePage(registerActivePage, {
91 isDirty: false,
92 save: jest.fn(),
93 discard: jest.fn(),
94 })
95 );
96
97 unmount();
98 expect(registerActivePage).toHaveBeenCalledTimes(2);
99 expect(registerActivePage).toHaveBeenLastCalledWith(null);
100 });
101
102 it("no-ops cleanly when registerActivePage is undefined", () => {
103 expect(() =>
104 renderHook(() =>
105 useRegisterActivePage(undefined, {
106 isDirty: false,
107 save: jest.fn(),
108 discard: jest.fn(),
109 })
110 ).unmount()
111 ).not.toThrow();
112 });
113
114 it("re-registers when the registerActivePage prop reference changes", () => {
115 const firstRegister = jest.fn();
116 const { rerender } = renderHook(
117 ({ register }) =>
118 useRegisterActivePage(register, {
119 isDirty: false,
120 save: jest.fn(),
121 discard: jest.fn(),
122 }),
123 { initialProps: { register: firstRegister } }
124 );
125
126 expect(firstRegister).toHaveBeenCalledTimes(1);
127
128 const secondRegister = jest.fn();
129 rerender({ register: secondRegister });
130
131 // Cleanup of the prior effect calls firstRegister(null), then the new
132 // effect runs and calls secondRegister(descriptor).
133 expect(firstRegister).toHaveBeenCalledTimes(2);
134 expect(firstRegister).toHaveBeenLastCalledWith(null);
135 expect(secondRegister).toHaveBeenCalledTimes(1);
136 });
137
138 it("descriptor.save / .discard are no-ops if the user passed undefined for them", () => {
139 const registerActivePage = jest.fn();
140 renderHook(() =>
141 useRegisterActivePage(registerActivePage, {
142 isDirty: false,
143 save: undefined,
144 discard: undefined,
145 })
146 );
147 const descriptor = registerActivePage.mock.calls[0][0];
148 expect(() => descriptor.save()).not.toThrow();
149 expect(() => descriptor.discard()).not.toThrow();
150 });
151 });
152