From 7c88616ba83df53d1b12ad7df13f330ab4a9b8bf Mon Sep 17 00:00:00 2001 From: lotte <lotte_hofstede@hotmail.com> Date: Mon, 25 Nov 2019 12:36:22 +0100 Subject: [PATCH] name variant reducer tests --- .../name-variant.reducer.spec.ts | 80 +++++++++++++++++++ .../name-variant.reducer.ts | 9 ++- 2 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/name-variant.reducer.spec.ts diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/name-variant.reducer.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/name-variant.reducer.spec.ts new file mode 100644 index 0000000000..0f8f08fdd2 --- /dev/null +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/name-variant.reducer.spec.ts @@ -0,0 +1,80 @@ +import * as deepFreeze from 'deep-freeze'; +import { NameVariantAction, RemoveNameVariantAction, SetNameVariantAction } from './name-variant.actions'; +import { Action } from '@ngrx/store'; +import { nameVariantReducer } from './name-variant.reducer'; + +class NullAction implements Action { + type = null; +} + +const listID1 = 'dbfb81de-2930-4de6-ba2e-ea21c8534ee9'; +const listID2 = 'd7f2c48d-e1e2-4996-ab8d-e271cabec78a'; +const itemID1 = 'd1c81d4f-6b05-4844-986b-372d2e39c6aa'; +const itemID2 = 'fe4ca421-d897-417f-9436-9724262d5c69'; +const variantList1Item1 = 'Test Name Variant 1'; +const variantList1Item1Update = 'Test Name Variant 1 Update'; +const variantList1Item2 = 'Test Name Variant 2'; + +describe('nameVariantReducer', () => { + + it('should return the current state when no valid actions have been made', () => { + const state = { [listID1]: { [itemID1]: variantList1Item1 } }; + const action = new NullAction() as any; + const newState = nameVariantReducer(state, action); + + expect(newState).toEqual(state); + }); + + it('should start with an empty object', () => { + const state = Object.create({}); + const action = new NullAction() as any; + const initialState = nameVariantReducer(undefined, action); + + // The search filter starts collapsed + expect(initialState).toEqual(state); + }); + + it('should set add a new name variant in response to the SET_NAME_VARIANT' + + ' action with a combination of list and item ID that does not exist yet', () => { + const state = {}; + state[listID1] = { [itemID1]: variantList1Item1 }; + const action = new SetNameVariantAction(listID1, itemID2, variantList1Item2); + const newState = nameVariantReducer(state, action); + + expect(newState[listID1][itemID1]).toEqual(variantList1Item1); + expect(newState[listID1][itemID2]).toEqual(variantList1Item2); + }); + + it('should set a name variant in response to the SET_NAME_VARIANT' + + ' action with a combination of list and item ID that already exists', () => { + const state = {}; + state[listID1] = { [itemID1]: variantList1Item1 }; + const action = new SetNameVariantAction(listID1, itemID1, variantList1Item1Update); + const newState = nameVariantReducer(state, action); + + expect(newState[listID1][itemID1]).toEqual(variantList1Item1Update); + }); + + it('should remove a name variant in response to the REMOVE_NAME_VARIANT' + + ' action with a combination of list and item ID that already exists', () => { + const state = {}; + state[listID1] = { [itemID1]: variantList1Item1 }; + expect(state[listID1][itemID1]).toEqual(variantList1Item1); + + const action = new RemoveNameVariantAction(listID1, itemID1); + const newState = nameVariantReducer(state, action); + + expect(newState[listID1][itemID1]).toBeUndefined(); + }); + + it('should do nothing in response to the REMOVE_NAME_VARIANT' + + ' action with a combination of list and item ID that does not exists', () => { + const state = {}; + state[listID1] = { [itemID1]: variantList1Item1 }; + + const action = new RemoveNameVariantAction(listID2, itemID1); + const newState = nameVariantReducer(state, action); + + expect(newState).toEqual(state); + }); +}); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/name-variant.reducer.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/name-variant.reducer.ts index dc35dab291..9e6ade440c 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/name-variant.reducer.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/name-variant.reducer.ts @@ -3,6 +3,7 @@ */ import { NameVariantAction, NameVariantActionTypes, SetNameVariantAction } from './name-variant.actions'; +import { hasValue } from '../../../../empty.util'; export type NameVariantListsState = { [listID: string]: NameVariantListState; @@ -30,9 +31,11 @@ export function nameVariantReducer(state: NameVariantListsState = {}, action: Na return Object.assign({}, state, { [action.payload.listID]: newListState }); } case NameVariantActionTypes.REMOVE_NAME_VARIANT: { - const listState: NameVariantListState = state[action.payload.listID] || {}; - const newListState = setNameVariant(listState, action.payload.itemID, undefined); - return Object.assign({}, state, { [action.payload.listID]: newListState }); + const listState: NameVariantListState = state[action.payload.listID]; + if (hasValue(listState) && hasValue(listState[action.payload.itemID])) { + const newListState = setNameVariant(listState, action.payload.itemID, undefined); + return Object.assign({}, state, { [action.payload.listID]: newListState }); + } } default: { return state; -- GitLab