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 { BsModalRef, BsModalService, ModalModule } from 'ngx-bootstrap/modal';
7 import { ToastrModule } from 'ngx-toastr';
8 import { of } from 'rxjs';
14 } from '../../../../../testing/unit-test-helper';
15 import { PrometheusService } from '../../../../shared/api/prometheus.service';
16 import { CriticalConfirmationModalComponent } from '../../../../shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
17 import { TableActionsComponent } from '../../../../shared/datatable/table-actions/table-actions.component';
18 import { NotificationType } from '../../../../shared/enum/notification-type.enum';
19 import { NotificationService } from '../../../../shared/services/notification.service';
20 import { SharedModule } from '../../../../shared/shared.module';
21 import { SilenceListComponent } from './silence-list.component';
23 describe('SilenceListComponent', () => {
24 let component: SilenceListComponent;
25 let fixture: ComponentFixture<SilenceListComponent>;
26 let prometheusService: PrometheusService;
30 BrowserAnimationsModule,
32 ModalModule.forRoot(),
33 ToastrModule.forRoot(),
35 HttpClientTestingModule
37 declarations: [SilenceListComponent],
38 providers: [i18nProviders]
42 fixture = TestBed.createComponent(SilenceListComponent);
43 component = fixture.componentInstance;
44 prometheusService = TestBed.inject(PrometheusService);
47 it('should create', () => {
48 fixture.detectChanges();
49 expect(component).toBeTruthy();
52 it('should test all TableActions combinations', () => {
53 const permissionHelper: PermissionHelper = new PermissionHelper(component.permission);
54 const tableActions: TableActionsComponent = permissionHelper.setPermissionsAndGetActions(
55 component.tableActions
58 expect(tableActions).toEqual({
59 'create,update,delete': {
60 actions: ['Create', 'Recreate', 'Edit', 'Expire'],
61 primary: { multiple: 'Create', executing: 'Edit', single: 'Edit', no: 'Create' }
64 actions: ['Create', 'Recreate', 'Edit'],
65 primary: { multiple: 'Create', executing: 'Edit', single: 'Edit', no: 'Create' }
68 actions: ['Create', 'Recreate', 'Expire'],
69 primary: { multiple: 'Create', executing: 'Expire', single: 'Expire', no: 'Create' }
72 actions: ['Create', 'Recreate'],
73 primary: { multiple: 'Create', executing: 'Create', single: 'Create', no: 'Create' }
76 actions: ['Edit', 'Expire'],
77 primary: { multiple: 'Edit', executing: 'Edit', single: 'Edit', no: 'Edit' }
81 primary: { multiple: 'Edit', executing: 'Edit', single: 'Edit', no: 'Edit' }
85 primary: { multiple: 'Expire', executing: 'Expire', single: 'Expire', no: 'Expire' }
89 primary: { multiple: '', executing: '', single: '', no: '' }
94 describe('expire silence', () => {
95 const setSelectedSilence = (silenceName: string) =>
96 (component.selection.selected = [{ id: silenceName }]);
98 const expireSilence = () => {
99 component.expireSilence();
100 const deletion: CriticalConfirmationModalComponent = component.modalRef.content;
101 deletion.modalRef = new BsModalRef();
103 deletion.callSubmitAction();
106 const expectSilenceToExpire = (silenceId: string) => {
107 setSelectedSilence(silenceId);
109 expect(prometheusService.expireSilence).toHaveBeenCalledWith(silenceId);
113 const mockObservable = () => of([]);
114 spyOn(component, 'refresh').and.callFake(mockObservable);
115 spyOn(prometheusService, 'expireSilence').and.callFake(mockObservable);
116 spyOn(TestBed.inject(BsModalService), 'show').and.callFake((deletionClass, config) => {
118 content: Object.assign(new deletionClass(), config.initialState)
123 it('should expire a silence', () => {
124 const notificationService = TestBed.inject(NotificationService);
125 spyOn(notificationService, 'show').and.stub();
126 expectSilenceToExpire('someSilenceId');
127 expect(notificationService.show).toHaveBeenCalledWith(
128 NotificationType.success,
129 'Expired Silence someSilenceId',
136 it('should refresh after expiring a silence', () => {
137 expectSilenceToExpire('someId');
138 expect(component.refresh).toHaveBeenCalledTimes(1);
139 expectSilenceToExpire('someOtherId');
140 expect(component.refresh).toHaveBeenCalledTimes(2);