Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/presenters/projects/prometheus/alert_presenter_spec.rb')
-rw-r--r--spec/presenters/projects/prometheus/alert_presenter_spec.rb100
1 files changed, 40 insertions, 60 deletions
diff --git a/spec/presenters/projects/prometheus/alert_presenter_spec.rb b/spec/presenters/projects/prometheus/alert_presenter_spec.rb
index 8ee5a4d7b3f..89c5438b074 100644
--- a/spec/presenters/projects/prometheus/alert_presenter_spec.rb
+++ b/spec/presenters/projects/prometheus/alert_presenter_spec.rb
@@ -2,7 +2,9 @@
require 'spec_helper'
-describe Projects::Prometheus::AlertPresenter do
+RSpec.describe Projects::Prometheus::AlertPresenter do
+ include Gitlab::Routing.url_helpers
+
let_it_be(:project, reload: true) { create(:project) }
let(:presenter) { described_class.new(alert) }
@@ -14,7 +16,7 @@ describe Projects::Prometheus::AlertPresenter do
let(:metric_id) { gitlab_alert.prometheus_metric_id }
let(:alert) do
- create(:alerting_alert, project: project, metric_id: metric_id)
+ create(:alerting_alert, project: project, metric_id: metric_id, payload: payload)
end
end
@@ -171,7 +173,7 @@ describe Projects::Prometheus::AlertPresenter do
**Start time:** #{presenter.start_time}#{markdown_line_break}
**full_query:** `avg(metric) > 1.0`
- [](#{url})
+ [](#{presenter.metrics_dashboard_url})
MARKDOWN
end
@@ -180,68 +182,30 @@ describe Projects::Prometheus::AlertPresenter do
Timecop.freeze(starts_at) { example.run }
end
+ before do
+ payload.delete('startsAt')
+ end
+
it { is_expected.to eq(expected_markdown) }
end
context 'with a starting time available' do
- before do
- payload['startsAt'] = starts_at
- end
-
it { is_expected.to eq(expected_markdown) }
end
end
context 'for gitlab-managed prometheus alerts' do
- let(:gitlab_alert) { create(:prometheus_alert, project: project) }
- let(:metric_id) { gitlab_alert.prometheus_metric_id }
- let(:env_id) { gitlab_alert.environment_id }
+ include_context 'gitlab-managed prometheus alert attributes'
- before do
- payload['labels'] = { 'gitlab_alert_id' => metric_id }
+ let(:alert) do
+ create(:alerting_alert, project: project, metric_id: prometheus_metric_id, payload: payload)
end
- let(:url) { "http://localhost/#{project.full_path}/prometheus/alerts/#{metric_id}/metrics_dashboard?end=2018-03-12T09%3A36%3A00Z&environment_id=#{env_id}&start=2018-03-12T08%3A36%3A00Z" }
-
it_behaves_like 'markdown with metrics embed'
end
context 'for alerts from a self-managed prometheus' do
- let!(:environment) { create(:environment, project: project, name: 'production') }
- let(:url) { "http://localhost/#{project.full_path}/-/environments/#{environment.id}/metrics_dashboard?embed_json=#{CGI.escape(embed_content.to_json)}&end=2018-03-12T09%3A36%3A00Z&start=2018-03-12T08%3A36%3A00Z" }
-
- let(:title) { 'title' }
- let(:y_label) { 'y_label' }
- let(:query) { 'avg(metric) > 1.0' }
- let(:embed_content) do
- {
- panel_groups: [{
- panels: [{
- type: 'line-graph',
- title: title,
- y_label: y_label,
- metrics: [{ query_range: query }]
- }]
- }]
- }
- end
-
- before do
- # Setup embed time range
- payload['startsAt'] = starts_at
-
- # Setup query
- payload['generatorURL'] = "http://host?g0.expr=#{CGI.escape(query)}"
-
- # Setup environment
- payload['labels'] ||= {}
- payload['labels']['gitlab_environment_name'] = 'production'
-
- # Setup chart title & axis labels
- payload['annotations'] ||= {}
- payload['annotations']['title'] = 'title'
- payload['annotations']['gitlab_y_label'] = 'y_label'
- end
+ include_context 'self-managed prometheus alert attributes'
it_behaves_like 'markdown with metrics embed'
@@ -359,10 +323,7 @@ describe Projects::Prometheus::AlertPresenter do
end
describe '#performance_dashboard_link' do
- let(:expected_link) do
- Gitlab::Routing.url_helpers
- .metrics_project_environment_url(project, alert.environment)
- end
+ let(:expected_link) { metrics_project_environment_url(project, alert.environment) }
subject { presenter.performance_dashboard_link }
@@ -370,10 +331,7 @@ describe Projects::Prometheus::AlertPresenter do
end
describe '#incident_issues_link' do
- let(:expected_link) do
- Gitlab::Routing.url_helpers
- .project_issues_url(project, label_name: described_class::INCIDENT_LABEL_NAME)
- end
+ let(:expected_link) { project_issues_url(project, label_name: described_class::INCIDENT_LABEL_NAME) }
subject { presenter.incident_issues_link }
@@ -413,13 +371,35 @@ describe Projects::Prometheus::AlertPresenter do
end
describe '#performance_dashboard_link' do
- let(:expected_link) do
- Gitlab::Routing.url_helpers.metrics_project_environments_url(project)
- end
+ let(:expected_link) { metrics_project_environments_url(project) }
subject { presenter.performance_dashboard_link }
it { is_expected.to eq(expected_link) }
end
end
+
+ describe '#metrics_dashboard_url' do
+ subject { presenter.metrics_dashboard_url }
+
+ context 'for a non-prometheus alert' do
+ it { is_expected.to be_nil }
+ end
+
+ context 'for a self-managed prometheus alert' do
+ include_context 'self-managed prometheus alert attributes'
+
+ let(:prometheus_payload) { payload }
+
+ it { is_expected.to eq(dashboard_url_for_alert) }
+ end
+
+ context 'for a gitlab-managed prometheus alert' do
+ include_context 'gitlab-managed prometheus alert attributes'
+
+ let(:prometheus_payload) { payload }
+
+ it { is_expected.to eq(dashboard_url_for_alert) }
+ end
+ end
end