debian-mirror-gitlab/spec/mailers/emails/projects_spec.rb

148 lines
5.5 KiB
Ruby
Raw Normal View History

2020-04-22 19:07:51 +05:30
# frozen_string_literal: true
require 'spec_helper'
require 'email_spec'
2020-07-28 23:09:34 +05:30
RSpec.describe Emails::Projects do
2020-04-22 19:07:51 +05:30
include EmailSpec::Matchers
include_context 'gitlab email notification'
shared_examples 'no email' do
it 'does not send mail' do
expect(subject.message).to be_a_kind_of(ActionMailer::Base::NullMail)
end
end
shared_examples 'shows the incident issues url' do
context 'create issue setting enabled' do
before do
create(:project_incident_management_setting, project: project, create_issue: true)
end
let(:incident_issues_url) do
project_issues_url(project, label_name: 'incident')
end
it { is_expected.to have_body_text(incident_issues_url) }
end
end
let_it_be(:user) { create(:user) }
describe '#prometheus_alert_fired_email' do
2021-01-03 14:25:43 +05:30
let(:default_title) { Gitlab::AlertManagement::Payload::Generic::DEFAULT_TITLE }
let(:payload) { { 'startsAt' => Time.now.rfc3339 } }
let(:alert_attributes) { build(:alert_management_alert, :from_payload, payload: payload, project: project).attributes }
2020-04-22 19:07:51 +05:30
subject do
2021-01-03 14:25:43 +05:30
Notify.prometheus_alert_fired_email(project.id, user.id, alert_attributes)
2020-04-22 19:07:51 +05:30
end
2021-01-03 14:25:43 +05:30
context 'missing required attributes' do
let(:alert_attributes) { build(:alert_management_alert, :prometheus, :from_payload, payload: payload, project: project).attributes }
it_behaves_like 'no email'
2020-04-22 19:07:51 +05:30
end
2021-01-03 14:25:43 +05:30
context 'with minimum required attributes' do
let(:payload) { {} }
2020-04-22 19:07:51 +05:30
2021-01-03 14:25:43 +05:30
it_behaves_like 'an email sent from GitLab'
it_behaves_like 'it should not have Gmail Actions links'
it_behaves_like 'a user cannot unsubscribe through footer link'
2020-04-22 19:07:51 +05:30
2021-01-03 14:25:43 +05:30
it 'has expected subject' do
is_expected.to have_subject("#{project.name} | Alert: #{default_title}")
2020-04-22 19:07:51 +05:30
end
2021-01-03 14:25:43 +05:30
it 'has expected content' do
is_expected.to have_body_text('An alert has been triggered')
is_expected.to have_body_text(project.full_path)
is_expected.not_to have_body_text('Description:')
is_expected.not_to have_body_text('Environment:')
is_expected.not_to have_body_text('Metric:')
end
end
2020-04-22 19:07:51 +05:30
2021-01-03 14:25:43 +05:30
context 'with description' do
let(:payload) { { 'description' => 'alert description' } }
2020-04-22 19:07:51 +05:30
it_behaves_like 'an email sent from GitLab'
it_behaves_like 'it should not have Gmail Actions links'
it_behaves_like 'a user cannot unsubscribe through footer link'
it 'has expected subject' do
2021-01-03 14:25:43 +05:30
is_expected.to have_subject("#{project.name} | Alert: #{default_title}")
2020-04-22 19:07:51 +05:30
end
it 'has expected content' do
is_expected.to have_body_text('An alert has been triggered')
is_expected.to have_body_text(project.full_path)
2021-01-03 14:25:43 +05:30
is_expected.to have_body_text('Description:')
is_expected.to have_body_text('alert description')
is_expected.not_to have_body_text('Environment:')
is_expected.not_to have_body_text('Metric:')
2020-04-22 19:07:51 +05:30
end
end
2021-01-03 14:25:43 +05:30
context 'with environment' do
let_it_be(:environment) { create(:environment, project: project) }
let(:payload) { { 'gitlab_environment_name' => environment.name } }
let(:metrics_url) { metrics_project_environment_url(project, environment) }
2020-04-22 19:07:51 +05:30
2021-01-03 14:25:43 +05:30
it_behaves_like 'an email sent from GitLab'
it_behaves_like 'it should not have Gmail Actions links'
it_behaves_like 'a user cannot unsubscribe through footer link'
2020-04-22 19:07:51 +05:30
2021-01-03 14:25:43 +05:30
it 'has expected subject' do
is_expected.to have_subject("#{project.name} | Alert: #{environment.name}: #{default_title}")
2020-04-22 19:07:51 +05:30
end
2021-01-03 14:25:43 +05:30
it 'has expected content' do
is_expected.to have_body_text('An alert has been triggered')
is_expected.to have_body_text(project.full_path)
is_expected.to have_body_text('Environment:')
is_expected.to have_body_text(environment.name)
is_expected.not_to have_body_text('Description:')
is_expected.not_to have_body_text('Metric:')
end
2020-04-22 19:07:51 +05:30
end
2021-01-03 14:25:43 +05:30
context 'with gitlab alerting rule' do
let_it_be(:prometheus_alert) { create(:prometheus_alert, project: project) }
let_it_be(:environment) { prometheus_alert.environment }
2020-04-22 19:07:51 +05:30
2021-01-03 14:25:43 +05:30
let(:alert_attributes) { build(:alert_management_alert, :prometheus, :from_payload, payload: payload, project: project).attributes }
let(:title) { "#{prometheus_alert.title} #{prometheus_alert.computed_operator} #{prometheus_alert.threshold}" }
let(:metrics_url) { metrics_project_environment_url(project, environment) }
2020-04-22 19:07:51 +05:30
before do
2021-01-03 14:25:43 +05:30
payload['labels'] = {
'gitlab_alert_id' => prometheus_alert.prometheus_metric_id,
'alertname' => prometheus_alert.title
}
2020-04-22 19:07:51 +05:30
end
it_behaves_like 'an email sent from GitLab'
it_behaves_like 'it should not have Gmail Actions links'
it_behaves_like 'a user cannot unsubscribe through footer link'
2021-01-03 14:25:43 +05:30
it_behaves_like 'shows the incident issues url'
2020-04-22 19:07:51 +05:30
it 'has expected subject' do
2021-01-03 14:25:43 +05:30
is_expected.to have_subject("#{project.name} | Alert: #{environment.name}: #{title} for 5 minutes")
2020-04-22 19:07:51 +05:30
end
it 'has expected content' do
is_expected.to have_body_text('An alert has been triggered')
is_expected.to have_body_text(project.full_path)
2021-01-03 14:25:43 +05:30
is_expected.to have_body_text('Environment:')
is_expected.to have_body_text(environment.name)
is_expected.to have_body_text('Metric:')
is_expected.to have_body_text(prometheus_alert.full_query)
is_expected.to have_body_text(metrics_url)
2020-04-22 19:07:51 +05:30
is_expected.not_to have_body_text('Description:')
end
end
end
end