summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/prometheus/metric_group_spec.rb
blob: a68cdfe5fb2ae0980176a6cd5834417cfb11f7ad (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
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Gitlab::Prometheus::MetricGroup do
  describe '.common_metrics' do
    let!(:project_metric) { create(:prometheus_metric) }
    let!(:common_metric_group_a) { create(:prometheus_metric, :common, group: :aws_elb) }
    let!(:common_metric_group_b_q1) { create(:prometheus_metric, :common, group: :kubernetes) }
    let!(:common_metric_group_b_q2) { create(:prometheus_metric, :common, group: :kubernetes) }

    subject { described_class.common_metrics }

    it 'returns exactly two groups' do
      expect(subject.map(&:name)).to contain_exactly(
        'Response metrics (AWS ELB)', 'System metrics (Kubernetes)')
    end

    it 'returns exactly three metric queries' do
      expect(subject.flat_map(&:metrics).map(&:id)).to contain_exactly(
        common_metric_group_a.id, common_metric_group_b_q1.id,
        common_metric_group_b_q2.id)
    end

    it 'orders by priority' do
      priorities = subject.map(&:priority)
      names = subject.map(&:name)
      expect(priorities).to eq([10, 5])
      expect(names).to eq(['Response metrics (AWS ELB)', 'System metrics (Kubernetes)'])
    end
  end

  describe '.for_project' do
    let!(:other_project) { create(:project) }
    let!(:project_metric) { create(:prometheus_metric) }
    let!(:common_metric) { create(:prometheus_metric, :common, group: :aws_elb) }

    subject do
      described_class.for_project(other_project)
        .flat_map(&:metrics)
        .map(&:id)
    end

    it 'returns exactly one common metric' do
      is_expected.to contain_exactly(common_metric.id)
    end
  end
end