summaryrefslogtreecommitdiff
path: root/spec/support/helpers/metrics_dashboard_helpers.rb
blob: 6de00eea47469312b972476e7c2c6cd4c94dbed2 (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
# frozen_string_literal: true

module MetricsDashboardHelpers
  def project_with_dashboard(dashboard_path, dashboard_yml = nil)
    dashboard_yml ||= fixture_file('lib/gitlab/metrics/dashboard/sample_dashboard.yml')

    create(:project, :custom_repo, files: { dashboard_path => dashboard_yml })
  end

  def delete_project_dashboard(project, user, dashboard_path)
    project.repository.delete_file(
      user,
      dashboard_path,
      branch_name: 'master',
      message: 'Delete dashboard'
    )

    project.repository.refresh_method_caches([:metrics_dashboard])
  end

  shared_examples_for 'misconfigured dashboard service response' do |status_code|
    it 'returns an appropriate message and status code' do
      result = service_call

      expect(result.keys).to contain_exactly(:message, :http_status, :status)
      expect(result[:status]).to eq(:error)
      expect(result[:http_status]).to eq(status_code)
    end
  end

  shared_examples_for 'valid dashboard service response for schema' do
    it 'returns a json representation of the dashboard' do
      result = service_call

      expect(result.keys).to contain_exactly(:dashboard, :status)
      expect(result[:status]).to eq(:success)

      expect(JSON::Validator.fully_validate(dashboard_schema, result[:dashboard])).to be_empty
    end
  end

  shared_examples_for 'valid dashboard service response' do
    let(:dashboard_schema) { JSON.parse(fixture_file('lib/gitlab/metrics/dashboard/schemas/dashboard.json')) }

    it_behaves_like 'valid dashboard service response for schema'
  end

  shared_examples_for 'valid embedded dashboard service response' do
    let(:dashboard_schema) { JSON.parse(fixture_file('lib/gitlab/metrics/dashboard/schemas/embedded_dashboard.json')) }

    it_behaves_like 'valid dashboard service response for schema'
  end
end