From cc08c3c1d1b215eb0c2862b417d7baa67e5684fd Mon Sep 17 00:00:00 2001 From: vanilla-wave Date: Tue, 25 Feb 2025 19:47:13 +0100 Subject: [PATCH] refactor(onboarding): refactor beforeShowHint event tests --- src/tests/event-hooks.test.ts | 78 +++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 30 deletions(-) diff --git a/src/tests/event-hooks.test.ts b/src/tests/event-hooks.test.ts index 9f4ec87..67d2b81 100644 --- a/src/tests/event-hooks.test.ts +++ b/src/tests/event-hooks.test.ts @@ -221,50 +221,68 @@ describe('preset hooks', function () { }); }); describe('event subscriptions', function () { - it('beforeShowHint', async function () { - const controller = new Controller(getOptions()); + describe('beforeShowHint', () => { + it('element reached -> trigger event', async function () { + const controller = new Controller(getOptions()); - const mock = jest.fn(); - controller.events.subscribe('beforeShowHint', mock); + const mock = jest.fn(); + controller.events.subscribe('beforeShowHint', mock); - await controller.stepElementReached({ - stepSlug: 'createSprint', - element: getAnchorElement(), + await controller.stepElementReached({ + stepSlug: 'createSprint', + element: getAnchorElement(), + }); + + expect(mock).toHaveBeenCalled(); }); - expect(mock).toHaveBeenCalled(); - }); + it('element reached -> hint shown', async function () { + const controller = new Controller(getOptions()); - it('beforeShowHint with cancel -> no hint', async function () { - const controller = new Controller(getOptions()); + const mock = jest.fn(); + controller.events.subscribe('beforeShowHint', mock); - const mock = jest.fn(() => false); - controller.events.subscribe('beforeShowHint', mock); + await controller.stepElementReached({ + stepSlug: 'createSprint', + element: getAnchorElement(), + }); - await controller.stepElementReached({ - stepSlug: 'createSprint', - element: getAnchorElement(), + expect(controller.hintStore.state.open).toBe(true); }); - expect(controller.hintStore.state.open).toBe(false); - }); - - it('beforeShowHint with cancel -> call all hooks', async function () { - const controller = new Controller(getOptions()); + it('cancel hint show -> hint still not open', async function () { + const controller = new Controller(getOptions()); - const mock1 = jest.fn(() => false); - const mock2 = jest.fn(); + // return false to cancel hint show + const mock = jest.fn(() => false); + controller.events.subscribe('beforeShowHint', mock); - controller.events.subscribe('beforeShowHint', mock1); - controller.events.subscribe('beforeShowHint', mock2); + await controller.stepElementReached({ + stepSlug: 'createSprint', + element: getAnchorElement(), + }); - await controller.stepElementReached({ - stepSlug: 'createSprint', - element: getAnchorElement(), + expect(controller.hintStore.state.open).toBe(false); }); - expect(mock1).toHaveBeenCalled(); - expect(mock2).toHaveBeenCalled(); + it('cancel hint show -> call all hooks', async function () { + const controller = new Controller(getOptions()); + + // return false to cancel hint show + const mock1 = jest.fn(() => false); + const mock2 = jest.fn(); + + controller.events.subscribe('beforeShowHint', mock1); + controller.events.subscribe('beforeShowHint', mock2); + + await controller.stepElementReached({ + stepSlug: 'createSprint', + element: getAnchorElement(), + }); + + expect(mock1).toHaveBeenCalled(); + expect(mock2).toHaveBeenCalled(); + }); }); it('showHint', async function () {