]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/telemetry-notification/telemetry-notification.component.spec.ts
Import ceph 15.2.8
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / app / shared / components / telemetry-notification / telemetry-notification.component.spec.ts
CommitLineData
f6b5b4d7
TL
1import { HttpClientTestingModule } from '@angular/common/http/testing';
2import { ComponentFixture, TestBed } from '@angular/core/testing';
3
4import { ToastrModule } from 'ngx-toastr';
5import { of } from 'rxjs';
6
7import { AlertModule } from 'ngx-bootstrap/alert';
8
9import { configureTestBed, i18nProviders } from '../../../../testing/unit-test-helper';
f6b5b4d7
TL
10import { MgrModuleService } from '../../api/mgr-module.service';
11import { UserService } from '../../api/user.service';
f91f0fd5 12import { Permissions } from '../../models/permissions';
f6b5b4d7
TL
13import { PipesModule } from '../../pipes/pipes.module';
14import { AuthStorageService } from '../../services/auth-storage.service';
15import { NotificationService } from '../../services/notification.service';
16import { TelemetryNotificationService } from '../../services/telemetry-notification.service';
17import { TelemetryNotificationComponent } from './telemetry-notification.component';
18
19describe('TelemetryActivationNotificationComponent', () => {
20 let component: TelemetryNotificationComponent;
21 let fixture: ComponentFixture<TelemetryNotificationComponent>;
22
23 let authStorageService: AuthStorageService;
f6b5b4d7
TL
24 let mgrModuleService: MgrModuleService;
25 let notificationService: NotificationService;
26
27 let isNotificationHiddenSpy: jasmine.Spy;
f91f0fd5 28 let getPermissionsSpy: jasmine.Spy;
f6b5b4d7
TL
29 let getConfigSpy: jasmine.Spy;
30
f91f0fd5
TL
31 const configOptPermissions: Permissions = new Permissions({
32 'config-opt': ['read', 'create', 'update', 'delete']
33 });
34 const noConfigOptPermissions: Permissions = new Permissions({});
f6b5b4d7
TL
35 const telemetryEnabledConfig = {
36 enabled: true
37 };
38 const telemetryDisabledConfig = {
39 enabled: false
40 };
41
42 configureTestBed({
43 declarations: [TelemetryNotificationComponent],
44 imports: [AlertModule.forRoot(), HttpClientTestingModule, ToastrModule.forRoot(), PipesModule],
45 providers: [MgrModuleService, UserService, i18nProviders]
46 });
47
48 beforeEach(() => {
49 fixture = TestBed.createComponent(TelemetryNotificationComponent);
50 component = fixture.componentInstance;
51 authStorageService = TestBed.get(AuthStorageService);
f6b5b4d7
TL
52 mgrModuleService = TestBed.get(MgrModuleService);
53 notificationService = TestBed.get(NotificationService);
54
55 isNotificationHiddenSpy = spyOn(component, 'isNotificationHidden').and.returnValue(false);
f91f0fd5
TL
56 getPermissionsSpy = spyOn(authStorageService, 'getPermissions').and.returnValue(
57 configOptPermissions
58 );
f6b5b4d7
TL
59 getConfigSpy = spyOn(mgrModuleService, 'getConfig').and.returnValue(
60 of(telemetryDisabledConfig)
61 );
62 });
63
64 it('should create', () => {
65 fixture.detectChanges();
66 expect(component).toBeTruthy();
67 });
68
69 it('should not show notification again if the user closed it before', () => {
70 isNotificationHiddenSpy.and.returnValue(true);
71 fixture.detectChanges();
72 expect(component.displayNotification).toBe(false);
73 });
74
f91f0fd5
TL
75 it('should not show notification for a user without configOpt permissions', () => {
76 getPermissionsSpy.and.returnValue(noConfigOptPermissions);
f6b5b4d7
TL
77 fixture.detectChanges();
78 expect(component.displayNotification).toBe(false);
79 });
80
81 it('should not show notification if the module is enabled already', () => {
f6b5b4d7
TL
82 getConfigSpy.and.returnValue(of(telemetryEnabledConfig));
83 fixture.detectChanges();
84 expect(component.displayNotification).toBe(false);
85 });
86
87 it('should show the notification if all pre-conditions set accordingly', () => {
88 fixture.detectChanges();
89 expect(component.displayNotification).toBe(true);
90 });
91
92 it('should hide the notification if the user closes it', () => {
93 spyOn(notificationService, 'show');
94 fixture.detectChanges();
95 component.close();
96 expect(notificationService.show).toHaveBeenCalled();
97 expect(localStorage.getItem('telemetry_notification_hidden')).toBe('true');
98 });
99
100 it('should hide the notification if the user logs out', () => {
101 const telemetryNotificationService = TestBed.get(TelemetryNotificationService);
102 spyOn(telemetryNotificationService, 'setVisibility');
103 fixture.detectChanges();
104 component.ngOnDestroy();
105 expect(telemetryNotificationService.setVisibility).toHaveBeenCalledWith(false);
106 });
107});