Rework how the onboarding notifications task works (#12839)
* Rework how the onboarding notifications task works Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add test Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
parent
dd20741b87
commit
02047243f0
6 changed files with 85 additions and 17 deletions
|
@ -14,9 +14,16 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
import { renderHook } from "@testing-library/react-hooks";
|
||||
import { waitFor } from "@testing-library/react";
|
||||
|
||||
import { useUserOnboardingTasks } from "../../src/hooks/useUserOnboardingTasks";
|
||||
import { useUserOnboardingContext } from "../../src/hooks/useUserOnboardingContext";
|
||||
import { stubClient } from "../test-utils";
|
||||
import MatrixClientContext from "../../src/contexts/MatrixClientContext";
|
||||
import DMRoomMap from "../../src/utils/DMRoomMap";
|
||||
import PlatformPeg from "../../src/PlatformPeg";
|
||||
|
||||
describe("useUserOnboardingTasks", () => {
|
||||
it.each([
|
||||
|
@ -25,7 +32,7 @@ describe("useUserOnboardingTasks", () => {
|
|||
hasAvatar: false,
|
||||
hasDevices: false,
|
||||
hasDmRooms: false,
|
||||
hasNotificationsEnabled: false,
|
||||
showNotificationsPrompt: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -33,7 +40,7 @@ describe("useUserOnboardingTasks", () => {
|
|||
hasAvatar: true,
|
||||
hasDevices: false,
|
||||
hasDmRooms: false,
|
||||
hasNotificationsEnabled: true,
|
||||
showNotificationsPrompt: true,
|
||||
},
|
||||
},
|
||||
])("sequence should stay static", async ({ context }) => {
|
||||
|
@ -46,4 +53,37 @@ describe("useUserOnboardingTasks", () => {
|
|||
expect(result.current[3].id).toBe("setup-profile");
|
||||
expect(result.current[4].id).toBe("permission-notifications");
|
||||
});
|
||||
|
||||
it("should mark desktop notifications task completed on click", async () => {
|
||||
jest.spyOn(PlatformPeg, "get").mockReturnValue({
|
||||
supportsNotifications: jest.fn().mockReturnValue(true),
|
||||
maySendNotifications: jest.fn().mockReturnValue(false),
|
||||
} as any);
|
||||
|
||||
const cli = stubClient();
|
||||
cli.pushRules = {
|
||||
global: {
|
||||
override: [
|
||||
{
|
||||
rule_id: ".m.rule.master",
|
||||
enabled: false,
|
||||
actions: [],
|
||||
default: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
DMRoomMap.makeShared(cli);
|
||||
const context = renderHook(() => useUserOnboardingContext(), {
|
||||
wrapper: (props) => {
|
||||
return <MatrixClientContext.Provider value={cli}>{props.children}</MatrixClientContext.Provider>;
|
||||
},
|
||||
});
|
||||
const { result, rerender } = renderHook(() => useUserOnboardingTasks(context.result.current));
|
||||
expect(result.current[4].id).toBe("permission-notifications");
|
||||
await waitFor(() => expect(result.current[4].completed).toBe(false));
|
||||
result.current[4].action!.onClick!({ type: "click" } as any);
|
||||
rerender();
|
||||
await waitFor(() => expect(result.current[4].completed).toBe(true));
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue