From 1d3e3f8c9a4d84bdcc7b48c350818ba0464763d6 Mon Sep 17 00:00:00 2001 From: Tifenn Guillas <tifenn.guillas@gmail.com> Date: Thu, 2 Sep 2021 13:24:11 +0200 Subject: [PATCH] WIP: Testing on search effects --- .../store/effects/search.effects.spec.ts | 327 ++++++++++++++++-- .../instance/store/effects/search.effects.ts | 3 +- 2 files changed, 290 insertions(+), 40 deletions(-) diff --git a/client/src/app/instance/store/effects/search.effects.spec.ts b/client/src/app/instance/store/effects/search.effects.spec.ts index 451caf9a..f9a5b3e6 100644 --- a/client/src/app/instance/store/effects/search.effects.spec.ts +++ b/client/src/app/instance/store/effects/search.effects.spec.ts @@ -19,6 +19,9 @@ import * as outputFamilyActions from '../../../metamodel/actions/output-family.a import * as outputCategoryActions from '../../../metamodel/actions/output-category.actions'; import * as attributeSelector from '../../../metamodel/selectors/attribute.selector'; import * as coneSearchSelector from '../selectors/cone-search.selector'; +import { RendererConfig } from '../../../metamodel/models/renderers'; +import { Option } from '../../../metamodel/models'; +import * as coneSearchActions from '../actions/cone-search.actions'; describe('SearchEffects', () => { let actions = new Observable(); @@ -229,46 +232,294 @@ describe('SearchEffects', () => { expect(effects.loadDefaultFormParameters$).toBeObservable(expected); }); - // it('should dispatch the registerFail action on failure', () => { - // const action = sampActions.register(); - // const error = new Error(); - // const outcome = sampActions.registerFail(); - // - // actions = hot('-a', { a: action }); - // const response = cold('-#|', {}, error); - // const expected = cold('--b', { b: outcome }); - // sampService.register = jest.fn(() => response); - // - // expect(effects.register$).toBeObservable(expected); - // }); + it('should dispatch a bunch of actions to update search', () => { + mockSearchSelectorSelectPristine = store.overrideSelector( + searchSelector.selectPristine, true + ); + mockSearchSelectorSelectCurrentDataset = store.overrideSelector( + searchSelector.selectCurrentDataset, 'myDataset' + ); + + const action = searchActions.loadDefaultFormParameters(); + actions = hot('-a', { a: action }); + + const defaultCriteriaList = []; + const defaultConeSearch = null; + const defaultOutputList = []; + const expected = cold('-(bcde)', { + b: searchActions.updateCriteriaList({ criteriaList: defaultCriteriaList }), + c: coneSearchActions.addConeSearch({ coneSearch: defaultConeSearch }), + d: searchActions.updateOutputList({ outputList: defaultOutputList }), + e: searchActions.markAsDirty() + }); + + expect(effects.loadDefaultFormParameters$).toBeObservable(expected); + }); + + it('should set a default criteria list', () => { + mockSearchSelectorSelectPristine = store.overrideSelector( + searchSelector.selectPristine, true + ); + mockSearchSelectorSelectCurrentDataset = store.overrideSelector( + searchSelector.selectCurrentDataset, 'myDataset' + ); + mockAttributeSelectorSelectAllAttributes = store.overrideSelector( + attributeSelector.selectAllAttributes, [ + { + id: 1, + name: 'att1', + label: 'attribute1', + form_label: 'Attribute 1', + output_display: 1, + criteria_display: 1, + search_type: 'field', + operator: 'eq', + type: 'string', + min: 'one', + display_detail: 1, + id_criteria_family: 1, + id_output_category: 1 + }, + { + id: 2, + name: 'att2', + label: 'attribute2', + form_label: 'Attribute 2', + output_display: 1, + criteria_display: 1, + search_type: 'field', + operator: 'eq', + type: 'string', + min: 'two', + display_detail: 1, + id_criteria_family: 2, + id_output_category: 1 + } + ] + ); + + const action = searchActions.loadDefaultFormParameters(); + actions = hot('-a', { a: action }); + + const defaultCriteriaList = [ + {'id':1,'type':'field','operator':'eq','value':'one'}, + {'id':2,'type':'field','operator':'eq','value':'two'} + ]; + const defaultConeSearch = null; + const defaultOutputList = []; + const expected = cold('-(bcde)', { + b: searchActions.updateCriteriaList({ criteriaList: defaultCriteriaList }), + c: coneSearchActions.addConeSearch({ coneSearch: defaultConeSearch }), + d: searchActions.updateOutputList({ outputList: defaultOutputList }), + e: searchActions.markAsDirty() + }); + + expect(effects.loadDefaultFormParameters$).toBeObservable(expected); + }); + + it('should set criteria list from URL', () => { + mockSearchSelectorSelectPristine = store.overrideSelector( + searchSelector.selectPristine, true + ); + mockSearchSelectorSelectCurrentDataset = store.overrideSelector( + searchSelector.selectCurrentDataset, 'myDataset' + ); + mockAttributeSelectorSelectAllAttributes = store.overrideSelector( + attributeSelector.selectAllAttributes, [ + { + id: 1, + name: 'att1', + label: 'attribute1', + form_label: 'Attribute 1', + output_display: 1, + criteria_display: 1, + search_type: 'field', + operator: 'eq', + type: 'string', + min: 'one', + display_detail: 1, + id_criteria_family: 1, + id_output_category: 1 + }, + { + id: 2, + name: 'att2', + label: 'attribute2', + form_label: 'Attribute 2', + output_display: 1, + criteria_display: 1, + search_type: 'field', + operator: 'eq', + type: 'string', + min: 'two', + display_detail: 1, + id_criteria_family: 2, + id_output_category: 1 + } + ] + ); + mockSearchSelectorSelectCriteriaListByRoute = store.overrideSelector( + searchSelector.selectCriteriaListByRoute, '1::eq::un;2::eq::deux' + ); + + const action = searchActions.loadDefaultFormParameters(); + actions = hot('-a', { a: action }); + + const criteriaList = [ + {'id':1,'type':'field','operator':'eq','value':'un'}, + {'id':2,'type':'field','operator':'eq','value':'deux'} + ]; + const defaultConeSearch = null; + const defaultOutputList = []; + const expected = cold('-(bcde)', { + b: searchActions.updateCriteriaList({ criteriaList: criteriaList }), + c: coneSearchActions.addConeSearch({ coneSearch: defaultConeSearch }), + d: searchActions.updateOutputList({ outputList: defaultOutputList }), + e: searchActions.markAsDirty() + }); + + expect(effects.loadDefaultFormParameters$).toBeObservable(expected); + }); + + it('should set cone search from URL', () => { + mockSearchSelectorSelectPristine = store.overrideSelector( + searchSelector.selectPristine, true + ); + mockSearchSelectorSelectCurrentDataset = store.overrideSelector( + searchSelector.selectCurrentDataset, 'myDataset' + ); + mockConeSearchSelectorSelectConeSearchByRoute = store.overrideSelector( + coneSearchSelector.selectConeSearchByRoute, '1:2:3' + ); + + const action = searchActions.loadDefaultFormParameters(); + actions = hot('-a', { a: action }); + + const defaultCriteriaList = []; + const coneSearch = { ra: 1, dec: 2, radius: 3 }; + const defaultOutputList = []; + const expected = cold('-(bcde)', { + b: searchActions.updateCriteriaList({ criteriaList: defaultCriteriaList }), + c: coneSearchActions.addConeSearch({ coneSearch: coneSearch }), + d: searchActions.updateOutputList({ outputList: defaultOutputList }), + e: searchActions.markAsDirty() + }); + + expect(effects.loadDefaultFormParameters$).toBeObservable(expected); + }); + + it('should set a default output list', () => { + mockSearchSelectorSelectPristine = store.overrideSelector( + searchSelector.selectPristine, true + ); + mockSearchSelectorSelectCurrentDataset = store.overrideSelector( + searchSelector.selectCurrentDataset, 'myDataset' + ); + mockAttributeSelectorSelectAllAttributes = store.overrideSelector( + attributeSelector.selectAllAttributes, [ + { + id: 1, + name: 'att1', + label: 'attribute1', + form_label: 'Attribute 1', + output_display: 1, + criteria_display: 1, + search_type: 'field', + operator: 'eq', + type: 'string', + display_detail: 1, + selected: true, + id_criteria_family: 1, + id_output_category: 1 + }, + { + id: 2, + name: 'att2', + label: 'attribute2', + form_label: 'Attribute 2', + output_display: 1, + criteria_display: 1, + search_type: 'field', + operator: 'eq', + type: 'string', + display_detail: 1, + selected: true, + id_criteria_family: 2, + id_output_category: 1 + } + ] + ); + + const action = searchActions.loadDefaultFormParameters(); + actions = hot('-a', { a: action }); + + const defaultCriteriaList = []; + const defaultConeSearch = null; + const defaultOutputList = [1, 2]; + const expected = cold('-(bcde)', { + b: searchActions.updateCriteriaList({ criteriaList: defaultCriteriaList }), + c: coneSearchActions.addConeSearch({ coneSearch: defaultConeSearch }), + d: searchActions.updateOutputList({ outputList: defaultOutputList }), + e: searchActions.markAsDirty() + }); + + expect(effects.loadDefaultFormParameters$).toBeObservable(expected); + }); + + it('should set output list from URL', () => { + mockSearchSelectorSelectPristine = store.overrideSelector( + searchSelector.selectPristine, true + ); + mockSearchSelectorSelectCurrentDataset = store.overrideSelector( + searchSelector.selectCurrentDataset, 'myDataset' + ); + mockSearchSelectorSelectOutputListByRoute = store.overrideSelector( + searchSelector.selectOutputListByRoute, '1;2;3' + ); + + const action = searchActions.loadDefaultFormParameters(); + actions = hot('-a', { a: action }); + + const defaultCriteriaList = []; + const defaultConeSearch = null; + const outputList = [1, 2, 3]; + const expected = cold('-(bcde)', { + b: searchActions.updateCriteriaList({ criteriaList: defaultCriteriaList }), + c: coneSearchActions.addConeSearch({ coneSearch: defaultConeSearch }), + d: searchActions.updateOutputList({ outputList: outputList }), + e: searchActions.markAsDirty() + }); + + expect(effects.loadDefaultFormParameters$).toBeObservable(expected); + }); }); - // describe('retrieveDataLength$ effect', () => { - // it('should dispatch the registerSuccess action on success', () => { - // const action = sampActions.register(); - // const outcome = sampActions.registerSuccess(); - // - // actions = hot('-a', { a: action }); - // const response = cold('-a|', { a: action }); - // const expected = cold('--b', { b: outcome }); - // sampService.register = jest.fn(() => response); - // - // expect(effects.register$).toBeObservable(expected); - // }); - // - // it('should dispatch the registerFail action on failure', () => { - // const action = sampActions.register(); - // const error = new Error(); - // const outcome = sampActions.registerFail(); - // - // actions = hot('-a', { a: action }); - // const response = cold('-#|', {}, error); - // const expected = cold('--b', { b: outcome }); - // sampService.register = jest.fn(() => response); - // - // expect(effects.register$).toBeObservable(expected); - // }); - // }); + describe('retrieveDataLength$ effect', () => { + // it('should dispatch the retrieveDataLengthSuccess action on success', () => { + // const action = searchActions.retrieveDataLength(); + // const outcome = searchActions.retrieveDataLengthSuccess({ length: 1 }); + // + // actions = hot('-a', { a: action }); + // const response = cold('-a|', { a: action }); + // const expected = cold('--b', { b: outcome }); + // searchService.retrieveDataLength = jest.fn(() => response); + // + // expect(effects.retrieveDataLength$).toBeObservable(expected); + // }); + + // it('should dispatch the registerFail action on failure', () => { + // const action = searchActions.retrieveDataLength(); + // const error = new Error(); + // const outcome = searchActions.retrieveDataLengthFail(); + // + // actions = hot('-a', { a: action }); + // const response = cold('-#|', {}, error); + // const expected = cold('--b', { b: outcome }); + // searchService.retrieveDataLength = jest.fn(() => response); + // + // expect(effects.retrieveDataLength$).toBeObservable(expected); + // }); + }); describe('retrieveDataLengthFail$ effect', () => { it('should not dispatch', () => { diff --git a/client/src/app/instance/store/effects/search.effects.ts b/client/src/app/instance/store/effects/search.effects.ts index b1f6e8d2..42fe0926 100644 --- a/client/src/app/instance/store/effects/search.effects.ts +++ b/client/src/app/instance/store/effects/search.effects.ts @@ -49,8 +49,7 @@ export class SearchEffects { ]), mergeMap(([action, datasetName, currentDataset, pristine, steps]) => { // User has changed dataset: reload initial state + init search - // if (datasetName && currentDataset && datasetName !== currentDataset) { - if (datasetName !== currentDataset) { + if (datasetName && currentDataset && datasetName !== currentDataset) { return of(searchActions.restartSearch()); } -- GitLab