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:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-07-20 15:26:25 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-07-20 15:26:25 +0300
commita09983ae35713f5a2bbb100981116d31ce99826e (patch)
tree2ee2af7bd104d57086db360a7e6d8c9d5d43667a /spec/models/alert_management
parent18c5ab32b738c0b6ecb4d0df3994000482f34bd8 (diff)
Add latest changes from gitlab-org/gitlab@13-2-stable-ee
Diffstat (limited to 'spec/models/alert_management')
-rw-r--r--spec/models/alert_management/alert_assignee_spec.rb2
-rw-r--r--spec/models/alert_management/alert_spec.rb119
-rw-r--r--spec/models/alert_management/alert_user_mention_spec.rb2
3 files changed, 113 insertions, 10 deletions
diff --git a/spec/models/alert_management/alert_assignee_spec.rb b/spec/models/alert_management/alert_assignee_spec.rb
index c51a5d543ab..c50a3ec0d01 100644
--- a/spec/models/alert_management/alert_assignee_spec.rb
+++ b/spec/models/alert_management/alert_assignee_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe AlertManagement::AlertAssignee do
+RSpec.describe AlertManagement::AlertAssignee do
describe 'associations' do
it { is_expected.to belong_to(:alert) }
it { is_expected.to belong_to(:assignee) }
diff --git a/spec/models/alert_management/alert_spec.rb b/spec/models/alert_management/alert_spec.rb
index 27b8bb48073..becc5475c15 100644
--- a/spec/models/alert_management/alert_spec.rb
+++ b/spec/models/alert_management/alert_spec.rb
@@ -2,10 +2,12 @@
require 'spec_helper'
-describe AlertManagement::Alert do
+RSpec.describe AlertManagement::Alert do
describe 'associations' do
it { is_expected.to belong_to(:project) }
- it { is_expected.to belong_to(:issue) }
+ it { is_expected.to belong_to(:issue).optional }
+ it { is_expected.to belong_to(:prometheus_alert).optional }
+ it { is_expected.to belong_to(:environment).optional }
it { is_expected.to have_many(:assignees).through(:alert_assignees) }
it { is_expected.to have_many(:notes) }
it { is_expected.to have_many(:ordered_notes) }
@@ -81,21 +83,50 @@ describe AlertManagement::Alert do
end
describe 'fingerprint' do
+ let_it_be(:project) { create(:project) }
let_it_be(:fingerprint) { 'fingerprint' }
- let_it_be(:existing_alert) { create(:alert_management_alert, fingerprint: fingerprint) }
let(:new_alert) { build(:alert_management_alert, fingerprint: fingerprint, project: project) }
subject { new_alert }
context 'adding an alert with the same fingerprint' do
- context 'same project' do
- let(:project) { existing_alert.project }
-
- it { is_expected.not_to be_valid }
+ context 'same project, various states' do
+ using RSpec::Parameterized::TableSyntax
+
+ # We are only validating uniqueness for non-resolved alerts
+ where(:existing_status, :new_status, :valid) do
+ :resolved | :triggered | true
+ :resolved | :acknowledged | true
+ :resolved | :ignored | true
+ :resolved | :resolved | true
+ :triggered | :triggered | false
+ :triggered | :acknowledged | false
+ :triggered | :ignored | false
+ :triggered | :resolved | true
+ :acknowledged | :triggered | false
+ :acknowledged | :acknowledged | false
+ :acknowledged | :ignored | false
+ :acknowledged | :resolved | true
+ :ignored | :triggered | false
+ :ignored | :acknowledged | false
+ :ignored | :ignored | false
+ :ignored | :resolved | true
+ end
+
+ with_them do
+ let!(:existing_alert) { create(:alert_management_alert, existing_status, fingerprint: fingerprint, project: project) }
+ let(:new_alert) { build(:alert_management_alert, new_status, fingerprint: fingerprint, project: project) }
+
+ if params[:valid]
+ it { is_expected.to be_valid }
+ else
+ it { is_expected.to be_invalid }
+ end
+ end
end
context 'different project' do
- let(:project) { create(:project) }
+ let!(:existing_alert) { create(:alert_management_alert, fingerprint: fingerprint) }
it { is_expected.to be_valid }
end
@@ -163,6 +194,15 @@ describe AlertManagement::Alert do
it { is_expected.to contain_exactly(alert_with_fingerprint) }
end
+ describe '.for_environment' do
+ let(:environment) { create(:environment, project: project) }
+ let!(:env_alert) { create(:alert_management_alert, project: project, environment: environment) }
+
+ subject { described_class.for_environment(environment) }
+
+ it { is_expected.to match_array(env_alert) }
+ end
+
describe '.counts_by_status' do
subject { described_class.counts_by_status }
@@ -174,6 +214,51 @@ describe AlertManagement::Alert do
)
end
end
+
+ describe '.counts_by_project_id' do
+ subject { described_class.counts_by_project_id }
+
+ let!(:alert_other_project) { create(:alert_management_alert) }
+
+ it do
+ is_expected.to eq(
+ project.id => 3,
+ alert_other_project.project.id => 1
+ )
+ end
+ end
+
+ describe '.open' do
+ subject { described_class.open }
+
+ let!(:acknowledged_alert) { create(:alert_management_alert, :acknowledged, project: project)}
+
+ it { is_expected.to contain_exactly(acknowledged_alert, triggered_alert) }
+ end
+
+ describe '.not_resolved' do
+ subject { described_class.not_resolved }
+
+ let!(:acknowledged_alert) { create(:alert_management_alert, :acknowledged, project: project) }
+
+ it { is_expected.to contain_exactly(acknowledged_alert, triggered_alert, ignored_alert) }
+ end
+ end
+
+ describe '.last_prometheus_alert_by_project_id' do
+ subject { described_class.last_prometheus_alert_by_project_id }
+
+ let(:project_1) { create(:project) }
+ let!(:alert_1) { create(:alert_management_alert, project: project_1) }
+ let!(:alert_2) { create(:alert_management_alert, project: project_1) }
+
+ let(:project_2) { create(:project) }
+ let!(:alert_3) { create(:alert_management_alert, project: project_2) }
+ let!(:alert_4) { create(:alert_management_alert, project: project_2) }
+
+ it 'returns the latest alert for each project' do
+ expect(subject).to contain_exactly(alert_2, alert_4)
+ end
end
describe '.search' do
@@ -337,4 +422,22 @@ describe AlertManagement::Alert do
expect { subject }.to change { alert.events }.by(1)
end
end
+
+ describe '#present' do
+ context 'when alert is generic' do
+ let(:alert) { build(:alert_management_alert) }
+
+ it 'uses generic alert presenter' do
+ expect(alert.present).to be_kind_of(AlertManagement::AlertPresenter)
+ end
+ end
+
+ context 'when alert is Prometheus specific' do
+ let(:alert) { build(:alert_management_alert, :prometheus) }
+
+ it 'uses Prometheus Alert presenter' do
+ expect(alert.present).to be_kind_of(AlertManagement::PrometheusAlertPresenter)
+ end
+ end
+ end
end
diff --git a/spec/models/alert_management/alert_user_mention_spec.rb b/spec/models/alert_management/alert_user_mention_spec.rb
index cce090a2231..27c3d290dde 100644
--- a/spec/models/alert_management/alert_user_mention_spec.rb
+++ b/spec/models/alert_management/alert_user_mention_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe AlertManagement::AlertUserMention do
+RSpec.describe AlertManagement::AlertUserMention do
describe 'associations' do
it { is_expected.to belong_to(:alert_management_alert) }
it { is_expected.to belong_to(:note) }