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
|
# frozen_string_literal: true
module QA
RSpec.shared_context 'sends and resolves test alerts' do
let(:project) do
Resource::Project.fabricate_via_api! do |project|
project.name = 'project-for-alerts'
project.description = 'Project for alerts'
end
end
let(:resolve_title) { Faker::Lorem.sentence }
let(:unresolve_title) { Faker::Lorem.sentence }
let(:http) { true }
let(:payload_to_be_resolved) do
payload(resolve_title, http)
end
let(:unresolved_payload) do
payload(unresolve_title, http)
end
before do
http ? Flow::AlertSettings.setup_http_endpoint_integration : Flow::AlertSettings.setup_prometheus_integration
[payload_to_be_resolved, unresolved_payload].each do |payload|
Flow::AlertSettings.send_test_alert(payload: payload)
end
mark_as_resolved(payload_to_be_resolved, http)
Flow::AlertSettings.send_test_alert(payload: payload_to_be_resolved)
end
private
def mark_as_resolved(payload, http)
sleep 3 # To ensure create and end time are different
if http
payload[:end_time] = Time.now
else
payload[:alerts][0][:status] = 'resolved'
payload[:alerts][0][:endsAt] = Time.now
end
end
def payload(title, http)
if http
{ title: title, description: title }
else
{
version: '4',
groupKey: nil,
status: 'firing',
receiver: '',
groupLabels: {},
commonLabels: {},
commonAnnotations: {},
externalURL: '',
alerts: [
{
startsAt: Time.now,
generatorURL: Faker::Internet.url,
endsAt: nil,
status: nil,
labels: { gitlab_environment_name: Faker::Lorem.word },
annotations: { title: title }
}
]
}
end
end
end
end
|