diff --git a/client/src/app/instance/store/reducers/detail.reducer.spec.ts b/client/src/app/instance/store/reducers/detail.reducer.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d10671dc02884218734a3ed6ce49ad3351c734be
--- /dev/null
+++ b/client/src/app/instance/store/reducers/detail.reducer.spec.ts
@@ -0,0 +1,157 @@
+import * as fromDetail from './detail.reducer';
+import * as detailActions from '../actions/detail.actions';
+import { Action } from '@ngrx/store';
+
+describe('Detail reducer', () => {
+    it('unknown action should return the default state', () => {
+        const { initialState } = fromDetail;
+        const action = { type: 'Unknown' };
+        const state = fromDetail.detailReducer(initialState, action);
+
+        expect(state).toBe(initialState);
+    });
+
+    it('retrieveObject action should set objectIsLoading to true and objectIsLoaded to false', () => {
+            const initialState = {
+                ...fromDetail.initialState,
+                objectIsLoaded: false
+            };
+        const action = detailActions.retrieveObject();
+        const state = fromDetail.detailReducer(initialState, action);
+
+        expect(state.object).toBeNull();
+        expect(state.objectIsLoading).toBeTruthy();
+        expect(state.objectIsLoaded).toBeFalsy();
+        expect(state.spectraCSV).toBeNull();
+        expect(state.spectraIsLoading).toBeFalsy();
+        expect(state.spectraIsLoaded).toBeFalsy();
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveObjectSuccess action should add object, set objectIsLoading to false and objectIsLoaded to true', () => {
+            const initialState = {
+                ...fromDetail.initialState,
+                objectIsLoading: true
+            };
+        const action = detailActions.retrieveObjectSuccess({ object: 'myObject' });
+        const state = fromDetail.detailReducer(initialState, action);
+
+        expect(state.object).toBe('myObject');
+        expect(state.objectIsLoading).toBeFalsy();
+        expect(state.objectIsLoaded).toBeTruthy();
+        expect(state.spectraCSV).toBeNull();
+        expect(state.spectraIsLoading).toBeFalsy();
+        expect(state.spectraIsLoaded).toBeFalsy();
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveObjectFail action should set objectIsLoading to false', () => {
+            const initialState = {
+                ...fromDetail.initialState,
+                objectIsLoading: true
+            };
+        const action = detailActions.retrieveObjectFail();
+        const state = fromDetail.detailReducer(initialState, action);
+
+        expect(state.object).toBeNull();
+        expect(state.objectIsLoading).toBeFalsy();
+        expect(state.objectIsLoaded).toBeFalsy();
+        expect(state.spectraCSV).toBeNull();
+        expect(state.spectraIsLoading).toBeFalsy();
+        expect(state.spectraIsLoaded).toBeFalsy();
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveSpectra action should set spectraIsLoading to true and spectraIsLoaded to false', () => {
+            const initialState = {
+                ...fromDetail.initialState,
+                spectraIsLoaded: true
+            };
+        const action = detailActions.retrieveSpectra({ filename: 'mySpectra' });
+        const state = fromDetail.detailReducer(initialState, action);
+
+        expect(state.object).toBeNull();
+        expect(state.objectIsLoading).toBeFalsy();
+        expect(state.objectIsLoaded).toBeFalsy();
+        expect(state.spectraCSV).toBeNull();
+        expect(state.spectraIsLoading).toBeTruthy();
+        expect(state.spectraIsLoaded).toBeFalsy();
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveSpectraSuccess action should add spectraCSV, set spectraIsLoading to false and spectraIsLoaded to true', () => {
+            const initialState = {
+                ...fromDetail.initialState,
+                spectraIsLoading: true
+            };
+        const action = detailActions.retrieveSpectraSuccess({ spectraCSV: 'mySpectra' });
+        const state = fromDetail.detailReducer(initialState, action);
+
+        expect(state.object).toBeNull();
+        expect(state.objectIsLoading).toBeFalsy();
+        expect(state.objectIsLoaded).toBeFalsy();
+        expect(state.spectraCSV).toBe('mySpectra');
+        expect(state.spectraIsLoading).toBeFalsy();
+        expect(state.spectraIsLoaded).toBeTruthy();
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveSpectraFail action should set spectraIsLoading to false', () => {
+            const initialState = {
+                ...fromDetail.initialState,
+                spectraIsLoading: true
+            };
+        const action = detailActions.retrieveSpectraFail();
+        const state = fromDetail.detailReducer(initialState, action);
+
+        expect(state.object).toBeNull();
+        expect(state.objectIsLoading).toBeFalsy();
+        expect(state.objectIsLoaded).toBeFalsy();
+        expect(state.spectraCSV).toBeNull();
+        expect(state.spectraIsLoading).toBeFalsy();
+        expect(state.spectraIsLoaded).toBeFalsy();
+        expect(state).not.toBe(initialState);
+    });
+
+    it('should get object', () => {
+        const action = {} as Action;
+        const state =  fromDetail.detailReducer(undefined, action);
+
+        expect(fromDetail.selectObject(state)).toBeNull();
+    });
+
+    it('should get objectIsLoading', () => {
+        const action = {} as Action;
+        const state =  fromDetail.detailReducer(undefined, action);
+
+        expect(fromDetail.selectObjectIsLoading(state)).toBeFalsy();
+    });
+
+    it('should get objectIsLoaded', () => {
+        const action = {} as Action;
+        const state =  fromDetail.detailReducer(undefined, action);
+
+        expect(fromDetail.selectObjectIsLoaded(state)).toBeFalsy();
+    });
+
+    it('should get spectraCSV', () => {
+        const action = {} as Action;
+        const state =  fromDetail.detailReducer(undefined, action);
+
+        expect(fromDetail.selectSpectraCSV(state)).toBeNull();
+    });
+
+    it('should get spectraIsLoading', () => {
+        const action = {} as Action;
+        const state =  fromDetail.detailReducer(undefined, action);
+
+        expect(fromDetail.selectSpectraIsLoading(state)).toBeFalsy();
+    });
+
+    it('should get spectraIsLoaded', () => {
+        const action = {} as Action;
+        const state =  fromDetail.detailReducer(undefined, action);
+
+        expect(fromDetail.selectSpectraIsLoaded(state)).toBeFalsy();
+    });
+});
diff --git a/client/src/app/instance/store/reducers/samp.reducer.spec.ts b/client/src/app/instance/store/reducers/samp.reducer.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cb682d7ba353eed0be9dc414e39254bcbd2225df
--- /dev/null
+++ b/client/src/app/instance/store/reducers/samp.reducer.spec.ts
@@ -0,0 +1,41 @@
+import * as fromSamp from './samp.reducer';
+import * as sampActions from '../actions/samp.actions';
+import { Action } from '@ngrx/store';
+
+describe('Samp reducer', () => {
+    it('unknown action should return the default state', () => {
+        const { initialState } = fromSamp;
+        const action = { type: 'Unknown' };
+        const state = fromSamp.sampReducer(initialState, action);
+
+        expect(state).toBe(initialState);
+    });
+
+    it('registerSuccess action should set registered to true', () => {
+        const { initialState } = fromSamp;
+        const action = sampActions.registerSuccess();
+        const state = fromSamp.sampReducer(initialState, action);
+
+        expect(state.registered).toBeTruthy();
+        expect(state).not.toBe(initialState);
+    });
+
+    it('unregister action should set registered to false', () => {
+        const initialState = {
+            ...fromSamp.initialState,
+            registered: true
+        };
+        const action = sampActions.unregister();
+        const state = fromSamp.sampReducer(initialState, action);
+
+        expect(state.registered).toBeFalsy();
+        expect(state).not.toBe(initialState);
+    });
+
+    it('should get registered', () => {
+        const action = {} as Action;
+        const state =  fromSamp.sampReducer(undefined, action);
+
+        expect(fromSamp.selectRegistered(state)).toBeFalsy();
+    });
+});
diff --git a/client/src/app/instance/store/reducers/search.reducer.spec.ts b/client/src/app/instance/store/reducers/search.reducer.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b543467022dceba52cdaa1e50459f4afa47581ba
--- /dev/null
+++ b/client/src/app/instance/store/reducers/search.reducer.spec.ts
@@ -0,0 +1,597 @@
+import * as fromSearch from './search.reducer';
+import * as searchActions from '../actions/search.actions';
+import { Criterion, Pagination, PaginationOrder } from '../models';
+
+describe('Search reducer', () => {
+    it('unknown action should return the default state', () => {
+        const { initialState } = fromSearch;
+        const action = { type: 'Unknown' };
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state).toBe(initialState);
+    });
+
+    it('restartSearch action should set currentStep to \'dataset\'', () => {
+        const { initialState } = fromSearch;
+        const action = searchActions.restartSearch();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBe('dataset');
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('changeStep action should change the currentStep', () => {
+        const { initialState } = fromSearch;
+        const action = searchActions.changeStep({ step: 'myStep' });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBe('myStep');
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('markAsDirty action should set pristine to false', () => {
+        const { initialState } = fromSearch;
+        const action = searchActions.markAsDirty();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeFalsy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('changeCurrentDataset action should set pristine to false', () => {
+        const { initialState } = fromSearch;
+        const action = searchActions.changeCurrentDataset({ currentDataset: 'myDataset' });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBe('myDataset');
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('checkCriteria action should set criteriaStepChecked to true', () => {
+        const { initialState } = fromSearch;
+        const action = searchActions.checkCriteria();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeTruthy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('checkOutput action should set outputStepChecked to true', () => {
+        const { initialState } = fromSearch;
+        const action = searchActions.checkOutput();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeTruthy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('checkResult action should set resultStepChecked to true', () => {
+        const { initialState } = fromSearch;
+        const action = searchActions.checkResult();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeTruthy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('checkResult action should set resultStepChecked to true', () => {
+        const { initialState } = fromSearch;
+        const action = searchActions.checkResult();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeTruthy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('updateCriteriaList action should set criteriaList', () => {
+        const { initialState } = fromSearch;
+        const criteriaList: Criterion[] = [{ id: 1, type: 'field' }];
+        const action = searchActions.updateCriteriaList({ criteriaList });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(1);
+        expect(state.criteriaList).toEqual(criteriaList);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('addCriterion action should add criterion to the criteriaList', () => {
+        const { initialState } = fromSearch;
+        const criterion: Criterion = { id: 1, type: 'field' };
+        const action = searchActions.addCriterion({ criterion });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(1);
+        expect(state.criteriaList).toEqual([criterion]);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('deleteCriterion action should remove criterion to the criteriaList', () => {
+        const initialState = {
+            ...fromSearch.initialState,
+            criteriaList: [{ id: 1, type: 'field' }]
+        };
+        const action = searchActions.deleteCriterion({ idCriterion: 1 });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('updateOutputList action should set outputList', () => {
+        const { initialState } = fromSearch;
+        const outputList: number[] = [1, 2, 3];
+        const action = searchActions.updateOutputList({ outputList });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(3);
+        expect(state.outputList).toEqual(outputList);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('addSelectedData action should add data id to the selectedData list', () => {
+        const { initialState } = fromSearch;
+        const action = searchActions.addSelectedData({ id: 1 });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(1);
+        expect(state.selectedData).toEqual([1]);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('deleteSelectedData action should remove data id to the selectedData list', () => {
+        const initialState = {
+            ...fromSearch.initialState,
+            selectedData: [1]
+        };
+        const action = searchActions.deleteSelectedData({ id: 1 });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveDataLength action should set dataLengthIsLoading to true and dataLengthIsLoaded to false', () => {
+        const initialState = {
+            ...fromSearch.initialState,
+            dataLengthIsLoaded: true
+        };
+        const action = searchActions.retrieveDataLength();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeTruthy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveDataLengthSuccess action should set dataLength, set dataLengthIsLoading to true and dataLengthIsLoaded to false', () => {
+        const initialState = {
+            ...fromSearch.initialState,
+            dataLengthIsLoading: true
+        };
+        const action = searchActions.retrieveDataLengthSuccess({ length: 1 });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeTruthy();
+        expect(state.dataLength).toEqual(1);
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveDataLengthFail action should set dataLengthIsLoading to false', () => {
+        const initialState = {
+            ...fromSearch.initialState,
+            dataLengthIsLoading: true
+        };
+        const action = searchActions.retrieveDataLengthFail();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveData action should set dataIsLoading to true and dataIsLoaded to false', () => {
+        const initialState = {
+            ...fromSearch.initialState,
+            dataIsLoaded: true
+        };
+        const pagination: Pagination = { dname: 'myDataset', page: 1, nbItems: 10, sortedCol: 1, order: PaginationOrder.a };
+        const action = searchActions.retrieveData({ pagination });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeTruthy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveDataSuccess action should set data, set dataIsLoading to false and dataIsLoaded to true', () => {
+        const initialState = {
+            ...fromSearch.initialState,
+            dataIsLoading: true
+        };
+        const action = searchActions.retrieveDataSuccess({ data: ['myData'] });
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(1);
+        expect(state.data).toEqual(['myData']);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeTruthy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('retrieveDataFail action should set dataIsLoading to false', () => {
+        const initialState = {
+            ...fromSearch.initialState,
+            dataIsLoading: true
+        };
+        const action = searchActions.retrieveDataFail();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('destroyResults action should reset data and dataLength', () => {
+        const initialState = {
+            ...fromSearch.initialState,
+            data: ['myData'],
+            dataLength: 1
+        };
+        const action = searchActions.destroyResults();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toBeNull();
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    it('resetSearch action should set currentStep to \'dataset\'', () => {
+        const { initialState } = fromSearch;
+        const action = searchActions.resetSearch();
+        const state = fromSearch.searchReducer(initialState, action);
+
+        expect(state.pristine).toBeTruthy();
+        expect(state.currentDataset).toBeNull();
+        expect(state.currentStep).toEqual('dataset');
+        expect(state.criteriaStepChecked).toBeFalsy();
+        expect(state.outputStepChecked).toBeFalsy();
+        expect(state.resultStepChecked).toBeFalsy();
+        expect(state.coneSearchAdded).toBeFalsy();
+        expect(state.criteriaList.length).toEqual(0);
+        expect(state.outputList.length).toEqual(0);
+        expect(state.dataLengthIsLoading).toBeFalsy();
+        expect(state.dataLengthIsLoaded).toBeFalsy();
+        expect(state.dataLength).toBeNull();
+        expect(state.data.length).toEqual(0);
+        expect(state.dataIsLoading).toBeFalsy();
+        expect(state.dataIsLoaded).toBeFalsy();
+        expect(state.selectedData.length).toEqual(0);
+        expect(state).not.toBe(initialState);
+    });
+
+    // it('unregister action should set registered to false', () => {
+    //     const initialState = {
+    //         ...fromSearch.initialState,
+    //         registered: true
+    //     };
+    //     const action = searchActions.unregister();
+    //     const state = fromSearch.searchReducer(initialState, action);
+    //
+    //     expect(state.registered).toBeFalsy();
+    //     expect(state).not.toBe(initialState);
+    // });
+
+    // it('should get registered', () => {
+    //     const action = {} as Action;
+    //     const state =  fromSearch.searchReducer(undefined, action);
+    //
+    //     expect(fromSearch.selectRegistered(state)).toBeFalsy();
+    // });
+});