From 45b963149406d66f48c93c3968f034955cef8a2e Mon Sep 17 00:00:00 2001 From: Simone Taeggi Date: Sun, 28 May 2023 23:18:21 +0200 Subject: [PATCH] add useSettingsForm get test --- .../admin/src/hooks/useSettingsForm/index.js | 3 +- .../hooks/useSettingsForm/tests/index.test.js | 113 ++++++++++++++++++ .../tests/__snapshots__/index.test.js.snap | 10 +- 3 files changed, 120 insertions(+), 6 deletions(-) create mode 100644 packages/core/admin/admin/src/hooks/useSettingsForm/tests/index.test.js diff --git a/packages/core/admin/admin/src/hooks/useSettingsForm/index.js b/packages/core/admin/admin/src/hooks/useSettingsForm/index.js index dd2425a7af..a67b463dfa 100644 --- a/packages/core/admin/admin/src/hooks/useSettingsForm/index.js +++ b/packages/core/admin/admin/src/hooks/useSettingsForm/index.js @@ -82,6 +82,7 @@ const useSettingsForm = (endPoint, schema, cbSuccess, fieldsToPick) => { }); if (!errors) { + try { lockApp(); @@ -116,7 +117,7 @@ const useSettingsForm = (endPoint, schema, cbSuccess, fieldsToPick) => { }); } catch (err) { const data = err?.response?.payload ?? { data: {} }; - + if (!!data?.data && typeof data.data === 'string') { toggleNotification({ type: 'warning', diff --git a/packages/core/admin/admin/src/hooks/useSettingsForm/tests/index.test.js b/packages/core/admin/admin/src/hooks/useSettingsForm/tests/index.test.js new file mode 100644 index 0000000000..89bdf056a7 --- /dev/null +++ b/packages/core/admin/admin/src/hooks/useSettingsForm/tests/index.test.js @@ -0,0 +1,113 @@ +import * as React from 'react'; +import { setupServer } from 'msw/node'; +import { rest } from 'msw'; +import { renderHook, act } from '@testing-library/react-hooks'; +import { IntlProvider } from 'react-intl'; +import useSettingsForm from '../index'; + +const toggleNotification = jest.fn(); + +jest.mock('@strapi/helper-plugin', () => ({ + ...jest.requireActual('@strapi/helper-plugin'), + useNotification: jest.fn().mockImplementation(() => toggleNotification), + useOverlayBlocker: () => ({ lockApp: jest.fn(), unlockApp: jest.fn() }), +})); + +jest.mock('../../../utils', () => ({ + ...jest.requireActual('../../../utils'), + checkFormValidity: () => (null), +})); + +const server = setupServer( + rest.get('*/providers/options', (req, res, ctx) => + res( + ctx.status(200), + ctx.json({ + data: { + autoRegister: false, + defaultRole: "1", + ssoLockedRoles: ["1","2"] + } + }) + ) + ), + rest.put('*/providers/options', (req, res, ctx) => { + res( + ctx.status(200), + ctx.json({ + data: { + data: { + autoRegister: false, + defaultRole: "1", + ssoLockedRoles: ["1","2","3"] + } + } + }) + ) + }) +); + +const setup = (...args) => + renderHook(() => useSettingsForm(...args), { + wrapper({ children }) { + return ( + + {children} + + ); + } + }) + +describe('useSettingsForm', () => { + beforeAll(() => { + server.listen(); + }); + + afterAll(() => { + server.close(); + }); + test('fetches all the providers options', async () => { + const { result, waitFor } = setup('/admin/providers/options', { + validate: jest.fn() + }, jest.fn(), ['autoRegister', 'defaultRole', 'ssoLockedRoles'] ); + + expect(result.current[0].isLoading).toBe(true); + expect(result.current[0].formErrors).toStrictEqual({}); + expect(result.current[0].initialData).toStrictEqual({}); + expect(result.current[0].modifiedData).toStrictEqual({}); + expect(result.current[0].showHeaderButtonLoader).toBeFalsy(); + expect(result.current[0].showHeaderLoader).toBeTruthy(); + + await waitFor(() => expect(result.current[0].isLoading).toBe(false)); + + expect(result.current[0].formErrors).toStrictEqual({}); + expect(result.current[0].initialData).toStrictEqual( + expect.objectContaining({ + autoRegister: false, + defaultRole: "1", + ssoLockedRoles: ["1","2"] + }) + ); + + expect(result.current[0].modifiedData).toStrictEqual( + expect.objectContaining({ + autoRegister: false, + defaultRole: "1", + ssoLockedRoles: ["1","2"] + }) + ); + + expect(result.current[0].showHeaderButtonLoader).toBeFalsy(); + expect(result.current[0].showHeaderLoader).toBeFalsy(); + }); + + test('submit new providers options', async () => { + const cbSucc = jest.fn() + const { result, waitFor } = setup('/admin/providers/options', {}, cbSucc, ['autoRegister', 'defaultRole', 'ssoLockedRoles'] ); + await waitFor(() => expect(result.current[0].isLoading).toBe(false)); + const e = { preventDefault: jest.fn() }; + await act(async () => { + await result.current[2].handleSubmit(e); + }); + }); +}); \ No newline at end of file diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/__snapshots__/index.test.js.snap b/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/__snapshots__/index.test.js.snap index d7de6daf8d..b99411bc26 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/__snapshots__/index.test.js.snap +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/__snapshots__/index.test.js.snap @@ -863,21 +863,21 @@ exports[`Admin | ee | SettingsPage | SSO renders and matches the snapshot 1`] = >