summaryrefslogtreecommitdiff
path: root/qa/qa/specs/features/shared_contexts/sends_and_resolves_test_alerts.rb
blob: 9623bcbb7b58bdd192bcfe3177e78a69b738056c (plain)
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