1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TestBed } from '@angular/core/testing';
import { ToastrModule } from 'ngx-toastr';
import { configureTestBed, PrometheusHelper } from '~/testing/unit-test-helper';
import { NotificationType } from '../enum/notification-type.enum';
import { CdNotificationConfig } from '../models/cd-notification';
import { PrometheusCustomAlert } from '../models/prometheus-alerts';
import { SharedModule } from '../shared.module';
import { NotificationService } from './notification.service';
import { PrometheusAlertFormatter } from './prometheus-alert-formatter';
describe('PrometheusAlertFormatter', () => {
let service: PrometheusAlertFormatter;
let notificationService: NotificationService;
let prometheus: PrometheusHelper;
configureTestBed({
imports: [ToastrModule.forRoot(), SharedModule, HttpClientTestingModule],
providers: [PrometheusAlertFormatter]
});
beforeEach(() => {
prometheus = new PrometheusHelper();
service = TestBed.inject(PrometheusAlertFormatter);
notificationService = TestBed.inject(NotificationService);
spyOn(notificationService, 'show').and.stub();
});
it('should create', () => {
expect(service).toBeTruthy();
});
describe('sendNotifications', () => {
it('should not call queue notifications with no notification', () => {
service.sendNotifications([]);
expect(notificationService.show).not.toHaveBeenCalled();
});
it('should call queue notifications with notifications', () => {
const notifications = [new CdNotificationConfig(NotificationType.success, 'test')];
service.sendNotifications(notifications);
expect(notificationService.show).toHaveBeenCalledWith(notifications[0]);
});
});
describe('convertToCustomAlert', () => {
it('converts PrometheusAlert', () => {
expect(service.convertToCustomAlerts([prometheus.createAlert('Something')])).toEqual([
{
status: 'active',
name: 'Something',
description: 'Something is active',
url: 'http://Something',
fingerprint: 'Something'
} as PrometheusCustomAlert
]);
});
it('converts PrometheusNotificationAlert', () => {
expect(
service.convertToCustomAlerts([prometheus.createNotificationAlert('Something')])
).toEqual([
{
fingerprint: false,
status: 'active',
name: 'Something',
description: 'Something is firing',
url: 'http://Something'
} as PrometheusCustomAlert
]);
});
});
it('converts custom alert into notification', () => {
const alert: PrometheusCustomAlert = {
status: 'active',
name: 'Some alert',
description: 'Some alert is active',
url: 'http://some-alert',
fingerprint: '42'
};
expect(service.convertAlertToNotification(alert)).toEqual(
new CdNotificationConfig(
NotificationType.error,
'Some alert (active)',
'Some alert is active <a href="http://some-alert" target="_blank">' +
'<i class="fa fa-line-chart"></i></a>',
undefined,
'Prometheus'
)
);
});
});
|