diff --git a/goofy-client/libs/user-settings-shared/src/lib/user-settings.service.ts b/goofy-client/libs/user-settings-shared/src/lib/user-settings.service.ts index 20fa1ad04f40fece2cd4d5d7b210c34351ec92fb..29ddc9c17fdd4091ba6d76b1518abefac4a90705 100644 --- a/goofy-client/libs/user-settings-shared/src/lib/user-settings.service.ts +++ b/goofy-client/libs/user-settings-shared/src/lib/user-settings.service.ts @@ -5,9 +5,8 @@ import { combineLatest, Observable } from 'rxjs'; import { map, startWith, tap } from 'rxjs/operators'; import { UserSettingsFacade } from './+state/user-settings.facade'; import { UserSettings, UserSettingsResource } from './user-settings.model'; -@Injectable({ - providedIn: 'root', -}) + +@Injectable({ providedIn: 'root' }) export class UserSettingsService { constructor( @@ -15,11 +14,8 @@ export class UserSettingsService { private userProfileService: UserProfileService, ) { } - getUserSettings(): Observable<StateResource<UserSettingsResource>> { - const userProfile$ = this.userProfileService.getCurrentUser(); - const userSetting$ = this.userSettingsFacade.getUserSettings(); - - return combineLatest([userProfile$, userSetting$]).pipe( + public getUserSettings(): Observable<StateResource<UserSettingsResource>> { + return combineLatest([this.userProfileService.getCurrentUser(), this.userSettingsFacade.getUserSettings()]).pipe( tap(([userProfile, userSettings]) => doIfLoadingRequired(userSettings, () => { if (userProfile.resource) { this.userSettingsFacade.loadUserSettings(userProfile.resource); @@ -30,7 +26,7 @@ export class UserSettingsService { ); } - setUserSettings(userSettings: UserSettings): void { + public setUserSettings(userSettings: UserSettings): void { this.userSettingsFacade.setUserSettings(userSettings); } } diff --git a/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.html b/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.html index 05fd7991e3081860d12f10a6cee4d00e43ee3fd5..7cff27785933adb77a43e9155b796fd3efb9d9d8 100644 --- a/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.html +++ b/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.html @@ -1,8 +1,5 @@ -<goofy-client-icon-button-with-spinner - icon="settings" - toolTip="Einstellungen" - [matMenuTriggerFor]="settingsMenu" -> +<goofy-client-icon-button-with-spinner icon="settings" toolTip="Einstellungen" + [matMenuTriggerFor]="settingsMenu"> </goofy-client-icon-button-with-spinner> <mat-menu #settingsMenu="matMenu"> diff --git a/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.spec.ts b/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.spec.ts index 060f014d0d3064ac4b32e385ba1d7d32f464637a..d11f9673e482b3b32a9c60b9f203382028210041 100644 --- a/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.spec.ts +++ b/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.spec.ts @@ -4,20 +4,21 @@ import { AppService } from '@goofy-client/app-shared'; import { mock } from '@goofy-client/test-utils'; import { IconButtonWithSpinnerComponent } from '@goofy-client/ui'; import { UserSettingsService } from '@goofy-client/user-settings-shared'; +import { NotificationsSendFor } from 'libs/user-settings-shared/src/lib/user-settings.model'; import { MockComponent } from 'ng-mocks'; import { BehaviorSubject } from 'rxjs'; import { UserSettingsContainerComponent } from './user-settings-container.component'; import { UserSettingsDarkmodeComponent } from './user-settings-darkmode/user-settings-darkmode.component'; import { UserSettingsEmailBenachrichtigungComponent } from './user-settings-email-benachrichtigung/user-settings-email-benachrichtigung.component'; -const darkModeSubj: BehaviorSubject<boolean> = new BehaviorSubject(false); -const appService = { ...mock(AppService), getDarkMode: () => darkModeSubj }; -const userSettingsService = mock(UserSettingsService); - describe('UserSettingsContainerComponent', () => { let component: UserSettingsContainerComponent; let fixture: ComponentFixture<UserSettingsContainerComponent>; + const darkModeSubj: BehaviorSubject<boolean> = new BehaviorSubject(false); + const appService = { ...mock(AppService), getDarkMode: () => darkModeSubj }; + const userSettingsService = { ...mock(UserSettingsService), setUserSettings: jest.fn() }; + beforeEach(async () => { await TestBed.configureTestingModule({ imports: [MatMenuModule], @@ -37,8 +38,10 @@ describe('UserSettingsContainerComponent', () => { useValue: userSettingsService } ], - }).compileComponents(); + }); + }); + beforeEach(() => { fixture = TestBed.createComponent(UserSettingsContainerComponent); component = fixture.componentInstance; fixture.detectChanges(); @@ -47,4 +50,28 @@ describe('UserSettingsContainerComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + describe('change color mode', () => { + + it('should call app service', () => { + component.changeColorMode(true); + + expect(appService.setDarkMode).toHaveBeenCalledWith(true); + }) + }) + + describe('change notifications send for', () => { + + it('should call service with ALL', () => { + component.changeNotificationsSendFor(true); + + expect(userSettingsService.setUserSettings).toHaveBeenCalledWith({ notificationsSendFor: NotificationsSendFor.ALL }); + }) + + it('should call service with NONE', () => { + component.changeNotificationsSendFor(false); + + expect(userSettingsService.setUserSettings).toHaveBeenCalledWith({ notificationsSendFor: NotificationsSendFor.NONE }); + }) + }) }); diff --git a/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.ts b/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.ts index 08cf8216237caacf0bc2557163953e312b99bb03..3ebe11daa5b45cdd973c475cd500f065bc3581d2 100644 --- a/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.ts +++ b/goofy-client/libs/user-settings/src/lib/user-settings-container/user-settings-container.component.ts @@ -3,7 +3,7 @@ import { Component, Inject, OnInit, Renderer2 } from '@angular/core'; import { AppService, localStorageDark } from '@goofy-client/app-shared'; import { StateResource } from '@goofy-client/tech-shared'; import { UserSettingsService } from '@goofy-client/user-settings-shared'; -import { NotificationsSendFor, UserSettingsResource } from 'libs/user-settings-shared/src/lib/user-settings.model'; +import { NotificationsSendFor, UserSettings, UserSettingsResource } from 'libs/user-settings-shared/src/lib/user-settings.model'; import { Observable, of } from 'rxjs'; @Component({ @@ -50,8 +50,12 @@ export class UserSettingsContainerComponent implements OnInit { this.appService.setDarkMode(darkMode); } - changeNotificationsSendFor(value: boolean): void { - const notificationsSendFor: string = value ? NotificationsSendFor.ALL : NotificationsSendFor.NONE; - this.userSettingsService.setUserSettings({ notificationsSendFor }); + changeNotificationsSendFor(toggleValue: boolean): void { + this.userSettingsService.setUserSettings(this.createUserSettings(toggleValue)); } -} + + private createUserSettings(toggleValue: boolean): UserSettings { + const notificationsSendFor: NotificationsSendFor = toggleValue ? NotificationsSendFor.ALL : NotificationsSendFor.NONE; + return { notificationsSendFor }; + } +} \ No newline at end of file