From 1602886debae8088f65f0eed4548a992fc1c8de9 Mon Sep 17 00:00:00 2001 From: soupette Date: Tue, 4 Aug 2020 16:27:07 +0200 Subject: [PATCH] Add tests Signed-off-by: soupette --- .../admin/src/containers/Providers/index.js | 8 +- .../admin/src/containers/Providers/reducer.js | 25 ++---- .../Providers/tests/reducer.test.js | 86 +++++++++++++++++++ .../Providers/utils/createProvidersArray.js | 17 ++++ .../utils/tests/createProvidersArray.test.js | 32 +++++++ 5 files changed, 148 insertions(+), 20 deletions(-) create mode 100644 packages/strapi-plugin-users-permissions/admin/src/containers/Providers/tests/reducer.test.js create mode 100644 packages/strapi-plugin-users-permissions/admin/src/containers/Providers/utils/createProvidersArray.js create mode 100644 packages/strapi-plugin-users-permissions/admin/src/containers/Providers/utils/tests/createProvidersArray.test.js diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/index.js index c055baa22d..94c17b1779 100644 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/index.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/index.js @@ -8,6 +8,7 @@ import pluginPermissions from '../../permissions'; import { getRequestURL, getTrad } from '../../utils'; import ListBaselineAlignment from '../../components/ListBaselineAlignment'; import ListRow from '../../components/ListRow'; +import createProvidersArray from './utils/createProvidersArray'; import reducer, { initialState } from './reducer'; const ProvidersPage = () => { @@ -20,7 +21,8 @@ const ProvidersPage = () => { isLoading: isLoadingForPermissions, allowedActions: { canUpdate }, } = useUserPermissions(updatePermissions); - const [{ isLoading, providers }, dispatch] = useReducer(reducer, initialState); + const [{ isLoading, modifiedData }, dispatch] = useReducer(reducer, initialState); + const providers = useMemo(() => createProvidersArray(modifiedData), [modifiedData]); const enabledProvidersCount = useMemo( () => providers.filter(provider => provider.enabled).length, [providers] @@ -59,12 +61,12 @@ const ProvidersPage = () => { const data = await request(getRequestURL('providers'), { method: 'GET' }); - console.log({ data }); - dispatch({ type: 'GET_DATA_SUCCEEDED', data, }); + + console.log({ data }); } catch (err) { dispatch({ type: 'GET_DATA_ERROR', diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/reducer.js b/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/reducer.js index b3ab611516..4079c56925 100644 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/reducer.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/reducer.js @@ -3,8 +3,8 @@ import { sortBy } from 'lodash'; const initialState = { isLoading: true, - data: {}, - providers: [], + initialData: {}, + modifiedData: {}, }; const reducer = (state, action) => @@ -13,32 +13,23 @@ const reducer = (state, action) => switch (action.type) { case 'GET_DATA': { draftState.isLoading = true; + draftState.initialData = {}; + draftState.modifiedData = {}; + break; } case 'GET_DATA_SUCCEEDED': { draftState.isLoading = false; - draftState.data = action.data; - draftState.providers = sortBy( - Object.keys(action.data).reduce((acc, current) => { - const { icon: iconName, enabled } = action.data[current]; - const icon = iconName === 'envelope' ? ['fas', 'envelope'] : ['fab', iconName]; - - acc.push({ name: current, icon, enabled }); - - return acc; - }, []), - 'name' - ); + draftState.initialData = action.data; + draftState.modifiedData = action.data; break; } case 'GET_DATA_ERROR': { - drafState.isLoading = true; + draftState.isLoading = true; break; } - case 'RESET_PROPS': - return initialState; default: { return draftState; } diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/tests/reducer.test.js b/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/tests/reducer.test.js new file mode 100644 index 0000000000..68597b09d3 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/tests/reducer.test.js @@ -0,0 +1,86 @@ +import produce from 'immer'; +import reducer from '../reducer'; + +describe('USERS PERMISSIONS | CONTAINERS | Providers | reducer', () => { + let state; + + beforeEach(() => { + state = { + isLoading: true, + initialData: {}, + modifiedData: {}, + }; + }); + + describe('DEFAULT_ACTION', () => { + it('should return the state', () => { + const expected = state; + + expect(reducer(state, {})).toEqual(expected); + }); + }); + + describe('GET_DATA', () => { + it('should set the isLoading key to true', () => { + const action = { + type: 'GET_DATA', + }; + + state.isLoading = false; + state.initialData = true; + state.modifiedData = true; + + const expected = produce(state, draft => { + draft.isLoading = true; + draft.initialData = {}; + draft.modifiedData = {}; + }); + + expect(reducer(state, action)).toEqual(expected); + }); + }); + + describe('GET_DATA_SUCCEEDED', () => { + it('should set the data correctly', () => { + const data = { + email: { enabled: true, icon: 'envelope' }, + discord: { + callback: '/auth/discord/callback', + enabled: false, + icon: 'discord', + key: '', + scope: ['identify', 'email'], + secret: '', + }, + }; + const action = { + type: 'GET_DATA_SUCCEEDED', + data, + }; + + const expected = produce(state, draft => { + draft.isLoading = false; + draft.initialData = data; + draft.modifiedData = data; + }); + + expect(reducer(state, action)).toEqual(expected); + }); + }); + + describe('GET_DATA_ERROR', () => { + it('should set the isLoading key to false', () => { + const action = { + type: 'GET_DATA_ERROR', + }; + + state.isLoading = false; + + const expected = produce(state, draft => { + draft.isLoading = true; + }); + + expect(reducer(state, action)).toEqual(expected); + }); + }); +}); diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/utils/createProvidersArray.js b/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/utils/createProvidersArray.js new file mode 100644 index 0000000000..4d210ab3b3 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/utils/createProvidersArray.js @@ -0,0 +1,17 @@ +import { sortBy } from 'lodash'; + +const createProvidersArray = data => { + return sortBy( + Object.keys(data).reduce((acc, current) => { + const { icon: iconName, enabled } = data[current]; + const icon = iconName === 'envelope' ? ['fas', 'envelope'] : ['fab', iconName]; + + acc.push({ name: current, icon, enabled }); + + return acc; + }, []), + 'name' + ); +}; + +export default createProvidersArray; diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/utils/tests/createProvidersArray.test.js b/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/utils/tests/createProvidersArray.test.js new file mode 100644 index 0000000000..88b476e222 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/Providers/utils/tests/createProvidersArray.test.js @@ -0,0 +1,32 @@ +import createProvidersArray from '../createProvidersArray'; + +describe('USERS PERMISSIONS | CONTAINERS | Providers | utils | createProvidersArray', () => { + it('should format the data correctly', () => { + const data = { + email: { enabled: true, icon: 'envelope' }, + discord: { + callback: '/auth/discord/callback', + enabled: false, + icon: 'discord', + key: '', + scope: ['identify', 'email'], + secret: '', + }, + }; + + const expected = [ + { + name: 'discord', + icon: ['fab', 'discord'], + enabled: false, + }, + { + name: 'email', + icon: ['fas', 'envelope'], + enabled: true, + }, + ]; + + expect(createProvidersArray(data)).toEqual(expected); + }); +});