diff options
Diffstat (limited to 'spec/lib/gitlab/metrics_dashboard')
-rw-r--r-- | spec/lib/gitlab/metrics_dashboard/processor_spec.rb | 26 | ||||
-rw-r--r-- | spec/lib/gitlab/metrics_dashboard/service_spec.rb | 16 |
2 files changed, 42 insertions, 0 deletions
diff --git a/spec/lib/gitlab/metrics_dashboard/processor_spec.rb b/spec/lib/gitlab/metrics_dashboard/processor_spec.rb index 1bd905989fe..9a4897944c6 100644 --- a/spec/lib/gitlab/metrics_dashboard/processor_spec.rb +++ b/spec/lib/gitlab/metrics_dashboard/processor_spec.rb @@ -47,6 +47,32 @@ describe Gitlab::MetricsDashboard::Processor do expect(actual_metrics_order).to eq expected_metrics_order end end + + shared_examples_for 'errors with message' do |expected_message| + it 'raises a DashboardLayoutError' do + error_class = Gitlab::MetricsDashboard::Stages::BaseStage::DashboardLayoutError + + expect { dashboard }.to raise_error(error_class, expected_message) + end + end + + context 'when the dashboard is missing panel_groups' do + let(:dashboard_yml) { {} } + + it_behaves_like 'errors with message', 'Top-level key :panel_groups must be an array' + end + + context 'when the dashboard contains a panel_group which is missing panels' do + let(:dashboard_yml) { { panel_groups: [{}] } } + + it_behaves_like 'errors with message', 'Each "panel_group" must define an array :panels' + end + + context 'when the dashboard contains a panel which is missing metrics' do + let(:dashboard_yml) { { panel_groups: [{ panels: [{}] }] } } + + it_behaves_like 'errors with message', 'Each "panel" must define an array :metrics' + end end private diff --git a/spec/lib/gitlab/metrics_dashboard/service_spec.rb b/spec/lib/gitlab/metrics_dashboard/service_spec.rb index 710c71fd6bd..38c7942f250 100644 --- a/spec/lib/gitlab/metrics_dashboard/service_spec.rb +++ b/spec/lib/gitlab/metrics_dashboard/service_spec.rb @@ -24,5 +24,21 @@ describe Gitlab::MetricsDashboard::Service, :use_clean_rails_memory_store_cachin described_class.new(project, environment).get_dashboard described_class.new(project, environment).get_dashboard end + + context 'when the dashboard is configured incorrectly' do + let(:bad_dashboard) { {} } + + before do + allow(described_class).to receive(:system_dashboard).and_return(bad_dashboard) + end + + it 'returns an appropriate message and status code' do + result = described_class.new(project, environment).get_dashboard + + expect(result.keys).to contain_exactly(:message, :http_status, :status) + expect(result[:status]).to eq(:error) + expect(result[:status]).to eq(:unprocessable_entity) + end + end end end |