diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-20 15:26:25 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-20 15:26:25 +0300 |
commit | a09983ae35713f5a2bbb100981116d31ce99826e (patch) | |
tree | 2ee2af7bd104d57086db360a7e6d8c9d5d43667a /spec/mailers/emails | |
parent | 18c5ab32b738c0b6ecb4d0df3994000482f34bd8 (diff) |
Add latest changes from gitlab-org/gitlab@13-2-stable-ee
Diffstat (limited to 'spec/mailers/emails')
-rw-r--r-- | spec/mailers/emails/auto_devops_spec.rb | 2 | ||||
-rw-r--r-- | spec/mailers/emails/groups_spec.rb | 2 | ||||
-rw-r--r-- | spec/mailers/emails/issues_spec.rb | 2 | ||||
-rw-r--r-- | spec/mailers/emails/merge_requests_spec.rb | 18 | ||||
-rw-r--r-- | spec/mailers/emails/pages_domains_spec.rb | 2 | ||||
-rw-r--r-- | spec/mailers/emails/pipelines_spec.rb | 2 | ||||
-rw-r--r-- | spec/mailers/emails/profile_spec.rb | 2 | ||||
-rw-r--r-- | spec/mailers/emails/projects_spec.rb | 2 | ||||
-rw-r--r-- | spec/mailers/emails/releases_spec.rb | 2 | ||||
-rw-r--r-- | spec/mailers/emails/service_desk_spec.rb | 188 |
10 files changed, 213 insertions, 9 deletions
diff --git a/spec/mailers/emails/auto_devops_spec.rb b/spec/mailers/emails/auto_devops_spec.rb index dd7c12c3143..950fcfbf4df 100644 --- a/spec/mailers/emails/auto_devops_spec.rb +++ b/spec/mailers/emails/auto_devops_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Emails::AutoDevops do +RSpec.describe Emails::AutoDevops do include EmailSpec::Matchers describe '#auto_devops_disabled_email' do diff --git a/spec/mailers/emails/groups_spec.rb b/spec/mailers/emails/groups_spec.rb index b4746e120e0..01846172440 100644 --- a/spec/mailers/emails/groups_spec.rb +++ b/spec/mailers/emails/groups_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'email_spec' -describe Emails::Groups do +RSpec.describe Emails::Groups do include EmailSpec::Matchers let(:group) { create(:group) } diff --git a/spec/mailers/emails/issues_spec.rb b/spec/mailers/emails/issues_spec.rb index dfd974aa5f3..21e07c0252d 100644 --- a/spec/mailers/emails/issues_spec.rb +++ b/spec/mailers/emails/issues_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'email_spec' -describe Emails::Issues do +RSpec.describe Emails::Issues do include EmailSpec::Matchers it 'adds email methods to Notify' do diff --git a/spec/mailers/emails/merge_requests_spec.rb b/spec/mailers/emails/merge_requests_spec.rb index 541acc47172..477fb16400a 100644 --- a/spec/mailers/emails/merge_requests_spec.rb +++ b/spec/mailers/emails/merge_requests_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'email_spec' -describe Emails::MergeRequests do +RSpec.describe Emails::MergeRequests do include EmailSpec::Matchers describe "#resolved_all_discussions_email" do @@ -17,4 +17,20 @@ describe Emails::MergeRequests do expect(subject).to have_body_text current_user.name end end + + describe "#merge_when_pipeline_succeeds_email" do + let(:user) { create(:user) } + let(:merge_request) { create(:merge_request) } + let(:current_user) { create(:user) } + let(:project) { create(:project, :repository) } + let(:title) { "Merge request #{merge_request.to_reference} was scheduled to merge after pipeline succeeds by #{current_user.name}" } + + subject { Notify.merge_when_pipeline_succeeds_email(user.id, merge_request.id, current_user.id) } + + it "has required details" do + expect(subject).to have_content title + expect(subject).to have_content merge_request.to_reference + expect(subject).to have_content current_user.name + end + end end diff --git a/spec/mailers/emails/pages_domains_spec.rb b/spec/mailers/emails/pages_domains_spec.rb index 5029a17e4e5..cf17f2e5ebf 100644 --- a/spec/mailers/emails/pages_domains_spec.rb +++ b/spec/mailers/emails/pages_domains_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'email_spec' -describe Emails::PagesDomains do +RSpec.describe Emails::PagesDomains do include EmailSpec::Matchers include_context 'gitlab email notification' diff --git a/spec/mailers/emails/pipelines_spec.rb b/spec/mailers/emails/pipelines_spec.rb index cc901da98dc..f0f23fe2097 100644 --- a/spec/mailers/emails/pipelines_spec.rb +++ b/spec/mailers/emails/pipelines_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'email_spec' -describe Emails::Pipelines do +RSpec.describe Emails::Pipelines do include EmailSpec::Matchers let_it_be(:project) { create(:project, :repository) } diff --git a/spec/mailers/emails/profile_spec.rb b/spec/mailers/emails/profile_spec.rb index cbf42da2085..ee91df360b6 100644 --- a/spec/mailers/emails/profile_spec.rb +++ b/spec/mailers/emails/profile_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'email_spec' -describe Emails::Profile do +RSpec.describe Emails::Profile do include EmailSpec::Matchers include_context 'gitlab email notification' diff --git a/spec/mailers/emails/projects_spec.rb b/spec/mailers/emails/projects_spec.rb index 6c94ed0aa4d..599f62a8113 100644 --- a/spec/mailers/emails/projects_spec.rb +++ b/spec/mailers/emails/projects_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'email_spec' -describe Emails::Projects do +RSpec.describe Emails::Projects do include EmailSpec::Matchers include_context 'gitlab email notification' diff --git a/spec/mailers/emails/releases_spec.rb b/spec/mailers/emails/releases_spec.rb index c614c009434..60e522c7cfa 100644 --- a/spec/mailers/emails/releases_spec.rb +++ b/spec/mailers/emails/releases_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'email_spec' -describe Emails::Releases do +RSpec.describe Emails::Releases do include EmailSpec::Matchers include_context 'gitlab email notification' diff --git a/spec/mailers/emails/service_desk_spec.rb b/spec/mailers/emails/service_desk_spec.rb new file mode 100644 index 00000000000..842f82539cb --- /dev/null +++ b/spec/mailers/emails/service_desk_spec.rb @@ -0,0 +1,188 @@ +# frozen_string_literal: true + +require 'spec_helper' +require 'email_spec' + +RSpec.describe Emails::ServiceDesk do + include EmailSpec::Helpers + include EmailSpec::Matchers + include EmailHelpers + + include_context 'gitlab email notification' + + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project) } + let_it_be(:issue) { create(:issue, project: project) } + let(:template) { double(content: template_content) } + + before do + stub_const('ServiceEmailClass', Class.new(ApplicationMailer)) + + ServiceEmailClass.class_eval do + include GitlabRoutingHelper + include EmailsHelper + include Emails::ServiceDesk + + helper GitlabRoutingHelper + helper EmailsHelper + + # this method is implemented in Notify class, we don't need to test it + def reply_key + 'test-key' + end + + # this method is implemented in Notify class, we don't need to test it + def sender(author_id, params = {}) + author_id + end + + # this method is implemented in Notify class + # + # We do not need to test the Notify method, it is already tested in notify_spec + def mail_new_thread(issue, options) + # we need to rewrite this in order to look up templates in the correct directory + self.class.mailer_name = 'notify' + + # this is needed for default layout + @unsubscribe_url = 'http://unsubscribe.example.com' + + mail(options) + end + alias_method :mail_answer_thread, :mail_new_thread + end + end + + shared_examples 'handle template content' do |template_key| + before do + expect(Gitlab::Template::ServiceDeskTemplate).to receive(:find) + .with(template_key, issue.project) + .and_return(template) + end + + it 'builds the email correctly' do + aggregate_failures do + is_expected.to have_referable_subject(issue, include_project: false, reply: reply_in_subject) + is_expected.to have_body_text(expected_body) + expect(subject.content_type).to include('text/html') + end + end + end + + shared_examples 'read template from repository' do |template_key| + let(:template_content) { 'custom text' } + let(:issue) { create(:issue, project: project)} + + context 'when a template is in the repository' do + let(:project) { create(:project, :custom_repo, files: { ".gitlab/service_desk_templates/#{template_key}.md" => template_content }) } + + it 'uses the text template from the template' do + is_expected.to have_body_text(template_content) + end + end + + context 'when the service_desk_templates directory does not contain correct template' do + let(:project) { create(:project, :custom_repo, files: { ".gitlab/service_desk_templates/another_file.md" => template_content }) } + + it 'uses the default template' do + is_expected.to have_body_text(default_text) + end + end + + context 'when the service_desk_templates directory does not exist' do + let(:project) { create(:project, :custom_repo, files: { "other_directory/another_file.md" => template_content }) } + + it 'uses the default template' do + is_expected.to have_body_text(default_text) + end + end + + context 'when the project does not have a repo' do + let(:project) { create(:project) } + + it 'uses the default template' do + is_expected.to have_body_text(default_text) + end + end + end + + describe '.service_desk_thank_you_email' do + let_it_be(:reply_in_subject) { true } + let_it_be(:default_text) do + "Thank you for your support request! We are tracking your request as ticket #{issue.to_reference}, and will respond as soon as we can." + end + + subject { ServiceEmailClass.service_desk_thank_you_email(issue.id) } + + it_behaves_like 'read template from repository', 'thank_you' + + context 'handling template markdown' do + context 'with a simple text' do + let(:template_content) { 'thank you, **your new issue** has been created.' } + let(:expected_body) { 'thank you, <strong>your new issue</strong> has been created.' } + + it_behaves_like 'handle template content', 'thank_you' + end + + context 'with an issue id and issue path placeholders' do + let(:template_content) { 'thank you, **your new issue:** %{ISSUE_ID}, path: %{ISSUE_PATH}' } + let(:expected_body) { "thank you, <strong>your new issue:</strong> ##{issue.iid}, path: #{project.full_path}##{issue.iid}" } + + it_behaves_like 'handle template content', 'thank_you' + end + + context 'with an issue id placeholder with whitespace' do + let(:template_content) { 'thank you, **your new issue:** %{ ISSUE_ID}' } + let(:expected_body) { "thank you, <strong>your new issue:</strong> ##{issue.iid}" } + + it_behaves_like 'handle template content', 'thank_you' + end + + context 'with unexpected placeholder' do + let(:template_content) { 'thank you, **your new issue:** %{this is issue}' } + let(:expected_body) { "thank you, <strong>your new issue:</strong> %{this is issue}" } + + it_behaves_like 'handle template content', 'thank_you' + end + end + end + + describe '.service_desk_new_note_email' do + let_it_be(:reply_in_subject) { false } + let_it_be(:note) { create(:note_on_issue, noteable: issue, project: project) } + let_it_be(:default_text) { note.note } + + subject { ServiceEmailClass.service_desk_new_note_email(issue.id, note.id) } + + it_behaves_like 'read template from repository', 'new_note' + + context 'handling template markdown' do + context 'with a simple text' do + let(:template_content) { 'thank you, **new note on issue** has been created.' } + let(:expected_body) { 'thank you, <strong>new note on issue</strong> has been created.' } + + it_behaves_like 'handle template content', 'new_note' + end + + context 'with an issue id, issue path and note placeholders' do + let(:template_content) { 'thank you, **new note on issue:** %{ISSUE_ID}, path: %{ISSUE_PATH}: %{NOTE_TEXT}' } + let(:expected_body) { "thank you, <strong>new note on issue:</strong> ##{issue.iid}, path: #{project.full_path}##{issue.iid}: #{note.note}" } + + it_behaves_like 'handle template content', 'new_note' + end + + context 'with an issue id placeholder with whitespace' do + let(:template_content) { 'thank you, **new note on issue:** %{ ISSUE_ID}: %{ NOTE_TEXT }' } + let(:expected_body) { "thank you, <strong>new note on issue:</strong> ##{issue.iid}: #{note.note}" } + + it_behaves_like 'handle template content', 'new_note' + end + + context 'with unexpected placeholder' do + let(:template_content) { 'thank you, **new note on issue:** %{this is issue}' } + let(:expected_body) { "thank you, <strong>new note on issue:</strong> %{this is issue}" } + + it_behaves_like 'handle template content', 'new_note' + end + end + end +end |