1 import { HttpClientTestingModule } from '@angular/common/http/testing';
2 import { ComponentFixture, TestBed } from '@angular/core/testing';
3 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
4 import { RouterTestingModule } from '@angular/router/testing';
6 import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap';
7 import { ToastrModule } from 'ngx-toastr';
8 import { of } from 'rxjs';
10 import { PrometheusService } from '~/app/shared/api/prometheus.service';
11 import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
12 import { TableActionsComponent } from '~/app/shared/datatable/table-actions/table-actions.component';
13 import { NotificationType } from '~/app/shared/enum/notification-type.enum';
14 import { Permission } from '~/app/shared/models/permissions';
15 import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
16 import { ModalService } from '~/app/shared/services/modal.service';
17 import { NotificationService } from '~/app/shared/services/notification.service';
18 import { SharedModule } from '~/app/shared/shared.module';
19 import { configureTestBed, PermissionHelper } from '~/testing/unit-test-helper';
20 import { PrometheusTabsComponent } from '../prometheus-tabs/prometheus-tabs.component';
21 import { SilenceListComponent } from './silence-list.component';
23 describe('SilenceListComponent', () => {
24 let component: SilenceListComponent;
25 let fixture: ComponentFixture<SilenceListComponent>;
26 let prometheusService: PrometheusService;
27 let authStorageService: AuthStorageService;
28 let prometheusPermissions: Permission;
32 BrowserAnimationsModule,
34 ToastrModule.forRoot(),
36 HttpClientTestingModule,
39 declarations: [SilenceListComponent, PrometheusTabsComponent]
43 authStorageService = TestBed.inject(AuthStorageService);
44 prometheusPermissions = new Permission(['update', 'delete', 'read', 'create']);
45 spyOn(authStorageService, 'getPermissions').and.callFake(() => ({
46 prometheus: prometheusPermissions
48 fixture = TestBed.createComponent(SilenceListComponent);
49 component = fixture.componentInstance;
50 prometheusService = TestBed.inject(PrometheusService);
53 it('should create', () => {
54 fixture.detectChanges();
55 expect(component).toBeTruthy();
58 it('should test all TableActions combinations', () => {
59 const permissionHelper: PermissionHelper = new PermissionHelper(component.permission);
60 const tableActions: TableActionsComponent = permissionHelper.setPermissionsAndGetActions(
61 component.tableActions
64 expect(tableActions).toEqual({
65 'create,update,delete': {
66 actions: ['Create', 'Recreate', 'Edit', 'Expire'],
75 actions: ['Create', 'Recreate', 'Edit'],
84 actions: ['Create', 'Recreate', 'Expire'],
93 actions: ['Create', 'Recreate'],
102 actions: ['Edit', 'Expire'],
140 describe('expire silence', () => {
141 const setSelectedSilence = (silenceName: string) =>
142 (component.selection.selected = [{ id: silenceName }]);
144 const expireSilence = () => {
145 component.expireSilence();
146 const deletion: CriticalConfirmationModalComponent = component.modalRef.componentInstance;
147 // deletion.modalRef = new BsModalRef();
149 deletion.callSubmitAction();
152 const expectSilenceToExpire = (silenceId: string) => {
153 setSelectedSilence(silenceId);
155 expect(prometheusService.expireSilence).toHaveBeenCalledWith(silenceId);
159 const mockObservable = () => of([]);
160 spyOn(component, 'refresh').and.callFake(mockObservable);
161 spyOn(prometheusService, 'expireSilence').and.callFake(mockObservable);
162 spyOn(TestBed.inject(ModalService), 'show').and.callFake((deletionClass, config) => {
164 componentInstance: Object.assign(new deletionClass(), config)
169 it('should expire a silence', () => {
170 const notificationService = TestBed.inject(NotificationService);
171 spyOn(notificationService, 'show').and.stub();
172 expectSilenceToExpire('someSilenceId');
173 expect(notificationService.show).toHaveBeenCalledWith(
174 NotificationType.success,
175 'Expired Silence someSilenceId',
182 it('should refresh after expiring a silence', () => {
183 expectSilenceToExpire('someId');
184 expect(component.refresh).toHaveBeenCalledTimes(1);
185 expectSilenceToExpire('someOtherId');
186 expect(component.refresh).toHaveBeenCalledTimes(2);