From 10511a740203805aacc54d9df7e4a482a934ace9 Mon Sep 17 00:00:00 2001 From: Victor Duarte Date: Sat, 24 Jul 2021 11:24:08 -0500 Subject: [PATCH] refactor(client): document and test create types utilities (#42960) Co-authored-by: Oliver Eyton-Williams --- .../src/templates/Challenges/redux/index.js | 5 ++-- .../src/templates/Introduction/redux/index.js | 3 ++- client/src/utils/create-types.test.ts | 25 +++++++++++++++++++ client/src/utils/create-types.ts | 24 +++++++++++++++--- client/utils/stateManagement.js | 9 ------- 5 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 client/src/utils/create-types.test.ts delete mode 100644 client/utils/stateManagement.js diff --git a/client/src/templates/Challenges/redux/index.js b/client/src/templates/Challenges/redux/index.js index 866b98f5dd..b63d31af36 100644 --- a/client/src/templates/Challenges/redux/index.js +++ b/client/src/templates/Challenges/redux/index.js @@ -1,7 +1,7 @@ import { createAction, handleActions } from 'redux-actions'; +import { isEmpty } from 'lodash-es'; -import { createTypes } from '../../../../utils/stateManagement'; - +import { createTypes } from '../../../utils/create-types'; import { createPoly } from '../../../../../utils/polyvinyl'; import { getLines } from '../../../../../utils/get-lines'; import completionEpic from './completion-epic'; @@ -14,7 +14,6 @@ import { createCurrentChallengeSaga } from './current-challenge-saga'; import { challengeTypes } from '../../../../utils/challengeTypes'; import { getTargetEditor } from '../utils/getTargetEditor'; import { completedChallengesSelector } from '../../../redux'; -import { isEmpty } from 'lodash-es'; export const ns = 'challenge'; export const backendNS = 'backendChallenge'; diff --git a/client/src/templates/Introduction/redux/index.js b/client/src/templates/Introduction/redux/index.js index 27cc04c0f6..31638ac43a 100644 --- a/client/src/templates/Introduction/redux/index.js +++ b/client/src/templates/Introduction/redux/index.js @@ -1,5 +1,6 @@ import { createAction, handleActions } from 'redux-actions'; -import { createTypes } from '../../../../utils/stateManagement'; + +import { createTypes } from '../../../utils/create-types'; export const ns = 'curriculumMap'; diff --git a/client/src/utils/create-types.test.ts b/client/src/utils/create-types.test.ts new file mode 100644 index 0000000000..d81290b970 --- /dev/null +++ b/client/src/utils/create-types.test.ts @@ -0,0 +1,25 @@ +import { createTypes, createAsyncTypes } from './create-types'; + +describe('Create types utility (createTypes)', () => { + it('should generate an object with action types', () => { + const types = ['lorem', 'ipsum']; + const ns = 'namespace'; + + expect(createTypes(types, ns)).toEqual({ + lorem: 'namespace.lorem', + ipsum: 'namespace.ipsum' + }); + }); +}); + +describe('Create async types utility (createAsyncTypes)', () => { + it('should generate a list of actions names', () => { + const action = 'action'; + + expect(createAsyncTypes(action)).toEqual([ + 'action', + 'actionComplete', + 'actionError' + ]); + }); +}); diff --git a/client/src/utils/create-types.ts b/client/src/utils/create-types.ts index 28e0a906d0..ff830b0aa2 100644 --- a/client/src/utils/create-types.ts +++ b/client/src/utils/create-types.ts @@ -2,10 +2,18 @@ type CreateTypesType = { [action: string]: string; }; -export function createTypes( - types: string[] = [], - ns = 'annon' -): CreateTypesType { +/** + * Creates an object in which the `keys` represent the action names and the + * `values` the action type. + * { + * action: actionType, + * ... + * } + * @param {array} types Names of the actions. + * @param {string} ns Name of the namespace. + * @returns {object} Object with action types. + */ +export function createTypes(types: string[], ns: string): CreateTypesType { return types.reduce( (types, action: string) => ({ ...types, @@ -15,6 +23,14 @@ export function createTypes( ); } +/** + * Creates an array with action names. + * - original + * - complete + * - error + * @param {string} action The name of the action. + * @returns {array} Names of action names. + */ export const createAsyncTypes = (action: string): string[] => [ `${action}`, `${action}Complete`, diff --git a/client/utils/stateManagement.js b/client/utils/stateManagement.js deleted file mode 100644 index 98705132e5..0000000000 --- a/client/utils/stateManagement.js +++ /dev/null @@ -1,9 +0,0 @@ -export function createTypes(types = [], ns = 'annon') { - return types.reduce( - (types, action) => ({ - ...types, - [action]: `${ns}.${action}` - }), - {} - ); -}