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 { ModalService } from '~/app/shared/services/modal.service';
15 import { NotificationService } from '~/app/shared/services/notification.service';
16 import { SharedModule } from '~/app/shared/shared.module';
17 import { configureTestBed, PermissionHelper } from '~/testing/unit-test-helper';
18 import { PrometheusTabsComponent } from '../prometheus-tabs/prometheus-tabs.component';
19 import { SilenceListComponent } from './silence-list.component';
21 describe('SilenceListComponent', () => {
22 let component: SilenceListComponent;
23 let fixture: ComponentFixture<SilenceListComponent>;
24 let prometheusService: PrometheusService;
28 BrowserAnimationsModule,
30 ToastrModule.forRoot(),
32 HttpClientTestingModule,
35 declarations: [SilenceListComponent, PrometheusTabsComponent]
39 fixture = TestBed.createComponent(SilenceListComponent);
40 component = fixture.componentInstance;
41 prometheusService = TestBed.inject(PrometheusService);
44 it('should create', () => {
45 fixture.detectChanges();
46 expect(component).toBeTruthy();
49 it('should test all TableActions combinations', () => {
50 const permissionHelper: PermissionHelper = new PermissionHelper(component.permission);
51 const tableActions: TableActionsComponent = permissionHelper.setPermissionsAndGetActions(
52 component.tableActions
55 expect(tableActions).toEqual({
56 'create,update,delete': {
57 actions: ['Create', 'Recreate', 'Edit', 'Expire'],
58 primary: { multiple: 'Create', executing: 'Edit', single: 'Edit', no: 'Create' }
61 actions: ['Create', 'Recreate', 'Edit'],
62 primary: { multiple: 'Create', executing: 'Edit', single: 'Edit', no: 'Create' }
65 actions: ['Create', 'Recreate', 'Expire'],
66 primary: { multiple: 'Create', executing: 'Expire', single: 'Expire', no: 'Create' }
69 actions: ['Create', 'Recreate'],
70 primary: { multiple: 'Create', executing: 'Create', single: 'Create', no: 'Create' }
73 actions: ['Edit', 'Expire'],
74 primary: { multiple: 'Edit', executing: 'Edit', single: 'Edit', no: 'Edit' }
78 primary: { multiple: 'Edit', executing: 'Edit', single: 'Edit', no: 'Edit' }
82 primary: { multiple: 'Expire', executing: 'Expire', single: 'Expire', no: 'Expire' }
86 primary: { multiple: '', executing: '', single: '', no: '' }
91 describe('expire silence', () => {
92 const setSelectedSilence = (silenceName: string) =>
93 (component.selection.selected = [{ id: silenceName }]);
95 const expireSilence = () => {
96 component.expireSilence();
97 const deletion: CriticalConfirmationModalComponent = component.modalRef.componentInstance;
98 // deletion.modalRef = new BsModalRef();
100 deletion.callSubmitAction();
103 const expectSilenceToExpire = (silenceId: string) => {
104 setSelectedSilence(silenceId);
106 expect(prometheusService.expireSilence).toHaveBeenCalledWith(silenceId);
110 const mockObservable = () => of([]);
111 spyOn(component, 'refresh').and.callFake(mockObservable);
112 spyOn(prometheusService, 'expireSilence').and.callFake(mockObservable);
113 spyOn(TestBed.inject(ModalService), 'show').and.callFake((deletionClass, config) => {
115 componentInstance: Object.assign(new deletionClass(), config)
120 it('should expire a silence', () => {
121 const notificationService = TestBed.inject(NotificationService);
122 spyOn(notificationService, 'show').and.stub();
123 expectSilenceToExpire('someSilenceId');
124 expect(notificationService.show).toHaveBeenCalledWith(
125 NotificationType.success,
126 'Expired Silence someSilenceId',
133 it('should refresh after expiring a silence', () => {
134 expectSilenceToExpire('someId');
135 expect(component.refresh).toHaveBeenCalledTimes(1);
136 expectSilenceToExpire('someOtherId');
137 expect(component.refresh).toHaveBeenCalledTimes(2);