summaryrefslogtreecommitdiff
path: root/spec/models/alert_management/alert_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/alert_management/alert_spec.rb')
-rw-r--r--spec/models/alert_management/alert_spec.rb285
1 files changed, 36 insertions, 249 deletions
diff --git a/spec/models/alert_management/alert_spec.rb b/spec/models/alert_management/alert_spec.rb
index 18d486740b8..35398e29062 100644
--- a/spec/models/alert_management/alert_spec.rb
+++ b/spec/models/alert_management/alert_spec.rb
@@ -33,70 +33,6 @@ RSpec.describe AlertManagement::Alert do
it { is_expected.to validate_length_of(:service).is_at_most(100) }
it { is_expected.to validate_length_of(:monitoring_tool).is_at_most(100) }
- context 'when status is triggered' do
- subject { triggered_alert }
-
- context 'when ended_at is blank' do
- it { is_expected.to be_valid }
- end
-
- context 'when ended_at is present' do
- before do
- triggered_alert.ended_at = Time.current
- end
-
- it { is_expected.to be_invalid }
- end
- end
-
- context 'when status is acknowledged' do
- subject { acknowledged_alert }
-
- context 'when ended_at is blank' do
- it { is_expected.to be_valid }
- end
-
- context 'when ended_at is present' do
- before do
- acknowledged_alert.ended_at = Time.current
- end
-
- it { is_expected.to be_invalid }
- end
- end
-
- context 'when status is resolved' do
- subject { resolved_alert }
-
- context 'when ended_at is blank' do
- before do
- resolved_alert.ended_at = nil
- end
-
- it { is_expected.to be_invalid }
- end
-
- context 'when ended_at is present' do
- it { is_expected.to be_valid }
- end
- end
-
- context 'when status is ignored' do
- subject { ignored_alert }
-
- context 'when ended_at is blank' do
- it { is_expected.to be_valid }
- end
-
- context 'when ended_at is present' do
- before do
- ignored_alert.ended_at = Time.current
- end
-
- it { is_expected.to be_invalid }
- end
- end
-
describe 'fingerprint' do
let_it_be(:fingerprint) { 'fingerprint' }
let_it_be(:project3, refind: true) { create(:project) }
@@ -112,30 +48,30 @@ RSpec.describe AlertManagement::Alert do
let_it_be(:existing_alert, refind: true) { create(:alert_management_alert, fingerprint: fingerprint, project: project3) }
# 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
+ where(:existing_status_event, :new_status, :valid) do
+ :resolve | :triggered | true
+ :resolve | :acknowledged | true
+ :resolve | :ignored | true
+ :resolve | :resolved | true
+ :trigger | :triggered | false
+ :trigger | :acknowledged | false
+ :trigger | :ignored | false
+ :trigger | :resolved | true
+ :acknowledge | :triggered | false
+ :acknowledge | :acknowledged | false
+ :acknowledge | :ignored | false
+ :acknowledge | :resolved | true
+ :ignore | :triggered | false
+ :ignore | :acknowledged | false
+ :ignore | :ignored | false
+ :ignore | :resolved | true
end
with_them do
let(:new_alert) { build(:alert_management_alert, new_status, fingerprint: fingerprint, project: project3) }
before do
- existing_alert.change_status_to(existing_status)
+ existing_alert.update!(status_event: existing_status_event)
end
if params[:valid]
@@ -196,20 +132,6 @@ RSpec.describe AlertManagement::Alert do
it { is_expected.to match_array(triggered_alert) }
end
- describe '.for_status' do
- let(:status) { :resolved }
-
- subject { AlertManagement::Alert.for_status(status) }
-
- it { is_expected.to match_array(resolved_alert) }
-
- context 'with multiple statuses' do
- let(:status) { [:resolved, :ignored] }
-
- it { is_expected.to match_array([resolved_alert, ignored_alert]) }
- end
- end
-
describe '.for_fingerprint' do
let(:fingerprint) { SecureRandom.hex }
let(:alert_with_fingerprint) { triggered_alert }
@@ -302,41 +224,7 @@ RSpec.describe AlertManagement::Alert do
end
end
- describe '.status_value' do
- using RSpec::Parameterized::TableSyntax
-
- where(:status, :status_value) do
- :triggered | 0
- :acknowledged | 1
- :resolved | 2
- :ignored | 3
- :unknown | nil
- end
-
- with_them do
- it 'returns status value by its name' do
- expect(described_class.status_value(status)).to eq(status_value)
- end
- end
- end
-
- describe '.status_name' do
- using RSpec::Parameterized::TableSyntax
-
- where(:raw_status, :status) do
- 0 | :triggered
- 1 | :acknowledged
- 2 | :resolved
- 3 | :ignored
- -1 | nil
- end
-
- with_them do
- it 'returns status name by its values' do
- expect(described_class.status_name(raw_status)).to eq(status)
- end
- end
- end
+ it_behaves_like 'a model including Escalatable'
describe '.counts_by_status' do
subject { described_class.counts_by_status }
@@ -454,85 +342,17 @@ RSpec.describe AlertManagement::Alert do
end
end
- describe '#to_reference' do
- it { expect(triggered_alert.to_reference).to eq("^alert##{triggered_alert.iid}") }
- end
-
- describe '#trigger' do
- subject { alert.trigger }
-
- context 'when alert is in triggered state' do
- let(:alert) { triggered_alert }
-
- it 'does not change the alert status' do
- expect { subject }.not_to change { alert.reload.status }
- end
- end
-
- context 'when alert not in triggered state' do
- let(:alert) { resolved_alert }
-
- it 'changes the alert status to triggered' do
- expect { subject }.to change { alert.triggered? }.to(true)
- end
-
- it 'resets ended at' do
- expect { subject }.to change { alert.reload.ended_at }.to nil
- end
- end
- end
-
- describe '#acknowledge' do
- subject { alert.acknowledge }
-
- let(:alert) { resolved_alert }
-
- it 'changes the alert status to acknowledged' do
- expect { subject }.to change { alert.acknowledged? }.to(true)
- end
-
- it 'resets ended at' do
- expect { subject }.to change { alert.reload.ended_at }.to nil
- end
- end
-
- describe '#resolve' do
- let!(:ended_at) { Time.current }
-
- subject do
- alert.ended_at = ended_at
- alert.resolve
- end
-
- context 'when alert already resolved' do
- let(:alert) { resolved_alert }
-
- it 'does not change the alert status' do
- expect { subject }.not_to change { resolved_alert.reload.status }
- end
- end
-
- context 'when alert is not resolved' do
- let(:alert) { triggered_alert }
-
- it 'changes alert status to "resolved"' do
- expect { subject }.to change { alert.resolved? }.to(true)
- end
+ describe '#open?' do
+ it 'returns true when the status is open status' do
+ expect(triggered_alert.open?).to be true
+ expect(acknowledged_alert.open?).to be true
+ expect(resolved_alert.open?).to be false
+ expect(ignored_alert.open?).to be false
end
end
- describe '#ignore' do
- subject { alert.ignore }
-
- let(:alert) { resolved_alert }
-
- it 'changes the alert status to ignored' do
- expect { subject }.to change { alert.ignored? }.to(true)
- end
-
- it 'resets ended at' do
- expect { subject }.to change { alert.reload.ended_at }.to nil
- end
+ describe '#to_reference' do
+ it { expect(triggered_alert.to_reference).to eq("^alert##{triggered_alert.iid}") }
end
describe '#register_new_event!' do
@@ -545,53 +365,20 @@ RSpec.describe AlertManagement::Alert do
end
end
- describe '#status_event_for' do
- using RSpec::Parameterized::TableSyntax
-
- where(:for_status, :event) do
- :triggered | :trigger
- 'triggered' | :trigger
- :acknowledged | :acknowledge
- 'acknowledged' | :acknowledge
- :resolved | :resolve
- 'resolved' | :resolve
- :ignored | :ignore
- 'ignored' | :ignore
- :unknown | nil
- nil | nil
- '' | nil
- 1 | nil
- end
+ describe '#resolved_at' do
+ subject { resolved_alert.resolved_at }
- with_them do
- let(:alert) { build(:alert_management_alert, project: project) }
-
- it 'returns event by status name' do
- expect(alert.status_event_for(for_status)).to eq(event)
- end
- end
+ it { is_expected.to eq(resolved_alert.ended_at) }
end
- describe '#change_status_to' do
- let_it_be_with_reload(:alert) { create(:alert_management_alert, project: project) }
+ describe '#resolved_at=' do
+ let(:resolve_time) { Time.current }
- context 'with valid statuses' do
- it 'changes the status to triggered' do
- alert.acknowledge! # change to non-triggered status
- expect { alert.change_status_to(:triggered) }.to change { alert.triggered? }.to(true)
- end
+ it 'sets ended_at' do
+ triggered_alert.resolved_at = resolve_time
- %i(acknowledged resolved ignored).each do |status|
- it "changes the status to #{status}" do
- expect { alert.change_status_to(status) }.to change { alert.public_send(:"#{status}?") }.to(true)
- end
- end
- end
-
- context 'with invalid status' do
- it 'does not change the current status' do
- expect { alert.change_status_to(nil) }.not_to change { alert.status }
- end
+ expect(triggered_alert.ended_at).to eq(resolve_time)
+ expect(triggered_alert.resolved_at).to eq(resolve_time)
end
end
end