From ce0284c7c8c7d3297d4299520913b94bf4b37c13 Mon Sep 17 00:00:00 2001
From: Tifenn Guillas <tifenn.guillas@gmail.com>
Date: Tue, 21 Sep 2021 16:17:16 +0200
Subject: [PATCH] Tests on search multiple => DONE

---
 .../effects/search-multiple.effects.spec.ts   | 679 +++++++-----------
 1 file changed, 277 insertions(+), 402 deletions(-)

diff --git a/client/src/app/instance/store/effects/search-multiple.effects.spec.ts b/client/src/app/instance/store/effects/search-multiple.effects.spec.ts
index 320dd803..ed415dad 100644
--- a/client/src/app/instance/store/effects/search-multiple.effects.spec.ts
+++ b/client/src/app/instance/store/effects/search-multiple.effects.spec.ts
@@ -22,7 +22,7 @@ import * as outputCategoryActions from '../../../metamodel/actions/output-catego
 import * as attributeSelector from '../../../metamodel/selectors/attribute.selector';
 import * as coneSearchSelector from '../selectors/cone-search.selector';
 import * as coneSearchActions from '../actions/cone-search.actions';
-import { Criterion, PaginationOrder } from '../models';
+import { ConeSearch, Criterion, PaginationOrder, SearchMultipleDatasetLength } from '../models';
 import * as searchMultipleSelector from '../selectors/search-multiple.selector';
 import * as instanceSelector from '../../../metamodel/selectors/instance.selector';
 import * as searchMultipleActions from '../actions/search-multiple.actions';
@@ -43,7 +43,9 @@ describe('SearchMultipleEffects', () => {
     };
     let mockSearchMultipleSelectorSelectPristine;
     let mockSearchMultipleSelectorSelectSelectedDatasetsByRoute;
+    let mockSearchMultipleSelectorSelectSelectedDatasets;
     let mockConeSearchSelectorSelectConeSearchByRoute;
+    let mockConeSearchSelectorSelectConeSearch;
     let mockInstanceSelectorSelectorSelectInstanceByRouteName;
     let mockDatasetSelectorSelectAllConeSearchDatasets;
 
@@ -68,44 +70,15 @@ describe('SearchMultipleEffects', () => {
         mockSearchMultipleSelectorSelectSelectedDatasetsByRoute = store.overrideSelector(
             searchMultipleSelector.selectSelectedDatasetsByRoute,''
         );
+        mockSearchMultipleSelectorSelectSelectedDatasets = store.overrideSelector(
+            searchMultipleSelector.selectSelectedDatasets, []
+        );
         mockConeSearchSelectorSelectConeSearchByRoute = store.overrideSelector(
             coneSearchSelector.selectConeSearchByRoute,''
         );
-        // mockInstanceSelectorSelectorSelectInstanceByRouteName = store.overrideSelector(
-        //     instanceSelector.selectInstanceByRouteName,{
-        //         name: 'myInstance',
-        //         label: 'My Instance',
-        //         data_path: 'data/path',
-        //         config: {
-        //             design: {
-        //                 design_color: 'green',
-        //                 design_background_color: 'darker green',
-        //                 design_logo: 'path/to/logo',
-        //                 design_favicon: 'path/to/favicon'
-        //             },
-        //             home: {
-        //                 home_component: 'HomeComponent',
-        //                 home_config: {
-        //                     home_component_text: 'Description',
-        //                     home_component_logo: 'path/to/logo'
-        //                 }
-        //             },
-        //             search: {
-        //                 search_by_criteria_allowed: true,
-        //                 search_by_criteria_label: 'Search',
-        //                 search_multiple_allowed: true,
-        //                 search_multiple_label: 'Search multiple',
-        //                 search_multiple_all_datasets_selected: true
-        //             },
-        //             documentation: {
-        //                 documentation_allowed: true,
-        //                 documentation_label: 'Documentation'
-        //             }
-        //         },
-        //         nb_dataset_families: 1,
-        //         nb_datasets: 2
-        //     }
-        // );
+        mockConeSearchSelectorSelectConeSearch = store.overrideSelector(
+            coneSearchSelector.selectConeSearch,undefined
+        );
         mockInstanceSelectorSelectorSelectInstanceByRouteName = store.overrideSelector(
             instanceSelector.selectInstanceByRouteName,undefined
         );
@@ -118,7 +91,7 @@ describe('SearchMultipleEffects', () => {
         expect(effects).toBeTruthy();
     });
 
-    describe.only('initSearch$ effect', () => {
+    describe('initSearch$ effect', () => {
         it('should dispatch the restartSearch action when dataset or cone search changed', () => {
             mockSearchMultipleSelectorSelectPristine = store.overrideSelector(
                 searchMultipleSelector.selectPristine,false
@@ -152,30 +125,204 @@ describe('SearchMultipleEffects', () => {
             expect(effects.initSearch$).toBeObservable(expected);
         });
 
-    //     it('should dispatch a bunch of actions when a dataset is selected or a page is reloaded', () => {
-    //         mockDatasetSelectorSelectDatasetNameByRoute = store.overrideSelector(
-    //             datasetSelector.selectDatasetNameByRoute, 'myDatasetName'
-    //         );
-    //         mockSearchSelectorSelectPristine = store.overrideSelector(
-    //             searchSelector.selectPristine,true
-    //         );
-    //         mockSearchSelectorSelectCurrentDataset = store.overrideSelector(
-    //             searchSelector.selectCurrentDataset,'myDatasetName'
-    //         );
-    //
-    //         const action = searchActions.initSearch();
-    //         actions = hot('-a', { a: action });
-    //         const expected = cold('-(bcdef)', {
-    //             b: searchActions.changeCurrentDataset({ currentDataset: 'myDatasetName' }),
-    //             c: attributeActions.loadAttributeList(),
-    //             d: criteriaFamilyActions.loadCriteriaFamilyList(),
-    //             e: outputFamilyActions.loadOutputFamilyList(),
-    //             f: outputCategoryActions.loadOutputCategoryList()
-    //         });
-    //
-    //         expect(effects.initSearch$).toBeObservable(expected);
-    //     });
-    //
+        it('should dispatch a bunch of actions when page is reloaded with cone search in it', () => {
+            mockSearchMultipleSelectorSelectPristine = store.overrideSelector(
+                searchMultipleSelector.selectPristine,true
+            );
+            mockConeSearchSelectorSelectConeSearchByRoute = store.overrideSelector(
+                coneSearchSelector.selectConeSearchByRoute,'1:2:3'
+            );
+            mockSearchMultipleSelectorSelectSelectedDatasetsByRoute = store.overrideSelector(
+                searchMultipleSelector.selectSelectedDatasetsByRoute,''
+            );
+            mockInstanceSelectorSelectorSelectInstanceByRouteName = store.overrideSelector(
+                instanceSelector.selectInstanceByRouteName, {
+                    name: 'myInstance',
+                    label: 'My Instance',
+                    data_path: 'data/path',
+                    config: {
+                        design: {
+                            design_color: 'green',
+                            design_background_color: 'darker green',
+                            design_logo: 'path/to/logo',
+                            design_favicon: 'path/to/favicon'
+                        },
+                        home: {
+                            home_component: 'HomeComponent',
+                            home_config: {
+                                home_component_text: 'Description',
+                                home_component_logo: 'path/to/logo'
+                            }
+                        },
+                        search: {
+                            search_by_criteria_allowed: true,
+                            search_by_criteria_label: 'Search',
+                            search_multiple_allowed: true,
+                            search_multiple_label: 'Search multiple',
+                            search_multiple_all_datasets_selected: false
+                        },
+                        documentation: {
+                            documentation_allowed: true,
+                            documentation_label: 'Documentation'
+                        }
+                    },
+                    nb_dataset_families: 1,
+                    nb_datasets: 2
+                }
+            );
+
+            const coneSearch: ConeSearch = { ra: 1, dec: 2, radius: 3 };
+
+            const action = searchMultipleActions.initSearch();
+            actions = hot('-a', { a: action });
+            const expected = cold('-(bc)', {
+                b: searchMultipleActions.markAsDirty(),
+                c: coneSearchActions.addConeSearch({ coneSearch })
+            });
+
+            expect(effects.initSearch$).toBeObservable(expected);
+        });
+
+        it('should dispatch a bunch of actions when page is reloaded with selected datasets in it', () => {
+            mockSearchMultipleSelectorSelectPristine = store.overrideSelector(
+                searchMultipleSelector.selectPristine,true
+            );
+            mockConeSearchSelectorSelectConeSearchByRoute = store.overrideSelector(
+                coneSearchSelector.selectConeSearchByRoute,''
+            );
+            mockSearchMultipleSelectorSelectSelectedDatasetsByRoute = store.overrideSelector(
+                searchMultipleSelector.selectSelectedDatasetsByRoute,'d1;d2'
+            );
+
+            const selectedDatasets: string[] = ['d1', 'd2'];
+
+            const action = searchMultipleActions.initSearch();
+            actions = hot('-a', { a: action });
+            const expected = cold('-(bcd)', {
+                b: searchMultipleActions.markAsDirty(),
+                c: searchMultipleActions.updateSelectedDatasets({ selectedDatasets }),
+                d: searchMultipleActions.checkDatasets()
+            });
+
+            expect(effects.initSearch$).toBeObservable(expected);
+        });
+
+        it('should dispatch a bunch of actions when page is reloaded with default selected datasets', () => {
+            mockSearchMultipleSelectorSelectPristine = store.overrideSelector(
+                searchMultipleSelector.selectPristine,true
+            );
+            mockConeSearchSelectorSelectConeSearchByRoute = store.overrideSelector(
+                coneSearchSelector.selectConeSearchByRoute,''
+            );
+            mockSearchMultipleSelectorSelectSelectedDatasetsByRoute = store.overrideSelector(
+                searchMultipleSelector.selectSelectedDatasetsByRoute,''
+            );
+            mockInstanceSelectorSelectorSelectInstanceByRouteName = store.overrideSelector(
+                instanceSelector.selectInstanceByRouteName, {
+                    name: 'myInstance',
+                    label: 'My Instance',
+                    data_path: 'data/path',
+                    config: {
+                        design: {
+                            design_color: 'green',
+                            design_background_color: 'darker green',
+                            design_logo: 'path/to/logo',
+                            design_favicon: 'path/to/favicon'
+                        },
+                        home: {
+                            home_component: 'HomeComponent',
+                            home_config: {
+                                home_component_text: 'Description',
+                                home_component_logo: 'path/to/logo'
+                            }
+                        },
+                        search: {
+                            search_by_criteria_allowed: true,
+                            search_by_criteria_label: 'Search',
+                            search_multiple_allowed: true,
+                            search_multiple_label: 'Search multiple',
+                            search_multiple_all_datasets_selected: true
+                        },
+                        documentation: {
+                            documentation_allowed: true,
+                            documentation_label: 'Documentation'
+                        }
+                    },
+                    nb_dataset_families: 1,
+                    nb_datasets: 2
+                }
+            );
+            mockDatasetSelectorSelectAllConeSearchDatasets = store.overrideSelector(
+                datasetSelector.selectAllConeSearchDatasets, [
+                    {
+                        name: 'myDataset',
+                        table_ref: '',
+                        label: '',
+                        description: '',
+                        display: 1,
+                        data_path: '',
+                        survey_name: '',
+                        id_dataset_family: 1,
+                        public: true,
+                        full_data_path: '',
+                        config: {
+                            images: [],
+                            survey: {
+                                survey_enabled: true,
+                                survey_label: ''
+                            },
+                            cone_search: {
+                                cone_search_enabled: true,
+                                cone_search_opened: true,
+                                cone_search_column_ra: 1,
+                                cone_search_column_dec: 2,
+                                cone_search_plot_enabled: true,
+                                cone_search_sdss_enabled: true,
+                                cone_search_sdss_display: 1,
+                                cone_search_background: []
+                            },
+                            download: {
+                                download_enabled: true,
+                                download_opened: true,
+                                download_csv: true,
+                                download_ascii: true,
+                                download_vo: true,
+                                download_archive: true
+                            },
+                            summary: {
+                                summary_enabled: true,
+                                summary_opened: true
+                            },
+                            server_link: {
+                                server_link_enabled: true,
+                                server_link_opened: true
+                            },
+                            samp: {
+                                samp_enabled: true,
+                                samp_opened: true
+                            },
+                            datatable: {
+                                datatable_enabled: true,
+                                datatable_opened: true,
+                                datatable_selectable_rows: true
+                            }
+                        }
+                    }
+                ]
+            );
+
+            const selectedDatasets: string[] = ['myDataset'];
+
+            const action = searchMultipleActions.initSearch();
+            actions = hot('-a', { a: action });
+            const expected = cold('-(bc)', {
+                b: searchMultipleActions.markAsDirty(),
+                c: searchMultipleActions.updateSelectedDatasets({ selectedDatasets })
+            });
+
+            expect(effects.initSearch$).toBeObservable(expected);
+        });
+
     //     it('should dispatch a bunch of actions when a dataset is selected or a page is reloaded with steps checked', () => {
     //         mockDatasetSelectorSelectDatasetNameByRoute = store.overrideSelector(
     //             datasetSelector.selectDatasetNameByRoute, 'myDatasetName'
@@ -250,348 +397,76 @@ describe('SearchMultipleEffects', () => {
         });
     });
 
-    // describe('loadDefaultFormParameters$ effect', () => {
-    //     it('should not dispatch action if params already loaded', () => {
-    //         mockSearchSelectorSelectPristine = store.overrideSelector(
-    //             searchSelector.selectPristine, false
-    //         );
-    //         mockSearchSelectorSelectCurrentDataset = store.overrideSelector(
-    //             searchSelector.selectCurrentDataset, 'myDataset'
-    //         );
-    //
-    //         const action = searchActions.loadDefaultFormParameters();
-    //         const outcome = { type: '[No Action] Load Default Form Parameters' };
-    //
-    //         actions = hot('-a', { a: action });
-    //         const expected = cold('-b', { b: outcome });
-    //
-    //         expect(effects.loadDefaultFormParameters$).toBeObservable(expected);
-    //     });
-    //
-    //     it('should not dispatch action if no dataset selected', () => {
-    //         const action = searchActions.loadDefaultFormParameters();
-    //         const outcome = { type: '[No Action] Load Default Form Parameters' };
-    //
-    //         actions = hot('-a', { a: action });
-    //         const expected = cold('-b', { b: outcome });
-    //
-    //         expect(effects.loadDefaultFormParameters$).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 retrieveDataLengthSuccess action on success', () => {
+            mockSearchMultipleSelectorSelectSelectedDatasets = store.overrideSelector(
+                searchMultipleSelector.selectSelectedDatasets, ['myDataset']
+            );
+            mockConeSearchSelectorSelectConeSearch = store.overrideSelector(
+                coneSearchSelector.selectConeSearch, { ra: 1, dec: 2, radius: 3 }
+            );
 
-    // describe('retrieveDataLength$ effect', () => {
-    //     it('should dispatch the retrieveDataLengthSuccess action on success', () => {
-    //         const action = searchActions.retrieveDataLength();
-    //         const outcome = searchActions.retrieveDataLengthSuccess({ length: 5 });
-    //
-    //         actions = hot('-a', { a: action });
-    //         const response = cold('-b|', { b: [{ nb: 5 }] });
-    //         const expected = cold('--c', { c: outcome });
-    //         searchService.retrieveDataLength = jest.fn(() => response);
-    //
-    //         expect(effects.retrieveDataLength$).toBeObservable(expected);
-    //     });
-    //
-    //     it('should dispatch the retrieveDataLengthFail 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);
-    //     });
-    //
-    //     it('should pass correct query to the service', () => {
-    //         mockDatasetSelectorSelectDatasetNameByRoute = store.overrideSelector(
-    //             datasetSelector.selectDatasetNameByRoute, 'myDataset'
-    //         );
-    //         mockSearchSelectorSelectCriteriaList = store.overrideSelector(
-    //             searchSelector.selectCriteriaList, [{'id':1,'type':'field','operator':'eq','value':'one'} as Criterion]
-    //         );
-    //         mockConeSearchSelectorSelectConeSearch = store.overrideSelector(
-    //             coneSearchSelector.selectConeSearch, { ra: 1, dec: 2, radius: 3 }
-    //         );
-    //
-    //         jest.spyOn(searchService, 'retrieveDataLength');
-    //
-    //         const action = searchActions.retrieveDataLength();
-    //         const outcome = searchActions.retrieveDataLengthSuccess({ length: 5 });
-    //
-    //         actions = hot('-a', { a: action });
-    //         const response = cold('-b|', { b: [{ nb: 5 }] });
-    //         const expected = cold('--c', { c: outcome });
-    //         searchService.retrieveDataLength = jest.fn(() => response);
-    //
-    //         expect(effects.retrieveDataLength$).toBeObservable(expected);
-    //         expect(searchService.retrieveDataLength).toHaveBeenCalledTimes(1);
-    //         expect(searchService.retrieveDataLength).toHaveBeenCalledWith('myDataset?a=count&c=1::eq::one&cs=1:2:3');
-    //     });
-    // });
+            const dataLength: SearchMultipleDatasetLength[] = [{ datasetName: 'myDataset', length: 1 }];
+            const action = searchMultipleActions.retrieveDataLength();
+            const outcome = searchMultipleActions.retrieveDataLengthSuccess({ dataLength });
+
+            actions = hot('-a', { a: action });
+            const response = cold('-b|', { b: [{ nb: 1 }] });
+            const expected = cold('---c', { c: outcome });
+            searchService.retrieveDataLength = jest.fn(() => response);
+
+            expect(effects.retrieveDataLength$).toBeObservable(expected);
+        });
+
+        it('should dispatch the retrieveDataLengthFail action on failure', () => {
+            mockSearchMultipleSelectorSelectSelectedDatasets = store.overrideSelector(
+                searchMultipleSelector.selectSelectedDatasets, ['myDataset']
+            );
+            mockConeSearchSelectorSelectConeSearch = store.overrideSelector(
+                coneSearchSelector.selectConeSearch, { ra: 1, dec: 2, radius: 3 }
+            );
+
+            const action = searchMultipleActions.retrieveDataLength();
+            const error = new Error();
+            const outcome = searchMultipleActions.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);
+        });
+
+        it('should pass correct query to the service', () => {
+            mockSearchMultipleSelectorSelectSelectedDatasets = store.overrideSelector(
+                searchMultipleSelector.selectSelectedDatasets, ['myDataset', 'myOtherDataset']
+            );
+            mockConeSearchSelectorSelectConeSearch = store.overrideSelector(
+                coneSearchSelector.selectConeSearch, { ra: 1, dec: 2, radius: 3 }
+            );
+
+            const dataLength: SearchMultipleDatasetLength[] = [
+                { datasetName: 'myDataset', length: 1 },
+                { datasetName: 'myOtherDataset', length: 1 }
+            ];
+
+            jest.spyOn(searchService, 'retrieveDataLength');
+
+            const action = searchMultipleActions.retrieveDataLength();
+            const outcome = searchMultipleActions.retrieveDataLengthSuccess({ dataLength });
+
+            actions = hot('-a', { a: action });
+            const response = cold('-b|', { b: [{ nb: 1 }] });
+            const expected = cold('---c', { c: outcome });
+            searchService.retrieveDataLength = jest.fn(() => response);
+
+            expect(effects.retrieveDataLength$).toBeObservable(expected);
+            expect(searchService.retrieveDataLength).toHaveBeenCalledTimes(2);
+            expect(searchService.retrieveDataLength).toHaveBeenCalledWith('myDataset?a=count&cs=1:2:3');
+            expect(searchService.retrieveDataLength).toHaveBeenCalledWith('myOtherDataset?a=count&cs=1:2:3');
+        });
+    });
 
     describe('retrieveDataLengthFail$ effect', () => {
         it('should not dispatch', () => {
-- 
GitLab