Use new merge request email address format
We now use `-merge-request` instead of `+merge-request+` in order to support catch all email addresses
This commit is contained in:
parent
23d5f4c991
commit
34dd6196e3
15 changed files with 102 additions and 49 deletions
|
@ -912,11 +912,16 @@ class Project < ActiveRecord::Base
|
|||
def new_issuable_address(author, address_type)
|
||||
return unless Gitlab::IncomingEmail.supports_issue_creation? && author
|
||||
|
||||
# check since this can come from a request parameter
|
||||
return unless %w(issue merge_request).include?(address_type)
|
||||
|
||||
author.ensure_incoming_email_token!
|
||||
|
||||
suffix = address_type == 'merge_request' ? '+merge-request' : ''
|
||||
Gitlab::IncomingEmail.reply_address(
|
||||
"#{full_path}#{suffix}+#{author.incoming_email_token}")
|
||||
suffix = address_type.dasherize
|
||||
|
||||
# example: incoming+h5bp-html5-boilerplate-8-1234567890abcdef123456789-issue@localhost.com
|
||||
# example: incoming+h5bp-html5-boilerplate-8-1234567890abcdef123456789-merge-request@localhost.com
|
||||
Gitlab::IncomingEmail.reply_address("#{full_path_slug}-#{project_id}-#{author.incoming_email_token}-#{suffix}")
|
||||
end
|
||||
|
||||
def build_commit_note(commit)
|
||||
|
|
|
@ -3,23 +3,30 @@
|
|||
require 'gitlab/email/handler/base_handler'
|
||||
require 'gitlab/email/handler/reply_processing'
|
||||
|
||||
# handles merge request creation emails with these forms:
|
||||
# incoming+gitlab-org-gitlab-ce-20-Author_Token12345678-merge-request@incoming.gitlab.com
|
||||
# incoming+gitlab-org/gitlab-ce+merge-request+Author_Token12345678@incoming.gitlab.com (legacy)
|
||||
module Gitlab
|
||||
module Email
|
||||
module Handler
|
||||
class CreateMergeRequestHandler < BaseHandler
|
||||
include ReplyProcessing
|
||||
attr_reader :project_path, :incoming_email_token
|
||||
|
||||
HANDLER_REGEX = /\A.+-(?<project_id>.+)-(?<incoming_email_token>.+)-merge-request\z/.freeze
|
||||
HANDLER_REGEX_LEGACY = /\A(?<project_path>[^\+]*)\+merge-request\+(?<incoming_email_token>.*)/.freeze
|
||||
|
||||
def initialize(mail, mail_key)
|
||||
super(mail, mail_key)
|
||||
|
||||
if m = /\A([^\+]*)\+merge-request\+(.*)/.match(mail_key.to_s)
|
||||
@project_path, @incoming_email_token = m.captures
|
||||
if matched = HANDLER_REGEX.match(mail_key.to_s)
|
||||
@project_id, @incoming_email_token = matched.captures
|
||||
elsif matched = HANDLER_REGEX_LEGACY.match(mail_key.to_s)
|
||||
@project_path, @incoming_email_token = matched.captures
|
||||
end
|
||||
end
|
||||
|
||||
def can_handle?
|
||||
@project_path && @incoming_email_token
|
||||
incoming_email_token && (project_id || project_path)
|
||||
end
|
||||
|
||||
def execute
|
||||
|
@ -41,7 +48,11 @@ module Gitlab
|
|||
# rubocop: enable CodeReuse/ActiveRecord
|
||||
|
||||
def project
|
||||
@project ||= Project.find_by_full_path(project_path)
|
||||
@project ||= if project_id
|
||||
Project.find_by_id(project_id)
|
||||
else
|
||||
Project.find_by_full_path(project_path)
|
||||
end
|
||||
end
|
||||
|
||||
def metrics_params
|
||||
|
@ -50,6 +61,8 @@ module Gitlab
|
|||
|
||||
private
|
||||
|
||||
attr_reader :project_id, :project_path, :incoming_email_token
|
||||
|
||||
def build_merge_request
|
||||
MergeRequests::BuildService.new(project, author, merge_request_params).execute
|
||||
end
|
||||
|
@ -97,7 +110,7 @@ module Gitlab
|
|||
|
||||
def remove_patch_attachments
|
||||
patch_attachments.each { |patch| mail.parts.delete(patch) }
|
||||
# reset the message, so it needs to be reporocessed when the attachments
|
||||
# reset the message, so it needs to be reprocessed when the attachments
|
||||
# have been modified
|
||||
@message = nil
|
||||
end
|
||||
|
|
|
@ -2,14 +2,27 @@
|
|||
|
||||
require 'gitlab/email/handler/base_handler'
|
||||
|
||||
# handles unsubscribe emails with these forms:
|
||||
# incoming+1234567890abcdef1234567890abcdef-unsubscribe@incoming.gitlab.com
|
||||
# incoming+1234567890abcdef1234567890abcdef+unsubscribe@incoming.gitlab.com (legacy)
|
||||
module Gitlab
|
||||
module Email
|
||||
module Handler
|
||||
class UnsubscribeHandler < BaseHandler
|
||||
delegate :project, to: :sent_notification, allow_nil: true
|
||||
|
||||
HANDLER_REGEX = /\A(?<replytoken>\w+)#{Gitlab::IncomingEmail::UNSUBSCRIBE_SUFFIX}\z/.freeze
|
||||
HANDLER_REGEX_LEGACY = /\A(?<replytoken>\w+)#{Regexp.escape(Gitlab::IncomingEmail::UNSUBSCRIBE_SUFFIX_OLD)}\z/.freeze
|
||||
|
||||
def initialize(mail, mail_key)
|
||||
super(mail, mail_key)
|
||||
|
||||
matched = HANDLER_REGEX.match(mail_key.to_s) || HANDLER_REGEX_LEGACY.match(mail_key.to_s)
|
||||
@reply_token = matched[:replytoken] if matched
|
||||
end
|
||||
|
||||
def can_handle?
|
||||
mail_key =~ /\A\w+#{Regexp.escape(suffix)}\z/
|
||||
@reply_token.present?
|
||||
end
|
||||
|
||||
def execute
|
||||
|
@ -25,19 +38,7 @@ module Gitlab
|
|||
private
|
||||
|
||||
def sent_notification
|
||||
@sent_notification ||= SentNotification.for(reply_key)
|
||||
end
|
||||
|
||||
def suffix
|
||||
@suffix ||= if mail_key&.end_with?(Gitlab::IncomingEmail::UNSUBSCRIBE_SUFFIX)
|
||||
Gitlab::IncomingEmail::UNSUBSCRIBE_SUFFIX
|
||||
else
|
||||
Gitlab::IncomingEmail::UNSUBSCRIBE_SUFFIX_OLD
|
||||
end
|
||||
end
|
||||
|
||||
def reply_key
|
||||
mail_key.sub(suffix, '')
|
||||
@sent_notification ||= SentNotification.for(@reply_token)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
From: "Jake the Dog" <jake@adventuretime.ooo>
|
||||
To: incoming+gitlabhq/gitlabhq+merge-request+auth_token@appmail.adventuretime.ooo
|
||||
To: incoming+gitlabhq-gitlabhq-project_id-auth_token-merge-request@appmail.adventuretime.ooo
|
||||
Subject: new-branch-with-a-patch
|
||||
Date: Wed, 31 Oct 2018 17:27:52 +0100
|
||||
X-Mailer: MailMate (1.12r5523)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
From: "Jake the Dog" <jake@adventuretime.ooo>
|
||||
To: incoming+gitlabhq/gitlabhq+merge-request+auth_token@appmail.adventuretime.ooo
|
||||
To: incoming+gitlabhq-gitlabhq-project_id-auth_token-merge-request@appmail.adventuretime.ooo
|
||||
Subject: feature
|
||||
Date: Wed, 31 Oct 2018 17:27:52 +0100
|
||||
X-Mailer: MailMate (1.12r5523)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
From: "Jake the Dog" <jake@adventuretime.ooo>
|
||||
To: incoming+gitlabhq/gitlabhq+merge-request+auth_token@appmail.adventuretime.ooo
|
||||
To: incoming+gitlabhq-gitlabhq-project_id-auth_token-merge-request@appmail.adventuretime.ooo
|
||||
Subject: new-branch-with-a-patch
|
||||
Date: Wed, 24 Oct 2018 16:39:49 +0200
|
||||
X-Mailer: MailMate (1.12r5523)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
From: "Jake the Dog" <jake@adventuretime.ooo>
|
||||
To: incoming+gitlabhq/gitlabhq+merge-request+auth_token@appmail.adventuretime.ooo
|
||||
To: incoming+gitlabhq-gitlabhq-project_id-auth_token-merge-request@appmail.adventuretime.ooo
|
||||
Subject: new-branch-with-a-patch
|
||||
Date: Wed, 24 Oct 2018 16:39:49 +0200
|
||||
X-Mailer: MailMate (1.12r5523)
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
Return-Path: <jake@adventuretime.ooo>
|
||||
Received: from iceking.adventuretime.ooo ([unix socket]) by iceking (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA; Thu, 13 Jun 2013 17:03:50 -0400
|
||||
Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b0:4001:c03::234]) by iceking.adventuretime.ooo (8.14.3/8.14.3/Debian-9.4) with ESMTP id r5DL3nFJ016967 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <incoming+gitlabhq/gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 17:03:50 -0400
|
||||
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <incoming+gitlabhq/gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b0:4001:c03::234]) by iceking.adventuretime.ooo (8.14.3/8.14.3/Debian-9.4) with ESMTP id r5DL3nFJ016967 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <incoming+gitlabhq-gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 17:03:50 -0400
|
||||
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <incoming+gitlabhq-gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Date: Thu, 13 Jun 2013 17:03:48 -0400
|
||||
From: Jake the Dog <jake@adventuretime.ooo>
|
||||
To: incoming+gitlabhq/gitlabhq+merge-request+auth_token@appmail.adventuretime.ooo
|
||||
To: incoming+gitlabhq-gitlabhq-project_id-auth_token-merge-request@appmail.adventuretime.ooo
|
||||
Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
|
||||
Subject: feature
|
||||
Mime-Version: 1.0
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
Return-Path: <jake@adventuretime.ooo>
|
||||
Received: from iceking.adventuretime.ooo ([unix socket]) by iceking (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA; Thu, 13 Jun 2013 17:03:50 -0400
|
||||
Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b0:4001:c03::234]) by iceking.adventuretime.ooo (8.14.3/8.14.3/Debian-9.4) with ESMTP id r5DL3nFJ016967 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <incoming+gitlabhq/gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 17:03:50 -0400
|
||||
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <incoming+gitlabhq/gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <incoming+gitlabhq-gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Date: Thu, 13 Jun 2013 17:03:48 -0400
|
||||
From: Jake the Dog <jake@adventuretime.ooo>
|
||||
To: incoming+gitlabhq/gitlabhq+merge-request+auth_token@appmail.adventuretime.ooo
|
||||
To: incoming+gitlabhq-gitlabhq-project_id-auth_token-merge-request@appmail.adventuretime.ooo
|
||||
Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
|
||||
Subject: feature
|
||||
Mime-Version: 1.0
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
Return-Path: <jake@adventuretime.ooo>
|
||||
Received: from iceking.adventuretime.ooo ([unix socket]) by iceking (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA; Thu, 13 Jun 2013 17:03:50 -0400
|
||||
Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b0:4001:c03::234]) by iceking.adventuretime.ooo (8.14.3/8.14.3/Debian-9.4) with ESMTP id r5DL3nFJ016967 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <incoming+gitlabhq/gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 17:03:50 -0400
|
||||
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <incoming+gitlabhq/gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <incoming+gitlabhq-gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Date: Thu, 13 Jun 2013 17:03:48 -0400
|
||||
From: Jake the Dog <jake@adventuretime.ooo>
|
||||
To: incoming+gitlabhq/gitlabhq+merge-request+auth_token@appmail.adventuretime.ooo
|
||||
To: incoming+gitlabhq-gitlabhq-project_id-auth_token-merge-request@appmail.adventuretime.ooo
|
||||
Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
|
||||
Subject:
|
||||
Mime-Version: 1.0
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
Return-Path: <jake@adventuretime.ooo>
|
||||
Received: from iceking.adventuretime.ooo ([unix socket]) by iceking (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA; Thu, 13 Jun 2013 17:03:50 -0400
|
||||
Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b0:4001:c03::234]) by iceking.adventuretime.ooo (8.14.3/8.14.3/Debian-9.4) with ESMTP id r5DL3nFJ016967 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <incoming+gitlabhq/gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 17:03:50 -0400
|
||||
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <incoming+gitlabhq/gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <incoming+gitlabhq-gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700
|
||||
Date: Thu, 13 Jun 2013 17:03:48 -0400
|
||||
From: Jake the Dog <jake@adventuretime.ooo>
|
||||
To: incoming+gitlabhq/gitlabhq+bad_token@appmail.adventuretime.ooo
|
||||
To: incoming+gitlabhq-gitlabhq-project_id-bad_token-merge-request@appmail.adventuretime.ooo
|
||||
Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
|
||||
Subject: New Issue by email
|
||||
Mime-Version: 1.0
|
|
@ -15,10 +15,10 @@ describe Gitlab::Email::Handler::CreateMergeRequestHandler do
|
|||
TestEnv.clean_test_path
|
||||
end
|
||||
|
||||
let(:email_raw) { fixture_file('emails/valid_new_merge_request.eml') }
|
||||
let(:namespace) { create(:namespace, path: 'gitlabhq') }
|
||||
|
||||
let!(:project) { create(:project, :public, :repository, namespace: namespace, path: 'gitlabhq') }
|
||||
let(:email_raw) { email_fixture('emails/valid_new_merge_request.eml') }
|
||||
let!(:user) do
|
||||
create(
|
||||
:user,
|
||||
|
@ -27,6 +27,32 @@ describe Gitlab::Email::Handler::CreateMergeRequestHandler do
|
|||
)
|
||||
end
|
||||
|
||||
context "when email key" do
|
||||
let(:mail) { Mail::Message.new(email_raw) }
|
||||
|
||||
it "matches the new format" do
|
||||
handler = described_class.new(mail, "h5bp-html5-boilerplate-#{project.project_id}-#{user.incoming_email_token}-merge-request")
|
||||
|
||||
expect(handler.instance_variable_get(:@project_id).to_i).to eq project.project_id
|
||||
expect(handler.instance_variable_get(:@incoming_email_token)).to eq user.incoming_email_token
|
||||
expect(handler.can_handle?).to be_truthy
|
||||
end
|
||||
|
||||
it "matches the legacy format" do
|
||||
handler = described_class.new(mail, "h5bp/html5-boilerplate+merge-request+#{user.incoming_email_token}")
|
||||
|
||||
expect(handler.instance_variable_get(:@project_path)).to eq 'h5bp/html5-boilerplate'
|
||||
expect(handler.instance_variable_get(:@incoming_email_token)).to eq user.incoming_email_token
|
||||
expect(handler.can_handle?).to be_truthy
|
||||
end
|
||||
|
||||
it "doesn't match either format" do
|
||||
handler = described_class.new(mail, "h5bp-html5-boilerplate+merge-request")
|
||||
|
||||
expect(handler.can_handle?).to be_falsey
|
||||
end
|
||||
end
|
||||
|
||||
context "as a non-developer" do
|
||||
before do
|
||||
project.add_guest(user)
|
||||
|
@ -67,7 +93,7 @@ describe Gitlab::Email::Handler::CreateMergeRequestHandler do
|
|||
end
|
||||
|
||||
context "when we can't find the incoming_email_token" do
|
||||
let(:email_raw) { fixture_file("emails/wrong_incoming_email_token.eml") }
|
||||
let(:email_raw) { email_fixture("emails/wrong_merge_request_incoming_email_token.eml") }
|
||||
|
||||
it "raises an UserNotFoundError" do
|
||||
expect { receiver.execute }.to raise_error(Gitlab::Email::UserNotFoundError)
|
||||
|
@ -75,7 +101,7 @@ describe Gitlab::Email::Handler::CreateMergeRequestHandler do
|
|||
end
|
||||
|
||||
context "when the subject is blank" do
|
||||
let(:email_raw) { fixture_file("emails/valid_new_merge_request_no_subject.eml") }
|
||||
let(:email_raw) { email_fixture("emails/valid_new_merge_request_no_subject.eml") }
|
||||
|
||||
it "raises an InvalidMergeRequestError" do
|
||||
expect { receiver.execute }.to raise_error(Gitlab::Email::InvalidMergeRequestError)
|
||||
|
@ -83,7 +109,7 @@ describe Gitlab::Email::Handler::CreateMergeRequestHandler do
|
|||
end
|
||||
|
||||
context "when the message body is blank" do
|
||||
let(:email_raw) { fixture_file("emails/valid_new_merge_request_no_description.eml") }
|
||||
let(:email_raw) { email_fixture("emails/valid_new_merge_request_no_description.eml") }
|
||||
|
||||
it "creates a new merge request with description set from the last commit" do
|
||||
expect { receiver.execute }.to change { project.merge_requests.count }.by(1)
|
||||
|
@ -95,7 +121,7 @@ describe Gitlab::Email::Handler::CreateMergeRequestHandler do
|
|||
end
|
||||
|
||||
context 'when the email contains patch attachments' do
|
||||
let(:email_raw) { fixture_file("emails/valid_merge_request_with_patch.eml") }
|
||||
let(:email_raw) { email_fixture("emails/valid_merge_request_with_patch.eml") }
|
||||
|
||||
it 'creates the source branch and applies the patches' do
|
||||
receiver.execute
|
||||
|
@ -120,7 +146,7 @@ describe Gitlab::Email::Handler::CreateMergeRequestHandler do
|
|||
end
|
||||
|
||||
context 'when the patch could not be applied' do
|
||||
let(:email_raw) { fixture_file("emails/merge_request_with_conflicting_patch.eml") }
|
||||
let(:email_raw) { email_fixture("emails/merge_request_with_conflicting_patch.eml") }
|
||||
|
||||
it 'raises an error' do
|
||||
expect { receiver.execute }.to raise_error(Gitlab::Email::InvalidAttachment)
|
||||
|
@ -128,7 +154,7 @@ describe Gitlab::Email::Handler::CreateMergeRequestHandler do
|
|||
end
|
||||
|
||||
context 'when specifying the target branch using quick actions' do
|
||||
let(:email_raw) { fixture_file('emails/merge_request_with_patch_and_target_branch.eml') }
|
||||
let(:email_raw) { email_fixture('emails/merge_request_with_patch_and_target_branch.eml') }
|
||||
|
||||
it 'creates the merge request with the correct target branch' do
|
||||
receiver.execute
|
||||
|
@ -150,7 +176,7 @@ describe Gitlab::Email::Handler::CreateMergeRequestHandler do
|
|||
end
|
||||
|
||||
describe '#patch_attachments' do
|
||||
let(:email_raw) { fixture_file('emails/merge_request_multiple_patches.eml') }
|
||||
let(:email_raw) { email_fixture('emails/merge_request_multiple_patches.eml') }
|
||||
let(:mail) { Mail::Message.new(email_raw) }
|
||||
subject(:handler) { described_class.new(mail, mail_key) }
|
||||
|
||||
|
@ -163,4 +189,8 @@ describe Gitlab::Email::Handler::CreateMergeRequestHandler do
|
|||
expect(attachments).to eq(expected_filenames)
|
||||
end
|
||||
end
|
||||
|
||||
def email_fixture(path)
|
||||
fixture_file(path).gsub('project_id', project.project_id.to_s)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -11,9 +11,9 @@ describe Gitlab::Email::Handler::UnsubscribeHandler do
|
|||
end
|
||||
|
||||
let(:email_raw) { fixture_file('emails/valid_reply.eml').gsub(mail_key, "#{mail_key}#{Gitlab::IncomingEmail::UNSUBSCRIBE_SUFFIX}") }
|
||||
let(:project) { create(:project, :public) }
|
||||
let(:user) { create(:user) }
|
||||
let(:noteable) { create(:issue, project: project) }
|
||||
let(:project) { create(:project, :public) }
|
||||
let(:user) { create(:user) }
|
||||
let(:noteable) { create(:issue, project: project) }
|
||||
|
||||
let!(:sent_notification) { SentNotification.record(noteable, user.id, mail_key) }
|
||||
|
||||
|
|
|
@ -610,16 +610,20 @@ describe Project do
|
|||
end
|
||||
|
||||
it 'returns the address to create a new issue' do
|
||||
address = "p+#{project.full_path}+#{user.incoming_email_token}@gl.ab"
|
||||
address = "p+#{project.full_path_slug}-#{project.project_id}-#{user.incoming_email_token}-issue@gl.ab"
|
||||
|
||||
expect(project.new_issuable_address(user, 'issue')).to eq(address)
|
||||
end
|
||||
|
||||
it 'returns the address to create a new merge request' do
|
||||
address = "p+#{project.full_path}+merge-request+#{user.incoming_email_token}@gl.ab"
|
||||
address = "p+#{project.full_path_slug}-#{project.project_id}-#{user.incoming_email_token}-merge-request@gl.ab"
|
||||
|
||||
expect(project.new_issuable_address(user, 'merge_request')).to eq(address)
|
||||
end
|
||||
|
||||
it 'returns nil with invalid address type' do
|
||||
expect(project.new_issuable_address(user, 'invalid_param')).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'incoming email disabled' do
|
||||
|
|
Loading…
Reference in a new issue