diff options
Diffstat (limited to 'spec/models/alert_management')
-rw-r--r-- | spec/models/alert_management/alert_assignee_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/alert_management/alert_spec.rb | 119 | ||||
-rw-r--r-- | spec/models/alert_management/alert_user_mention_spec.rb | 2 |
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) } |