Commit 8156475e authored by Lin Jen-Shin's avatar Lin Jen-Shin

Report better errors. TODO: Enable skipped test

parent 30b34437
...@@ -26,6 +26,8 @@ class EmailReceiverWorker ...@@ -26,6 +26,8 @@ class EmailReceiverWorker
case e case e
when Gitlab::Email::Receiver::SentNotificationNotFoundError when Gitlab::Email::Receiver::SentNotificationNotFoundError
reason = "We couldn't figure out what the email is in reply to. Please create your comment through the web interface." reason = "We couldn't figure out what the email is in reply to. Please create your comment through the web interface."
when Gitlab::Email::Receiver::ProjectNotFound
reason = "We couldn't find the project. Please check if there's any typo."
when Gitlab::Email::Receiver::EmptyEmailError when Gitlab::Email::Receiver::EmptyEmailError
can_retry = true can_retry = true
reason = "It appears that the email is blank. Make sure your reply is at the top of the email, we can't process inline replies." reason = "It appears that the email is blank. Make sure your reply is at the top of the email, we can't process inline replies."
......
...@@ -5,6 +5,7 @@ module Gitlab ...@@ -5,6 +5,7 @@ module Gitlab
class ProcessingError < StandardError; end class ProcessingError < StandardError; end
class EmailUnparsableError < ProcessingError; end class EmailUnparsableError < ProcessingError; end
class SentNotificationNotFoundError < ProcessingError; end class SentNotificationNotFoundError < ProcessingError; end
class ProjectNotFound < ProcessingError; end
class EmptyEmailError < ProcessingError; end class EmptyEmailError < ProcessingError; end
class AutoGeneratedEmailError < ProcessingError; end class AutoGeneratedEmailError < ProcessingError; end
class UserNotFoundError < ProcessingError; end class UserNotFoundError < ProcessingError; end
...@@ -25,10 +26,16 @@ module Gitlab ...@@ -25,10 +26,16 @@ module Gitlab
process_create_note process_create_note
elsif message_project elsif message_project
process_create_issue if message_sender.can?(:read_project, message_project)
process_create_issue
else # Must be private project without access
raise ProjectNotFound
end
elsif reply_key =~ %r{/|\+}
# Sent Notification reply_key would not have / or +
raise ProjectNotFound
else else
# TODO: could also be project not found
raise SentNotificationNotFoundError raise SentNotificationNotFoundError
end end
end end
......
...@@ -210,10 +210,12 @@ describe Gitlab::Email::Receiver, lib: true do ...@@ -210,10 +210,12 @@ describe Gitlab::Email::Receiver, lib: true do
end end
context "something is wrong" do context "something is wrong" do
before do
project
end
context "when the issue could not be saved" do context "when the issue could not be saved" do
before do before do
project
allow_any_instance_of(Issue).to receive(:persisted?).and_return(false) allow_any_instance_of(Issue).to receive(:persisted?).and_return(false)
end end
...@@ -225,11 +227,24 @@ describe Gitlab::Email::Receiver, lib: true do ...@@ -225,11 +227,24 @@ describe Gitlab::Email::Receiver, lib: true do
context "when the authentication_token token didn't match" do context "when the authentication_token token didn't match" do
let!(:email_raw) { fixture_file("emails/wrong_authentication_token.eml") } let!(:email_raw) { fixture_file("emails/wrong_authentication_token.eml") }
before do it "raises an UserNotAuthorizedError" do
project expect { receiver.execute }.to raise_error(Gitlab::Email::Receiver::UserNotAuthorizedError)
end end
end
context "when project is private" do
let(:project) { create(:project, :private, namespace: namespace) }
it "raises a ProjectNotFound if the user is not a member" do
expect { receiver.execute }.to raise_error(Gitlab::Email::Receiver::ProjectNotFound)
end
it "raises a UserNotAuthorizedError if the user has no sufficient permission" do
skip("Find a role which can :read_project but can't :create_issue")
project.update(group: create(:group))
project.group.add_guest(user)
it "raises an UserNotAuthorizedError" do
expect { receiver.execute }.to raise_error(Gitlab::Email::Receiver::UserNotAuthorizedError) expect { receiver.execute }.to raise_error(Gitlab::Email::Receiver::UserNotAuthorizedError)
end end
end end
......
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