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
if message_sender.can?(:read_project, message_project)
process_create_issue 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
context "when the issue could not be saved" do
before do before do
project project
end
context "when the issue could not be saved" do
before do
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
it "raises an UserNotAuthorizedError" do 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)
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