Commit 2bf0a356 authored by Heinrich Lee Yu's avatar Heinrich Lee Yu

Fix typos and refactor service desk specs

Also removed unnecessary spec and removed stubbing of email sending
parent 6a17d248
...@@ -4,6 +4,7 @@ require 'spec_helper' ...@@ -4,6 +4,7 @@ require 'spec_helper'
describe Gitlab::Email::Handler::EE::ServiceDeskHandler do describe Gitlab::Email::Handler::EE::ServiceDeskHandler do
include_context :email_shared_context include_context :email_shared_context
before do before do
stub_incoming_email_setting(enabled: true, address: "incoming+%{key}@appmail.adventuretime.ooo") stub_incoming_email_setting(enabled: true, address: "incoming+%{key}@appmail.adventuretime.ooo")
stub_config_setting(host: 'localhost') stub_config_setting(host: 'localhost')
...@@ -16,20 +17,16 @@ describe Gitlab::Email::Handler::EE::ServiceDeskHandler do ...@@ -16,20 +17,16 @@ describe Gitlab::Email::Handler::EE::ServiceDeskHandler do
let(:project) { create(:project, :public, namespace: namespace, path: 'test', service_desk_enabled: true) } let(:project) { create(:project, :public, namespace: namespace, path: 'test', service_desk_enabled: true) }
before do before do
allow(Notify).to receive(:service_desk_thank_you_email)
.with(kind_of(Integer)).and_return(double(deliver_later!: true))
allow(::EE::Gitlab::ServiceDesk).to receive(:enabled?).and_return(true) allow(::EE::Gitlab::ServiceDesk).to receive(:enabled?).and_return(true)
allow(::EE::Gitlab::ServiceDesk).to receive(:enabled?).with(project: project).and_return(true) allow(::EE::Gitlab::ServiceDesk).to receive(:enabled?).with(project: project).and_return(true)
end end
context 'when everything is fine' do
shared_examples 'a new issue request' do shared_examples 'a new issue request' do
it 'sends thank you the email and creates issue' do before do
setup_attachment setup_attachment
end
expect(Notify).to receive(:service_desk_thank_you_email).with(kind_of(Integer)) it 'creates a new issue' do
expect { receiver.execute }.to change { Issue.count }.by(1) expect { receiver.execute }.to change { Issue.count }.by(1)
new_issue = Issue.last new_issue = Issue.last
...@@ -40,35 +37,40 @@ describe Gitlab::Email::Handler::EE::ServiceDeskHandler do ...@@ -40,35 +37,40 @@ describe Gitlab::Email::Handler::EE::ServiceDeskHandler do
expect(new_issue.title).to eq("Service Desk (from jake@adventuretime.ooo): The message subject! @all") expect(new_issue.title).to eq("Service Desk (from jake@adventuretime.ooo): The message subject! @all")
expect(new_issue.description).to eq("Service desk stuff!\n\n```\na = b\n```\n\n![image](uploads/image.png)") expect(new_issue.description).to eq("Service desk stuff!\n\n```\na = b\n```\n\n![image](uploads/image.png)")
end end
it 'sends thank you email' do
expect { receiver.execute }.to have_enqueued_job.on_queue('mailers')
end
end end
context 'when everything is fine' do
it_behaves_like 'a new issue request' it_behaves_like 'a new issue request'
context "creates a new issue with legacy email address" do context 'with legacy incoming email address' do
let(:email_raw) { fixture_file('emails/service_desk_legacy.eml', dir: 'ee') } let(:email_raw) { fixture_file('emails/service_desk_legacy.eml', dir: 'ee') }
it_behaves_like 'a new issue request' it_behaves_like 'a new issue request'
end end
end end
context 'when email key' do describe '#can_handle?' do
let(:mail) { Mail::Message.new(email_raw) } let(:mail) { Mail::Message.new(email_raw) }
it "matches the new format" do it 'handles the new email key format' do
handler = described_class.new(mail, "h5bp-html5-boilerplate-#{project.project_id}-issue-") handler = described_class.new(mail, "h5bp-html5-boilerplate-#{project.project_id}-issue-")
expect(handler.instance_variable_get(:@project_id).to_i).to eq project.project_id expect(handler.instance_variable_get(:@project_id).to_i).to eq project.project_id
expect(handler.can_handle?).to be_truthy expect(handler.can_handle?).to be_truthy
end end
it "matches the legacy format" do it 'handles the legacy email key format' do
handler = described_class.new(mail, "h5bp/html5-boilerplate") handler = described_class.new(mail, "h5bp/html5-boilerplate")
expect(handler.instance_variable_get(:@project_path)).to eq 'h5bp/html5-boilerplate' expect(handler.instance_variable_get(:@project_path)).to eq 'h5bp/html5-boilerplate'
expect(handler.can_handle?).to be_truthy expect(handler.can_handle?).to be_truthy
end end
it "doesn't match either format" do it "doesn't handle invalid email key" do
handler = described_class.new(mail, "h5bp-html5-boilerplate-invalid") handler = described_class.new(mail, "h5bp-html5-boilerplate-invalid")
expect(handler.can_handle?).to be_falsey expect(handler.can_handle?).to be_falsey
...@@ -81,11 +83,13 @@ describe Gitlab::Email::Handler::EE::ServiceDeskHandler do ...@@ -81,11 +83,13 @@ describe Gitlab::Email::Handler::EE::ServiceDeskHandler do
.and_return(nil) .and_return(nil)
end end
it "does not send thank you email but create an issue" do it "creates a new issue" do
expect(Notify).not_to receive(:service_desk_thank_you_email)
expect { receiver.execute }.to change { Issue.count }.by(1) expect { receiver.execute }.to change { Issue.count }.by(1)
end end
it 'does not send thank you email' do
expect { receiver.execute }.not_to have_enqueued_job.on_queue('mailers')
end
end end
context 'when there is a sender address and a from address' do context 'when there is a sender address and a from address' do
...@@ -94,17 +98,11 @@ describe Gitlab::Email::Handler::EE::ServiceDeskHandler do ...@@ -94,17 +98,11 @@ describe Gitlab::Email::Handler::EE::ServiceDeskHandler do
it 'prefers the from address' do it 'prefers the from address' do
setup_attachment setup_attachment
expect(Notify).to receive(:service_desk_thank_you_email).with(kind_of(Integer))
expect { receiver.execute }.to change { Issue.count }.by(1) expect { receiver.execute }.to change { Issue.count }.by(1)
new_issue = Issue.last new_issue = Issue.last
expect(new_issue.author).to eql(User.support_bot) expect(new_issue.service_desk_reply_to).to eq('finn@adventuretime.ooo')
expect(new_issue.confidential?).to be true
expect(new_issue.all_references.all).to be_empty
expect(new_issue.title).to eq("Service Desk (from finn@adventuretime.ooo): The message subject! @all")
expect(new_issue.description).to eq("Service desk stuff!\n\n```\na = b\n```\n\n![image](uploads/image.png)")
end end
end end
...@@ -113,31 +111,19 @@ describe Gitlab::Email::Handler::EE::ServiceDeskHandler do ...@@ -113,31 +111,19 @@ describe Gitlab::Email::Handler::EE::ServiceDeskHandler do
allow(::EE::Gitlab::ServiceDesk).to receive(:enabled?).and_return(false) allow(::EE::Gitlab::ServiceDesk).to receive(:enabled?).and_return(false)
end end
it 'does not create an issue or send email' do it 'does not create an issue' do
expect(Notify).not_to receive(:service_desk_thank_you_email)
expect { receiver.execute rescue nil }.not_to change { Issue.count } expect { receiver.execute rescue nil }.not_to change { Issue.count }
end end
it 'does not send thank you email' do
expect { receiver.execute rescue nil }.not_to have_enqueued_job.on_queue('mailers')
end
end end
context 'when the email is forwarded through an alias' do context 'when the email is forwarded through an alias' do
let(:email_raw) { email_fixture('emails/service_desk_forwarded.eml', dir: 'ee') } let(:email_raw) { email_fixture('emails/service_desk_forwarded.eml', dir: 'ee') }
it 'sends thank you the email and creates issue' do it_behaves_like 'a new issue request'
setup_attachment
expect(Notify).to receive(:service_desk_thank_you_email).with(kind_of(Integer))
expect { receiver.execute }.to change { Issue.count }.by(1)
new_issue = Issue.last
expect(new_issue.author).to eql(User.support_bot)
expect(new_issue.confidential?).to be true
expect(new_issue.all_references.all).to be_empty
expect(new_issue.title).to eq("Service Desk (from jake@adventuretime.ooo): The message subject! @all")
expect(new_issue.description).to eq("Service desk stuff!\n\n```\na = b\n```\n\n![image](uploads/image.png)")
end
end end
end end
......
# frozen_string_literal: true
require 'spec_helper'
describe Emails::ServiceDesk do
it 'adds email methods to Notify' do
subject.instance_methods.each do |email_method|
expect(Notify).to be_respond_to(email_method)
end
end
end
...@@ -37,11 +37,19 @@ describe Notify do ...@@ -37,11 +37,19 @@ describe Notify do
context 'for a project' do context 'for a project' do
context 'for service desk issues' do context 'for service desk issues' do
before do
issue.update!(service_desk_reply_to: 'service.desk@example.com')
end
describe 'thank you email' do describe 'thank you email' do
subject { described_class.service_desk_thank_you_email(issue.id) } subject { described_class.service_desk_thank_you_email(issue.id) }
it_behaves_like 'an unsubscribeable thread' it_behaves_like 'an unsubscribeable thread'
it 'has the correct recipient' do
is_expected.to deliver_to('service.desk@example.com')
end
it 'has the correct subject and body' do it 'has the correct subject and body' do
aggregate_failures do aggregate_failures do
is_expected.to have_referable_subject(issue, include_project: false, reply: true) is_expected.to have_referable_subject(issue, include_project: false, reply: true)
...@@ -57,6 +65,10 @@ describe Notify do ...@@ -57,6 +65,10 @@ describe Notify do
it_behaves_like 'an unsubscribeable thread' it_behaves_like 'an unsubscribeable thread'
it 'has the correct recipient' do
is_expected.to deliver_to('service.desk@example.com')
end
it 'has the correct subject and body' do it 'has the correct subject and body' do
aggregate_failures do aggregate_failures do
is_expected.to have_referable_subject(issue, include_project: false, reply: true) is_expected.to have_referable_subject(issue, include_project: false, reply: true)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment