describe('root reducer', () => { it('should combine all reducers', () => { expect(reducer({}, { type: '@@INIT' })).toEqual({ todos: [], visibilityFilter: 'SHOW_ALL' }); }); });
const rootReducer = (state, action) => reducer(state, action)
describe('reducer', () => { it('should include router in reducer', () => { const reducer = createReducer({}) as Reducer<any, any>; const state = reducer({}, ''); expect(state.router).toBeDefined(); }); it('should inject reducers', () => { const dummyReducer = (s = {}, a) => 'dummyResult'; const reducer = createReducer({ test: dummyReducer } as any) as Reducer< any, any >; const state = reducer({}, ''); expect(state.test).toBe('dummyResult'); }); });
/* eslint-disable func-names */ describe( "session reducer", function( ) { describe( "login", function( ) { const action = { type: types.LOGIN, }; const initialState = { isAuthenticated: false, redirectAfterLogin: "/products", }; const result = reducer( initialState, action ); it( "should authenticate the user", function( ) { expect( result.isAuthenticated ).to.be( true ); } ); it( "should not change the redirect after login url", function( ) { expect( result.redirectAfterLogin ).to.be( initialState.redirectAfterLogin ); } ); } ); } );
describe("uploads",()=>{ it("UPLOAD_START handle",()=>{ let finalState = assignState({uploads:{'test_file.txt':{size:25000,progress:0,active:false}}}) expect(reducer(undefined,{type:'UPLOAD_START',name:"test_file.txt",size:25000})).to.deep.equal(finalState); }); it("UPLOAD_START set progress",()=>{ let finalState = assignState({uploads:{'test_file.txt':{size:0,progress:true,active:false}}}) expect(reducer(undefined,{type:'UPLOAD_START',name:"test_file.txt",progress:true})).to.deep.equal(finalState); }); it("UPLOAD_PROGRESS handle",()=>{ let firstState = assignState({uploads:{'test_file.txt':{size:25000,progress:0,active:false}}}) let finalState = assignState({uploads:{'test_file.txt':{size:25000,progress:10,active:false}}}) expect(reducer(firstState,{type:'UPLOAD_PROGRESS',name:"test_file.txt",progress:10})).to.deep.equal(finalState); }); it("UPLOAD_TOGGLE handle",()=>{ let inactiveState = assignState({uploads:{'test_file.txt':{size:25000,progress:0,active:false}}}) let activeState = assignState({uploads:{'test_file.txt':{size:25000,progress:0,active:true}}}) expect(reducer(inactiveState,{type:'UPLOAD_TOGGLE',name:"test_file.txt"})).to.deep.equal(activeState); expect(reducer(activeState,{type:'UPLOAD_TOGGLE',name:"test_file.txt"})).to.deep.equal(inactiveState); }); it("UPLOAD_REMOVE handle",()=>{ let firstState = assignState({uploads:{'test_file.txt':{size:25000,progress:0,active:false}}}) let finalState = assignState({uploads:{}}) expect(reducer(firstState,{type:'UPLOAD_REMOVE',name:"test_file.txt"})).to.deep.equal(finalState); }); })
describe('bootstrap', () => { let defaultState; beforeEach(() => { defaultState = Map(BOOTSTRAPPERS); }); test('default state', () => { let empty; const state = reducer(empty, { type: 'NOOP' }); expect(state.bootstrap).toEqual(defaultState); }); describe(actions.BOOTSTRAP_COMPLETED, () => { test('updates state', () => { let state; defaultState.keySeq().forEach((key, index) => { state = reducer(state, fromBootstrap.bootstrapCompleted(key)); if (index < defaultState.size - 1) { expect(fromBootstrap.isBootstrapComplete(state)).toBeFalsy(); } else { expect(fromBootstrap.isBootstrapComplete(state)).toBeTruthy(); } }); }); }); });
describe("global test",()=>{ it("return empty initial state",()=>{ expect(reducer(undefined,{})).to.deep.equal(initialState) }); })
describe("user slice", () => { describe("reducer, actions and selectors", () => { it("should return the initial state on first run", () => { const nextState = initialState; const result = reducer(undefined, {}); expect(result).toEqual(nextState); }); it("should loading state change", () => { const nextState = reducer(initialState, loading(true)); const rootState = { users: nextState }; expect(selectLoading(rootState)).toEqual(true); }); it("should user state change", () => { axios({ method: "get", url: "https://reqres.in/api/users", }).then((res) => { const nextState = reducer(initialState, setUsers(res.data)); const rootState = { users: nextState }; expect(selectUsers(rootState)).toEqual(data); }); }); }); });
/* eslint-disable func-names */ describe( "product reducer", function( ) { describe( "fetch product", function( ) { const action = { type: types.FETCH_DETAILS_COMPLETED, payload: { product: { id: 1, name: "Test", permalink: "test", }, }, }; const initialState = { list: [ ], details: null, }; const result = reducer( initialState, action ); it( "should set the product in the state", function( ) { expect( result.details.id ).to.be( 1 ); expect( result.details.name ).to.be( "Test" ); expect( result.details.permalink ).to.be( "test" ); } ); } ); } );
describe('reducer', () => { it('should inject reducers', () => { const dummyReducer = (s = {}, a) => 'dummyResult'; const reducer = createReducer({ test: dummyReducer } as any) as Reducer< any, any >; const state = reducer({}, ''); expect(state.test).toBe('dummyResult'); }); it('should return identity reducers when empty', () => { const reducer = createReducer() as Reducer<any, any>; const state = { a: 1 }; const newState = reducer(state, ''); expect(newState).toBe(state); }); });
describe('reducer', () => { it('should include router in reducer', () => { const reducer = createReducer({}) as Reducer<any, any>; const state = reducer({}, ''); expect(state.router).toBeDefined(); }); it('should inject reducers', () => { const dummyReducer = (s = {}, a) => 'dummyResult'; const reducer = createReducer({ test: dummyReducer } as any) as Reducer< any, any >; const state = reducer({}, ''); expect(state.test).toBe('dummyResult'); }); });
describe('reducer', () => { it('should inject reducers', () => { const dummyReducer = (s = {}, a) => 'dummyResult'; const reducer = createReducer({ test: dummyReducer } as any) as Reducer< any, any >; const state = reducer({}, ''); expect(state.test).toBe('dummyResult'); }); it('should return identity reducers when empty', () => { const reducer = createReducer() as Reducer<any, any>; const state = { a: 1 }; const newState = reducer(state, ''); expect(newState).toBe(state); }); });