diff --git a/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.actions.ts b/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.actions.ts index 1cdac743abedf7c184be64990a508022b4b3146c..012f5a12ecd628fbb071b37ffe31d3c4a849315f 100644 --- a/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.actions.ts +++ b/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.actions.ts @@ -12,7 +12,7 @@ export interface UserProfileAction { currentUser: UserProfileResource } -export interface LoadUserSettingsAction { +export interface LoadedUserSettingsAction { userSettings: UserSettingsResource } @@ -29,7 +29,7 @@ export const loadUserSettings: UserSettingsActionCreator<UserProfileAction> = cr props<{ currentUser: UserProfileResource }>() ); -export const loadUserSettingsSuccess: UserSettingsActionCreator<LoadUserSettingsAction> = createAction( +export const loadUserSettingsSuccess: UserSettingsActionCreator<LoadedUserSettingsAction> = createAction( '[UserSettings/API] Load UserSettings Success', props<{ userSettings: UserSettingsResource }>() ); @@ -44,7 +44,7 @@ export const setUserSettings: UserSettingsActionCreator<SetUserSettingsAction> = props<{ userSettings: UserSettings }>() ); -export const setUserSettingsSuccess: UserSettingsActionCreator<LoadUserSettingsAction> = createAction( +export const setUserSettingsSuccess: UserSettingsActionCreator<LoadedUserSettingsAction> = createAction( '[UserSettings/API] Set UserSettings Success', props<{ userSettings: UserSettingsResource }>() ); diff --git a/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.reducer.spec.ts b/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.reducer.spec.ts index 1725f2318ac7ef59c2578a292cc3ea07231c7cbc..c887fe17b046ec9affbcbc0fd2ad7c308df1fae6 100644 --- a/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.reducer.spec.ts +++ b/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.reducer.spec.ts @@ -1,19 +1,20 @@ -import { ApiError, createStateResource } from "@goofy-client/tech-shared"; -import { Action } from "@ngrx/store"; -import { createUserProfileResource } from "libs/user-profile-shared/test/user-profile"; -import { createUserSettingsResource } from "libs/user-settings-shared/test/user-settings"; +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, settingsReducer, UserSettingsState } from "./user-settings.reducer"; +import { initialUserSettingsState, userSettingsReducer, UserSettingsState } from './user-settings.reducer'; describe('User Settings Reducer', () => { describe('unknown action', () => { it('should return current state', () => { - const action = {} as Action; + const action: Action = {} as Action; - const result = settingsReducer(initialUserSettingsState, action); + const result = userSettingsReducer(initialUserSettingsState, action); expect(result).toBe(initialUserSettingsState); }) @@ -22,9 +23,9 @@ describe('User Settings Reducer', () => { describe('loadUserSettings', () => { describe('on "loadUserSettings" action', () => { it('should set loading to true', () => { - const action = UserSettingsActions.loadUserSettings({ currentUser: createUserProfileResource() }); + const action: Action = UserSettingsActions.loadUserSettings({ currentUser: createUserProfileResource() }); - const state: UserSettingsState = settingsReducer(initialUserSettingsState, action); + const state: UserSettingsState = userSettingsReducer(initialUserSettingsState, action); expect(state.userSettings.loading).toBeTruthy(); }) @@ -32,17 +33,17 @@ describe('User Settings Reducer', () => { }) describe('on "loadUserSettingsSuccess"', () => { - const userSettings = createUserSettingsResource(); - const action = UserSettingsActions.loadUserSettingsSuccess({ userSettings }) + const userSettings: UserSettingsResource = createUserSettingsResource(); + const action: Action = UserSettingsActions.loadUserSettingsSuccess({ userSettings }); it('should set loaded resource', () => { - const state: UserSettingsState = settingsReducer(initialUserSettingsState, action); + const state: UserSettingsState = userSettingsReducer(initialUserSettingsState, action); expect(state.userSettings).toEqual(createStateResource(userSettings)); }) it('should has property "notificationsSendFor"', () => { - const state: UserSettingsState = settingsReducer(initialUserSettingsState, action); + const state: UserSettingsState = userSettingsReducer(initialUserSettingsState, action); expect(state.userSettings).toHaveProperty('resource.notificationsSendFor'); }) @@ -51,35 +52,49 @@ describe('User Settings Reducer', () => { describe('on "loadUserSettingsFailure"', () => { it('should set apiError', () => { const apiError: ApiError = createApiError(); - const action = UserSettingsActions.loadUserSettingsFailure({ apiError }); + const action: Action = UserSettingsActions.loadUserSettingsFailure({ apiError }); - const state: UserSettingsState = settingsReducer(initialUserSettingsState, action); + 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', () => { - it('should set loaded resource', () => { - }) + const userSettingsResource: UserSettingsResource = createUserSettingsResource(); + const action: Action = UserSettingsActions.setUserSettingsSuccess({ userSettings: userSettingsResource }); - it('should has property "notificationsSendFor"', () => { + 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); }) }) }) - }) \ No newline at end of file diff --git a/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.reducer.ts b/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.reducer.ts index d85ace2394110d6dfeffee525e151d4404a6d68e..5d39aa5fa91380ab4bd618633506d8087ac94551 100644 --- a/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.reducer.ts +++ b/goofy-client/libs/user-settings-shared/src/lib/+state/user-settings.reducer.ts @@ -1,13 +1,13 @@ import { createEmptyStateResource, createErrorStateResource, createStateResource, StateResource } from '@goofy-client/tech-shared'; import { createEntityAdapter, EntityAdapter } from '@ngrx/entity'; -import { Action, createReducer, on } from '@ngrx/store'; +import { Action, ActionReducer, createReducer, on } from '@ngrx/store'; import { UserSettingsResource } from '../user-settings.model'; import * as UserSettingsActions from './user-settings.actions'; -import { ApiErrorAction, LoadUserSettingsAction, SetUserSettingsAction } from './user-settings.actions'; +import { ApiErrorAction, LoadedUserSettingsAction } from './user-settings.actions'; import { UserSettingsEntity } from './user-settings.models'; - export const SETTINGS_FEATURE_KEY = 'settings'; + export interface UserSettingsPartialState { readonly [SETTINGS_FEATURE_KEY]: UserSettingsState; } @@ -23,13 +23,13 @@ export const initialUserSettingsState: UserSettingsState = { userSettings: createEmptyStateResource() }; -const reducer = createReducer( +const reducer: ActionReducer<UserSettingsState, Action> = createReducer( initialUserSettingsState, on(UserSettingsActions.loadUserSettings, (state: UserSettingsState): UserSettingsState => ({ ...state, userSettings: { ...state.userSettings, loading: true } })), - on(UserSettingsActions.loadUserSettingsSuccess, (state: UserSettingsState, action: LoadUserSettingsAction) => ({ + on(UserSettingsActions.loadUserSettingsSuccess, (state: UserSettingsState, action: LoadedUserSettingsAction) => ({ ...state, userSettings: createStateResource<UserSettingsResource>(action.userSettings) })), @@ -37,23 +37,21 @@ const reducer = createReducer( ...state, userSettings: createErrorStateResource<UserSettingsResource>(action.apiError) })), + on(UserSettingsActions.setUserSettings, (state: UserSettingsState): UserSettingsState => ({ ...state, userSettings: { ...state.userSettings, loading: true } })), - on(UserSettingsActions.setUserSettingsSuccess, (state: UserSettingsState, action: SetUserSettingsAction) => ({ + on(UserSettingsActions.setUserSettingsSuccess, (state: UserSettingsState, action: LoadedUserSettingsAction) => ({ ...state, - userSettings: { ...state.userSettings, loading: true } + userSettings: createStateResource<UserSettingsResource>(action.userSettings) })), on(UserSettingsActions.setUserSettingsFailure, (state: UserSettingsState, action: ApiErrorAction) => ({ ...state, userSettings: createErrorStateResource<UserSettingsResource>(action.apiError) - })), + })) ); -export function settingsReducer( - state: UserSettingsState | undefined, - action: Action -) { +export function userSettingsReducer(state: UserSettingsState, action: Action): UserSettingsState { return reducer(state, action); } diff --git a/goofy-client/libs/user-settings-shared/src/lib/user-settings-shared.module.ts b/goofy-client/libs/user-settings-shared/src/lib/user-settings-shared.module.ts index b3d04bbbe0ed8ccb86ccc32a8caefc737da91173..1d384a3a513634113441b1dc9ddb2267274fd1da 100644 --- a/goofy-client/libs/user-settings-shared/src/lib/user-settings-shared.module.ts +++ b/goofy-client/libs/user-settings-shared/src/lib/user-settings-shared.module.ts @@ -11,14 +11,14 @@ import * as fromUserSettings from './+state/user-settings.reducer'; CommonModule, StoreModule.forFeature( fromUserSettings.SETTINGS_FEATURE_KEY, - fromUserSettings.settingsReducer + fromUserSettings.userSettingsReducer ), EffectsModule.forFeature([UserSettingsEffects]), StoreModule.forFeature( fromUserSettings.SETTINGS_FEATURE_KEY, - fromUserSettings.settingsReducer + fromUserSettings.userSettingsReducer ), ], providers: [UserSettingsFacade], }) -export class UserSettingsSharedModule {} +export class UserSettingsSharedModule { }