import * as fromSearchMultiple from './search-multiple.reducer';
import * as searchMultipleActions from './search-multiple.action';
import {DataByDataset, DatasetCount} from './model';
import {Pagination, PaginationOrder} from "../../shared/datatable/model";

fdescribe('[SearchMultiple] Reducer', () => {
    it('should return init state', () => {
        const { initialState } = fromSearchMultiple;
        const action = {} as searchMultipleActions.Actions;
        const state = fromSearchMultiple.reducer(undefined, action);

        expect(state).toBe(initialState);
    });

    it('should init selectedDatasets', () => {
        const { initialState } = fromSearchMultiple;
        const action = new searchMultipleActions.InitSelectedDatasetsAction(['toto', 'tutu']);
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(2);
        expect(state.selectedDatasets.includes('toto')).toBeTruthy();
        expect(state.selectedDatasets.includes('tutu')).toBeTruthy();
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should set currentStep to "position"', () => {
        const { initialState } = fromSearchMultiple;
        const action = new searchMultipleActions.ChangeStepAction('position');
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toEqual('position');
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should set positionStepChecked to true', () => {
        const { initialState } = fromSearchMultiple;
        const action = new searchMultipleActions.PositionCheckedAction();
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeFalsy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeTruthy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should set datasetsStepChecked to true', () => {
        const { initialState } = fromSearchMultiple;
        const action = new searchMultipleActions.DatasetsCheckedAction();
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeTruthy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should set resultStepChecked to true', () => {
        const { initialState } = fromSearchMultiple;
        const action = new searchMultipleActions.ResultsCheckedAction();
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeTruthy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should change selectedDatasets', () => {
        const { initialState } = fromSearchMultiple;
        const action = new searchMultipleActions.UpdateSelectedDatasetsAction(['toto', 'tutu']);
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(2);
        expect(state.selectedDatasets.includes('toto')).toBeTruthy();
        expect(state.selectedDatasets.includes('tutu')).toBeTruthy();
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should set datasetsCountIsLoading to true', () => {
        const { initialState } = fromSearchMultiple;
        const action = new searchMultipleActions.RetrieveDatasetsCountAction();
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeTruthy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should set datasetsCountIsLoading to false, set datasetsCountIsLoaded to true and set datasetsCount', () => {
        const datasetsCount: DatasetCount[] = [{ dname: 'toto', count: 2}];
        const initialState = { ...fromSearchMultiple.initialState, datasetsCountIsLoading: true };
        const action = new searchMultipleActions.RetrieveDatasetsCountSuccessAction(datasetsCount);
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeTruthy();
        expect(state.datasetsCount).toEqual(datasetsCount);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should set datasetsCountIsLoading to false', () => {
        const initialState = { ...fromSearchMultiple.initialState, datasetsCountIsLoading: true };
        const action = new searchMultipleActions.RetrieveDatasetsCountFailAction();
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should set data', () => {
        const pagination: Pagination = { dname: 'toto', nbItems: 10, page: 1, sortedCol: 1, order: PaginationOrder.a };
        const expectedEntity: DataByDataset = { datasetName: 'toto', isLoading: true, isLoaded: false, data: [] };
        const { initialState } = fromSearchMultiple;
        const action = new searchMultipleActions.RetrieveDataAction(pagination);
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(1);
        expect(state.ids).toContain('toto');
        expect(state.entities['toto']).toEqual(expectedEntity);
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should update data when success', () => {
        const expectedEntity: DataByDataset = { datasetName: 'toto', isLoading: false, isLoaded: true, data: [1, 2] };
        const initialState = {
            ...fromSearchMultiple.initialState,
            ids: ['toto'],
            entities: { 'toto': { datasetName: 'toto', isLoading: true, isLoaded: false, data: [] }}
        };
        const action = new searchMultipleActions.RetrieveDataSuccessAction({ datasetName: 'toto', data: [1, 2] });
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(1);
        expect(state.ids).toContain('toto');
        expect(state.entities['toto']).toEqual(expectedEntity);
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should update data when fail', () => {
        const expectedEntity: DataByDataset = { datasetName: 'toto', isLoading: false, isLoaded: false, data: [] };
        const initialState = {
            ...fromSearchMultiple.initialState,
            ids: ['toto'],
            entities: { 'toto': { datasetName: 'toto', isLoading: true, isLoaded: false, data: [] }}
        };
        const action = new searchMultipleActions.RetrieveDataFailAction('toto');
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(1);
        expect(state.ids).toContain('toto');
        expect(state.entities['toto']).toEqual(expectedEntity);
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should change selectedData', () => {
        const { initialState } = fromSearchMultiple;
        const action = new searchMultipleActions.UpdateSelectedDataAction([{ dname: 'toto', data:[1, 2] }]);
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(1);
        expect(state.selectedData).toContain({ dname: 'toto', data:[1, 2] });
        expect(state).not.toEqual(initialState);
    });

    it('should destroy results', () => {
        const initialState = {
            ...fromSearchMultiple.initialState,
            ids: ['toto'],
            entities: { 'toto': { datasetName: 'toto', isLoading: false, isLoaded: true, data: [1, 2] }},
            datasetsCountIsLoaded: true,
            datasetsCount: [{ dname: 'toto', count: 2}],
            selectedData: [{ dname: 'toto', data:[1, 2] }]
        };
        const action = new searchMultipleActions.DestroyResultsAction();
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        expect(state.currentStep).toBeNull();
        expect(state.positionStepChecked).toBeFalsy();
        expect(state.datasetsStepChecked).toBeFalsy();
        expect(state.resultStepChecked).toBeFalsy();
        expect(state.selectedDatasets.length).toEqual(0);
        expect(state.datasetsCountIsLoading).toBeFalsy();
        expect(state.datasetsCountIsLoaded).toBeFalsy();
        expect(state.datasetsCount.length).toEqual(0);
        expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    it('should reset search multiple', () => {
        const initialState = {
            ...fromSearchMultiple.initialState,
            ids: ['toto'],
            entities: { 'toto': { datasetName: 'toto', isLoading: false, isLoaded: true, data: [1, 2] }},
            pristine: false,
            currentStep: 'datasets',
            positionStepChecked: true,
            datasetsStepChecked: true,
            resultStepChecked: true,
            selectedDatasets: ['toto'],
            datasetsCountIsLoading: true,
            datasetsCountIsLoaded: true,
            datasetsCount: [{ dname: 'toto', count: 2}],
            selectedData: [{ dname: 'toto', data:[1, 2] }]
        };
        const action = new searchMultipleActions.DestroyResultsAction();
        const state = fromSearchMultiple.reducer(initialState, action);

        expect(state.ids.length).toEqual(0);
        expect(state.entities).toEqual({});
        expect(state.pristine).toBeTruthy();
        // expect(state.currentStep).toBeNull();
        // expect(state.positionStepChecked).toBeFalsy();
        // expect(state.datasetsStepChecked).toBeFalsy();
        // expect(state.resultStepChecked).toBeFalsy();
        // expect(state.selectedDatasets.length).toEqual(0);
        // expect(state.datasetsCountIsLoading).toBeFalsy();
        // expect(state.datasetsCountIsLoaded).toBeFalsy();
        // expect(state.datasetsCount.length).toEqual(0);
        // expect(state.selectedData.length).toEqual(0);
        expect(state).not.toEqual(initialState);
    });

    // it('should change the currentStep', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.ChangeStepAction('toto');
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toEqual('toto');
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });

    // it('should set the datasetName and change pristine', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.SelectDatasetAction('toto');
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeFalsy();
    //     expect(state.currentStep).toBeNull();
    //     expect(state.datasetName).toBe('toto');
    //     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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set currentStep to "dataset"', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.NewSearchAction('toto');
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toEqual('dataset');
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set criteriaStepChecked to true', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.CriteriaChecked();
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set outputStepChecked to true', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.OutputChecked();
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set resultStepChecked to true', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.ResultChecked();
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set coneSearchAdded to true', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.IsConeSearchAddedAction(true);
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).toBeNull();
    //     expect(state.criteriaStepChecked).toBeFalsy();
    //     expect(state.outputStepChecked).toBeFalsy();
    //     expect(state.resultStepChecked).toBeFalsy();
    //     expect(state.coneSearchAdded).toBeTruthy();
    //     expect(state.criteriaList.length).toEqual(0);
    //     expect(state.outputList.length).toEqual(0);
    //     expect(state.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    //
    // it('should set criteriaList', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.UpdateCriteriaListAction(CRITERIA_LIST);
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).toBeNull();
    //     expect(state.criteriaStepChecked).toBeFalsy();
    //     expect(state.outputStepChecked).toBeFalsy();
    //     expect(state.resultStepChecked).toBeFalsy();
    //     expect(state.coneSearchAdded).toBeFalsy();
    //     expect(state.criteriaList.length).toEqual(2);
    //     expect(state.outputList.length).toEqual(0);
    //     expect(state.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should add criterion to criteriaList', () => {
    //     const criterion: FieldCriterion = { id: 3, type: 'field', operator: 'eq', value: 'fd_crit_3' };
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.AddCriterionAction(criterion);
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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[0].id).toEqual(3);
    //     expect(state.outputList.length).toEqual(0);
    //     expect(state.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should remove criterion to criteriaList', () => {
    //     const criterion: FieldCriterion = { id: 2, type: 'field', operator: 'eq', value: 'fd_crit_2' };
    //     const initialState = { ...fromSearch.initialState, criteriaList: CRITERIA_LIST };
    //     const action = new searchActions.DeleteCriterionAction(criterion.id);
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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[0].id).toEqual(1);
    //     expect(state.outputList.length).toEqual(0);
    //     expect(state.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set outputList', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.UpdateOutputListAction([1, 2]);
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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(2);
    //     expect(state.outputList).toContain(1);
    //     expect(state.outputList).toContain(2);
    //     expect(state.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set outputListEmpty to false', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.OutputListEmptyAction(false);
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeFalsy();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set searchData', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.RetrieveDataSuccessAction(['data_1', 'data_2']);
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData.length).toBe(2);
    //     expect(state.searchData).toContain('data_1');
    //     expect(state.searchData).toContain('data_2');
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set dataLength', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.GetDataLengthSuccessAction(12);
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBe(12);
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should add data to selectedData', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.AddSelectedDataAction(1);
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(1);
    //     expect(state.selectedData).toContain(1);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should remove data to selectedData', () => {
    //     const initialState = { ...fromSearch.initialState, selectedData: ['data_1', 'data_2'] };
    //     const action = new searchActions.DeleteSelectedDataAction('data_2');
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(1);
    //     expect(state.selectedData).toContain('data_1');
    //     expect(state.selectedData).not.toContain('data_2');
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set processWip to true and processDone to false', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.ExecuteProcessAction('process_type');
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeTruthy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set processId', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.ExecuteProcessWipAction('toto');
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBe('toto');
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should set processWip to false and processDone to true', () => {
    //     const { initialState } = fromSearch;
    //     const action = new searchActions.ExecuteProcessSuccessAction('toto');
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeTruthy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should unset processId and set processWip and processDone to false', () => {
    //     const initialState = {
    //         ...fromSearch.initialState,
    //         processId: 'toto',
    //         processWip: true,
    //         processDone: true
    //     };
    //     const action = new searchActions.ExecuteProcessFailAction();
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should unset searchData and dataLength', () => {
    //     const initialState = {
    //         ...fromSearch.initialState,
    //         searchData: ['toto', 'titi', 'tutu'],
    //         dataLength: 3
    //     };
    //     const action = new searchActions.DestroyResultsAction();
    //     const state = fromSearch.reducer(initialState, action);
    //
    //     expect(state.pristine).toBeTruthy();
    //     expect(state.currentStep).toBeNull()
    //     expect(state.datasetName).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.searchData).toBeNull();
    //     expect(state.dataLength).toBeNull();
    //     expect(state.selectedData.length).toEqual(0);
    //     expect(state.processWip).toBeFalsy();
    //     expect(state.processDone).toBeFalsy();
    //     expect(state.processId).toBeNull();
    //     expect(state.outputListEmpty).toBeNull();
    //     expect(state).not.toEqual(initialState);
    // });
    //
    // it('should get pristine', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getPristine(state)).toBeTruthy();
    // });
    //
    // it('should get currentStep', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getCurrentStep(state)).toBeNull();
    // });
    //
    // it('should get datasetName', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getDatasetName(state)).toBeNull();
    // });
    //
    // it('should get criteriaStepChecked', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getCriteriaStepChecked(state)).toBeFalsy();
    // });
    //
    // it('should get outputStepChecked', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getOutputStepChecked(state)).toBeFalsy();
    // });
    //
    // it('should get resultStepChecked', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getResultStepChecked(state)).toBeFalsy();
    // });
    //
    // it('should get coneSearchAdded', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getIsConeSearchAdded(state)).toBeFalsy();
    // });
    //
    // it('should get criteriaList', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getCriteriaList(state).length).toEqual(0);
    // });
    //
    // it('should get outputList', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getOutputList(state).length).toEqual(0);
    // });
    //
    // it('should get outputListEmpty', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getOutputListEmpty(state)).toBeNull();
    // });
    //
    // it('should get searchData', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getSearchData(state)).toBeNull();
    // });
    //
    // it('should get dataLength', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getDataLength(state)).toBeNull();
    // });
    //
    // it('should get selectedData', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getSelectedData(state).length).toEqual(0);
    // });
    //
    // it('should get processWip', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getProcessWip(state)).toBeFalsy();
    // });
    //
    // it('should get processDone', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getProcessDone(state)).toBeFalsy();
    // });
    //
    // it('should get processId', () => {
    //     const action = {} as searchActions.Actions;
    //     const state = fromSearch.reducer(undefined, action);
    //
    //     expect(fromSearch.getProcessId(state)).toBeNull();
    // });
});