Skip to content
Snippets Groups Projects
user-settings.reducer.spec.ts 3.58 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { ApiError, createStateResource } from '@goofy-client/tech-shared';
    import { Action } from '@ngrx/store';
    import { createUserProfileResource } from 'libs/user-profile-shared/test/user-profile';
    import { createUserSettings, createUserSettingsResource } from 'libs/user-settings-shared/test/user-settings';
    
    import { createApiError } from '../../../../tech-shared/test/error';
    
    import { UserSettingsResource } from '../user-settings.model';
    
    import * as UserSettingsActions from './user-settings.actions';
    
    import { initialUserSettingsState, userSettingsReducer, UserSettingsState } from './user-settings.reducer';
    
    describe('User Settings Reducer', () => {
    
    	describe('unknown action', () => {
    
    		it('should return current state', () => {
    
    			const result = userSettingsReducer(initialUserSettingsState, action);
    
    
    			expect(result).toBe(initialUserSettingsState);
    		})
    	})
    
    	describe('loadUserSettings', () => {
    		describe('on "loadUserSettings" action', () => {
    			it('should set loading to true', () => {
    
    				const action: Action = UserSettingsActions.loadUserSettings({ currentUser: createUserProfileResource() });
    
    				const state: UserSettingsState = userSettingsReducer(initialUserSettingsState, action);
    
    
    				expect(state.userSettings.loading).toBeTruthy();
    			})
    		})
    	})
    
    	describe('on "loadUserSettingsSuccess"', () => {
    
    		const userSettings: UserSettingsResource = createUserSettingsResource();
    		const action: Action = UserSettingsActions.loadUserSettingsSuccess({ userSettings });
    
    
    		it('should set loaded resource', () => {
    
    			const state: UserSettingsState = userSettingsReducer(initialUserSettingsState, action);
    
    
    			expect(state.userSettings).toEqual(createStateResource(userSettings));
    		})
    
    		it('should has property "notificationsSendFor"', () => {
    
    			const state: UserSettingsState = userSettingsReducer(initialUserSettingsState, action);
    
    
    			expect(state.userSettings).toHaveProperty('resource.notificationsSendFor');
    		})
    	})
    
    	describe('on "loadUserSettingsFailure"', () => {
    		it('should set apiError', () => {
    			const apiError: ApiError = createApiError();
    
    			const action: Action = UserSettingsActions.loadUserSettingsFailure({ apiError });
    
    			const state: UserSettingsState = userSettingsReducer(initialUserSettingsState, action);
    
    
    			expect(state.userSettings.error).toStrictEqual(apiError);
    		})
    
    
    	describe('setUserSettings', () => {
    
    		describe('on "setUserSettings" action', () => {
    
    			it('should set state resource to loading', () => {
    
    				const action: Action = UserSettingsActions.setUserSettings({ userSettings: createUserSettings() });
    
    				const state: UserSettingsState = userSettingsReducer(initialUserSettingsState, action);
    
    				expect(state.userSettings.loading).toBeTruthy();
    
    			})
    		})
    
    		describe('on "setUserSettingsSuccess" action', () => {
    
    
    			const userSettingsResource: UserSettingsResource = createUserSettingsResource();
    			const action: Action = UserSettingsActions.setUserSettingsSuccess({ userSettings: userSettingsResource });
    
    			it('should set loaded resource', () => {
    				const state: UserSettingsState = userSettingsReducer(initialUserSettingsState, action);
    
    				expect(state.userSettings).toEqual(createStateResource(userSettingsResource));
    
    			})
    		})
    
    		describe('on "setUserSettingsFailure" action', () => {
    
    			it('should set API Error', () => {
    
    				const apiError: ApiError = createApiError();
    				const action: Action = UserSettingsActions.setUserSettingsFailure({ apiError });
    
    				const state: UserSettingsState = userSettingsReducer(initialUserSettingsState, action);
    
    				expect(state.userSettings.error).toStrictEqual(apiError);