Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
58867eff
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
58867eff
编写于
12月 09, 2015
作者:
Z
Zeger-Jan van de Weg
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Unsubscribe from thread through link in email footer
上级
c81647ae
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
176 addition
and
85 deletion
+176
-85
CHANGELOG
CHANGELOG
+1
-0
app/controllers/sent_notifications_controller.rb
app/controllers/sent_notifications_controller.rb
+25
-0
app/mailers/emails/issues.rb
app/mailers/emails/issues.rb
+18
-20
app/mailers/emails/merge_requests.rb
app/mailers/emails/merge_requests.rb
+21
-34
app/mailers/emails/notes.rb
app/mailers/emails/notes.rb
+20
-22
app/mailers/notify.rb
app/mailers/notify.rb
+2
-3
app/models/concerns/issuable.rb
app/models/concerns/issuable.rb
+6
-0
app/models/sent_notification.rb
app/models/sent_notification.rb
+5
-3
app/views/layouts/notify.html.haml
app/views/layouts/notify.html.haml
+6
-2
config/routes.rb
config/routes.rb
+6
-0
spec/controllers/sent_notification_controller_spec.rb
spec/controllers/sent_notification_controller_spec.rb
+26
-0
spec/factories.rb
spec/factories.rb
+7
-0
spec/mailers/notify_spec.rb
spec/mailers/notify_spec.rb
+33
-1
未找到文件。
CHANGELOG
浏览文件 @
58867eff
...
...
@@ -59,6 +59,7 @@ v 8.3.0
- Add open_issues_count to project API (Stan Hu)
- Expand character set of usernames created by Omniauth (Corey Hinshaw)
- Add button to automatically merge a merge request when the build succeeds (Zeger-Jan van de Weg)
- Add unsubscribe link in the email footer (Zeger-Jan van de Weg)
- Provide better diagnostic message upon project creation errors (Stan Hu)
- Bump devise to 3.5.3 to fix reset token expiring after account creation (Stan Hu)
- Remove api credentials from link to build_page
...
...
app/controllers/sent_notifications_controller.rb
0 → 100644
浏览文件 @
58867eff
class
SentNotificationsController
<
ApplicationController
skip_before_action
:authenticate_user!
def
unsubscribe
@sent_notification
=
SentNotification
.
for
(
params
[
:id
])
return
render_404
unless
@sent_notification
&&
!
@sent_notification
.
for_commit?
noteable
=
@sent_notification
.
noteable
noteable
.
unsubscribe
(
@sent_notification
.
recipient
)
flash
[
:notice
]
=
"You have been unsubscribed from this thread."
if
current_user
case
@sent_notification
.
noteable
when
Issue
redirect_to
issue_path
(
noteable
)
when
MergeRequest
redirect_to
merge_request_path
(
noteable
)
else
redirect_to
root_path
end
else
redirect_to
new_user_session_path
end
end
end
app/mailers/emails/issues.rb
浏览文件 @
58867eff
module
Emails
module
Issues
def
new_issue_email
(
recipient_id
,
issue_id
)
issue_mail_with_notification
(
issue_id
,
recipient_id
)
do
mail_new_thread
(
@issue
,
issue_thread_options
(
@issue
.
author_id
,
recipient_id
))
end
setup_issue_mail
(
issue_id
,
recipient_id
)
mail_new_thread
(
@issue
,
issue_thread_options
(
@issue
.
author_id
,
recipient_id
))
end
def
reassigned_issue_email
(
recipient_id
,
issue_id
,
previous_assignee_id
,
updated_by_user_id
)
issue_mail_with_notification
(
issue_id
,
recipient_id
)
do
@previous_assignee
=
User
.
find_by
(
id:
previous_assignee_id
)
if
previous_assignee_id
mail_answer_thread
(
@issue
,
issue_thread_options
(
updated_by_user_id
,
recipient_id
))
end
setup_issue_mail
(
issue_id
,
recipient_id
)
@previous_assignee
=
User
.
find_by
(
id:
previous_assignee_id
)
if
previous_assignee_id
mail_answer_thread
(
@issue
,
issue_thread_options
(
updated_by_user_id
,
recipient_id
))
end
def
closed_issue_email
(
recipient_id
,
issue_id
,
updated_by_user_id
)
issue_mail_with_notification
(
issue_id
,
recipient_id
)
do
@updated_by
=
User
.
find
updated_by_user_id
mail_answer_thread
(
@issue
,
issue_thread_options
(
updated_by_user_id
,
recipient_id
))
end
setup_issue_mail
(
issue_id
,
recipient_id
)
@updated_by
=
User
.
find
updated_by_user_id
mail_answer_thread
(
@issue
,
issue_thread_options
(
updated_by_user_id
,
recipient_id
))
end
def
issue_status_changed_email
(
recipient_id
,
issue_id
,
status
,
updated_by_user_id
)
issue_mail_with_notification
(
issue_id
,
recipient_id
)
do
@issue_status
=
status
@updated_by
=
User
.
find
updated_by_user_id
mail_answer_thread
(
@issue
,
issue_thread_options
(
updated_by_user_id
,
recipient_id
))
end
setup_issue_mail
(
issue_id
,
recipient_id
)
@issue_status
=
status
@updated_by
=
User
.
find
updated_by_user_id
mail_answer_thread
(
@issue
,
issue_thread_options
(
updated_by_user_id
,
recipient_id
))
end
private
...
...
@@ -38,14 +38,12 @@ module Emails
}
end
def
issue_mail_with_notification
(
issue_id
,
recipient_id
)
def
setup_issue_mail
(
issue_id
,
recipient_id
)
@issue
=
Issue
.
find
(
issue_id
)
@project
=
@issue
.
project
@target_url
=
namespace_project_issue_url
(
@project
.
namespace
,
@project
,
@issue
)
yield
SentNotification
.
record
(
@issue
,
recipient_id
,
reply_key
)
@sent_notification
=
SentNotification
.
record
(
@issue
,
recipient_id
,
reply_key
)
end
end
end
app/mailers/emails/merge_requests.rb
浏览文件 @
58867eff
module
Emails
module
MergeRequests
def
new_merge_request_email
(
recipient_id
,
merge_request_id
)
@merge_request
=
MergeRequest
.
find
(
merge_request_id
)
@project
=
@merge_request
.
project
@target_url
=
namespace_project_merge_request_url
(
@project
.
namespace
,
@project
,
@merge_request
)
setup_merge_request_mail
(
merge_request_id
,
recipient_id
)
mail_new_thread
(
@merge_request
,
from:
sender
(
@merge_request
.
author_id
),
to:
recipient
(
recipient_id
),
subject:
subject
(
"
#{
@merge_request
.
title
}
(#
#{
@merge_request
.
iid
}
)"
))
SentNotification
.
record
(
@merge_request
,
recipient_id
,
reply_key
)
end
def
reassigned_merge_request_email
(
recipient_id
,
merge_request_id
,
previous_assignee_id
,
updated_by_user_id
)
@merge_request
=
MergeRequest
.
find
(
merge_request_id
)
setup_merge_request_mail
(
merge_request_id
,
recipient_id
)
@previous_assignee
=
User
.
find_by
(
id:
previous_assignee_id
)
if
previous_assignee_id
@project
=
@merge_request
.
project
@target_url
=
namespace_project_merge_request_url
(
@project
.
namespace
,
@project
,
@merge_request
)
mail_answer_thread
(
@merge_request
,
from:
sender
(
updated_by_user_id
),
to:
recipient
(
recipient_id
),
subject:
subject
(
"
#{
@merge_request
.
title
}
(#
#{
@merge_request
.
iid
}
)"
))
SentNotification
.
record
(
@merge_request
,
recipient_id
,
reply_key
)
end
def
closed_merge_request_email
(
recipient_id
,
merge_request_id
,
updated_by_user_id
)
@merge_request
=
MergeRequest
.
find
(
merge_request_id
)
setup_merge_request_mail
(
merge_request_id
,
recipient_id
)
@updated_by
=
User
.
find
updated_by_user_id
@project
=
@merge_request
.
project
@target_url
=
namespace_project_merge_request_url
(
@project
.
namespace
,
@project
,
@merge_request
)
mail_answer_thread
(
@merge_request
,
from:
sender
(
updated_by_user_id
),
to:
recipient
(
recipient_id
),
subject:
subject
(
"
#{
@merge_request
.
title
}
(#
#{
@merge_request
.
iid
}
)"
))
SentNotification
.
record
(
@merge_request
,
recipient_id
,
reply_key
)
end
def
merged_merge_request_email
(
recipient_id
,
merge_request_id
,
updated_by_user_id
)
@merge_request
=
MergeRequest
.
find
(
merge_request_id
)
@project
=
@merge_request
.
project
@target_url
=
namespace_project_merge_request_url
(
@project
.
namespace
,
@project
,
@merge_request
)
setup_merge_request_mail
(
merge_request_id
,
recipient_id
)
mail_answer_thread
(
@merge_request
,
from:
sender
(
updated_by_user_id
),
to:
recipient
(
recipient_id
),
subject:
subject
(
"
#{
@merge_request
.
title
}
(#
#{
@merge_request
.
iid
}
)"
))
SentNotification
.
record
(
@merge_request
,
recipient_id
,
reply_key
)
end
def
merge_request_status_email
(
recipient_id
,
merge_request_id
,
status
,
updated_by_user_id
)
@merge_request
=
MergeRequest
.
find
(
merge_request_id
)
setup_merge_request_mail
(
merge_request_id
,
recipient_id
)
@mr_status
=
status
@project
=
@merge_request
.
project
@updated_by
=
User
.
find
updated_by_user_id
@target_url
=
namespace_project_merge_request_url
(
@project
.
namespace
,
@project
,
@merge_request
)
mail_answer_thread
(
@merge_request
,
from:
sender
(
updated_by_user_id
),
to:
recipient
(
recipient_id
),
subject:
subject
(
"
#{
@merge_request
.
title
}
(#
#{
@merge_request
.
iid
}
)"
))
end
private
def
setup_merge_request_mail
(
merge_request_id
,
recipient_id
)
@merge_request
=
MergeRequest
.
find
(
merge_request_id
)
@project
=
@merge_request
.
project
@target_url
=
namespace_project_merge_request_url
(
@project
.
namespace
,
@project
,
@merge_request
)
SentNotification
.
record
(
@merge_request
,
recipient_id
,
reply_key
)
@sent_notification
=
SentNotification
.
record
(
@merge_request
,
recipient_id
,
reply_key
)
end
end
end
app/mailers/emails/notes.rb
浏览文件 @
58867eff
module
Emails
module
Notes
def
note_commit_email
(
recipient_id
,
note_id
)
note_mail_with_notification
(
note_id
,
recipient_id
)
do
@commit
=
@note
.
noteable
@target_url
=
namespace_project_commit_url
(
*
note_target_url_options
)
mail_answer_thread
(
@commit
,
from:
sender
(
@note
.
author_id
)
,
to:
recipient
(
recipient
_id
),
subject:
subject
(
"
#{
@commit
.
title
}
(
#{
@commit
.
short_id
}
)"
))
end
note_mail_with_notification
(
note_id
,
recipient_id
)
@commit
=
@note
.
noteable
@target_url
=
namespace_project_commit_url
(
*
note_target_url_options
)
mail_answer_thread
(
@commit
,
from:
sender
(
@note
.
author
_id
),
to:
recipient
(
recipient_id
),
subject:
subject
(
"
#{
@commit
.
title
}
(
#{
@commit
.
short_id
}
)"
))
end
def
note_issue_email
(
recipient_id
,
note_id
)
note_mail_with_notification
(
note_id
,
recipient_id
)
do
@issue
=
@note
.
noteable
@target_url
=
namespace_project_issue_url
(
*
note_target_url_options
)
mail_answer_thread
(
@issue
,
note_thread_options
(
recipient_id
)
)
end
note_mail_with_notification
(
note_id
,
recipient_id
)
@issue
=
@note
.
noteable
@target_url
=
namespace_project_issue_url
(
*
note_target_url_options
)
mail_answer_thread
(
@issue
,
note_thread_options
(
recipient_id
))
end
def
note_merge_request_email
(
recipient_id
,
note_id
)
note_mail_with_notification
(
note_id
,
recipient_id
)
do
@merge_request
=
@note
.
noteable
@target_url
=
namespace_project_merge_request_url
(
*
note_target_url_options
)
mail_answer_thread
(
@merge_request
,
note_thread_options
(
recipient_id
)
)
end
note_mail_with_notification
(
note_id
,
recipient_id
)
@merge_request
=
@note
.
noteable
@target_url
=
namespace_project_merge_request_url
(
*
note_target_url_options
)
mail_answer_thread
(
@merge_request
,
note_thread_options
(
recipient_id
))
end
private
...
...
@@ -46,9 +46,7 @@ module Emails
@note
=
Note
.
find
(
note_id
)
@project
=
@note
.
project
yield
SentNotification
.
record_note
(
@note
,
recipient_id
,
reply_key
)
@sent_notification
=
SentNotification
.
record_note
(
@note
,
recipient_id
,
reply_key
)
end
end
end
app/mailers/notify.rb
浏览文件 @
58867eff
...
...
@@ -107,10 +107,9 @@ class Notify < BaseMailer
end
headers
[
"X-GitLab-
#{
model
.
class
.
name
}
-ID"
]
=
model
.
id
headers
[
'X-GitLab-Reply-Key'
]
=
reply_key
if
reply_key
headers
[
'X-GitLab-Reply-Key'
]
=
reply_key
if
Gitlab
::
IncomingEmail
.
enabled?
address
=
Mail
::
Address
.
new
(
Gitlab
::
IncomingEmail
.
reply_address
(
reply_key
))
address
.
display_name
=
@project
.
name_with_namespace
...
...
app/models/concerns/issuable.rb
浏览文件 @
58867eff
...
...
@@ -119,6 +119,12 @@ module Issuable
update
(
subscribed:
!
subscribed?
(
user
))
end
def
unsubscribe
(
user
)
subscriptions
.
find_or_initialize_by
(
user_id:
user
.
id
).
update
(
subscribed:
false
)
end
def
to_hook_data
(
user
)
{
object_kind:
self
.
class
.
name
.
underscore
,
...
...
app/models/sent_notification.rb
浏览文件 @
58867eff
...
...
@@ -25,8 +25,6 @@ class SentNotification < ActiveRecord::Base
class
<<
self
def
reply_key
return
nil
unless
Gitlab
::
IncomingEmail
.
enabled?
SecureRandom
.
hex
(
16
)
end
...
...
@@ -59,7 +57,7 @@ class SentNotification < ActiveRecord::Base
def
record_note
(
note
,
recipient_id
,
reply_key
,
params
=
{})
params
[
:line_code
]
=
note
.
line_code
record
(
note
.
noteable
,
recipient_id
,
reply_key
,
params
)
end
end
...
...
@@ -75,4 +73,8 @@ class SentNotification < ActiveRecord::Base
super
end
end
def
to_param
self
.
reply_key
end
end
app/views/layouts/notify.html.haml
浏览文件 @
58867eff
...
...
@@ -44,6 +44,10 @@
%br
-# Don't link the host is the line below, one link in the email is easier to quickly click than two.
You're receiving this email because of your account on
#{
Gitlab
.
config
.
gitlab
.
host
}
.
If you'd like to receive fewer emails, you can adjust your notification settings.
If you'd like to receive fewer emails, you can
-
if
@sent_notification
&&
!
@sent_notification
.
for_commit?
=
link_to
"unsubscribe"
,
unsubscribe_sent_notification_url
(
@sent_notification
)
from this thread or
adjust your notification settings.
=
email_action
@target_url
\ No newline at end of file
=
email_action
@target_url
config/routes.rb
浏览文件 @
58867eff
...
...
@@ -88,6 +88,12 @@ Rails.application.routes.draw do
end
end
resources
:sent_notifications
,
only:
[],
constraints:
{
id:
/[0-9a-f]{32}/
}
do
member
do
get
:unsubscribe
end
end
# Spam reports
resources
:abuse_reports
,
only:
[
:new
,
:create
]
...
...
spec/controllers/sent_notification_controller_spec.rb
0 → 100644
浏览文件 @
58867eff
require
'rails_helper'
describe
SentNotificationsController
,
type: :controller
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:issue
)
{
create
(
:issue
,
author:
user
)
}
let
(
:sent_notification
)
{
create
(
:sent_notification
,
noteable:
issue
)
}
describe
'GET #unsubscribe'
do
it
'returns a 404 when calling without existing id'
do
get
(
:unsubscribe
,
id:
'0'
*
32
)
expect
(
response
.
status
).
to
be
404
end
context
'calling with id'
do
it
'shows a flash message to the user'
do
get
(
:unsubscribe
,
id:
sent_notification
.
reply_key
)
expect
(
response
.
status
).
to
be
302
expect
(
response
).
to
redirect_to
new_user_session_path
expect
(
controller
).
to
set_flash
[
:notice
].
to
(
/unsubscribed/
).
now
end
end
end
end
spec/factories.rb
浏览文件 @
58867eff
...
...
@@ -212,4 +212,11 @@ FactoryGirl.define do
provider
'ldapmain'
extern_uid
'my-ldap-id'
end
factory
:sent_notification
do
project
recipient
factory: :user
noteable
factory: :issue
reply_key
"0123456789abcdef"
*
2
end
end
spec/mailers/notify_spec.rb
浏览文件 @
58867eff
...
...
@@ -104,6 +104,14 @@ describe Notify do
it
{
is_expected
.
to
have_body_text
/View Commit/
}
end
shared_examples
'an unsubscribeable thread'
do
it
{
is_expected
.
to
have_body_text
/unsubscribe/
}
end
shared_examples
"a user can not unsubscribe through footer link"
do
it
{
is_expected
.
not_to
have_body_text
/unsubscribe/
}
end
describe
'for new users, the email'
do
let
(
:example_site_path
)
{
root_path
}
let
(
:new_user
)
{
create
(
:user
,
email:
new_user_address
,
created_by_id:
1
)
}
...
...
@@ -115,6 +123,7 @@ describe Notify do
it_behaves_like
'an email sent from GitLab'
it_behaves_like
'a new user email'
,
new_user_address
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
'a user can not unsubscribe through footer link'
it
'contains the password text'
do
is_expected
.
to
have_body_text
/Click here to set your password/
...
...
@@ -134,7 +143,6 @@ describe Notify do
end
end
describe
'for users that signed up, the email'
do
let
(
:example_site_path
)
{
root_path
}
let
(
:new_user
)
{
create
(
:user
,
email:
new_user_address
,
password:
"securePassword"
)
}
...
...
@@ -144,6 +152,7 @@ describe Notify do
it_behaves_like
'an email sent from GitLab'
it_behaves_like
'a new user email'
,
new_user_address
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
'a user can not unsubscribe through footer link'
it
'should not contain the new user\'s password'
do
is_expected
.
not_to
have_body_text
/password/
...
...
@@ -157,6 +166,7 @@ describe Notify do
it_behaves_like
'an email sent from GitLab'
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
'a user can not unsubscribe through footer link'
it
'is sent to the new user'
do
is_expected
.
to
deliver_to
key
.
user
.
email
...
...
@@ -181,6 +191,7 @@ describe Notify do
subject
{
Notify
.
new_email_email
(
email
.
id
)
}
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
'a user can not unsubscribe through footer link'
it
'is sent to the new user'
do
is_expected
.
to
deliver_to
email
.
user
.
email
...
...
@@ -227,6 +238,7 @@ describe Notify do
it_behaves_like
'an assignee email'
it_behaves_like
'an email starting a new thread'
,
'issue'
it_behaves_like
'it should show Gmail Actions View Issue link'
it_behaves_like
'an unsubscribeable thread'
it
'has the correct subject'
do
is_expected
.
to
have_subject
/
#{
project
.
name
}
\|
#{
issue
.
title
}
\(#
#{
issue
.
iid
}
\)/
...
...
@@ -253,6 +265,7 @@ describe Notify do
it_behaves_like
'a multiple recipients email'
it_behaves_like
'an answer to an existing thread'
,
'issue'
it_behaves_like
'it should show Gmail Actions View Issue link'
it_behaves_like
"an unsubscribeable thread"
it
'is sent as the author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
@@ -283,6 +296,7 @@ describe Notify do
it_behaves_like
'an answer to an existing thread'
,
'issue'
it_behaves_like
'it should show Gmail Actions View Issue link'
it_behaves_like
'an unsubscribeable thread'
it
'is sent as the author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
@@ -319,6 +333,7 @@ describe Notify do
it_behaves_like
'an assignee email'
it_behaves_like
'an email starting a new thread'
,
'merge_request'
it_behaves_like
'it should show Gmail Actions View Merge request link'
it_behaves_like
"an unsubscribeable thread"
it
'has the correct subject'
do
is_expected
.
to
have_subject
/
#{
merge_request
.
title
}
\(#
#{
merge_request
.
iid
}
\)/
...
...
@@ -345,6 +360,7 @@ describe Notify do
subject
{
Notify
.
new_merge_request_email
(
merge_request_with_description
.
assignee_id
,
merge_request_with_description
.
id
)
}
it_behaves_like
'it should show Gmail Actions View Merge request link'
it_behaves_like
"an unsubscribeable thread"
it
'contains the description'
do
is_expected
.
to
have_body_text
/
#{
merge_request_with_description
.
description
}
/
...
...
@@ -357,6 +373,7 @@ describe Notify do
it_behaves_like
'a multiple recipients email'
it_behaves_like
'an answer to an existing thread'
,
'merge_request'
it_behaves_like
'it should show Gmail Actions View Merge request link'
it_behaves_like
"an unsubscribeable thread"
it
'is sent as the author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
@@ -387,6 +404,7 @@ describe Notify do
it_behaves_like
'an answer to an existing thread'
,
'merge_request'
it_behaves_like
'it should show Gmail Actions View Merge request link'
it_behaves_like
"an unsubscribeable thread"
it
'is sent as the author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
@@ -417,6 +435,7 @@ describe Notify do
it_behaves_like
'a multiple recipients email'
it_behaves_like
'an answer to an existing thread'
,
'merge_request'
it_behaves_like
'it should show Gmail Actions View Merge request link'
it_behaves_like
"an unsubscribeable thread"
it
'is sent as the merge author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
@@ -446,6 +465,7 @@ describe Notify do
it_behaves_like
'an email sent from GitLab'
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'has the correct subject'
do
is_expected
.
to
have_subject
/Project was moved/
...
...
@@ -468,6 +488,7 @@ describe Notify do
it_behaves_like
'an email sent from GitLab'
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'has the correct subject'
do
is_expected
.
to
have_subject
/Access to project was granted/
...
...
@@ -518,6 +539,7 @@ describe Notify do
it_behaves_like
'a note email'
it_behaves_like
'an answer to an existing thread'
,
'commit'
it_behaves_like
'it should show Gmail Actions View Commit link'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'has the correct subject'
do
is_expected
.
to
have_subject
/
#{
commit
.
title
}
\(
#{
commit
.
short_id
}
\)/
...
...
@@ -538,6 +560,7 @@ describe Notify do
it_behaves_like
'a note email'
it_behaves_like
'an answer to an existing thread'
,
'merge_request'
it_behaves_like
'it should show Gmail Actions View Merge request link'
it_behaves_like
'an unsubscribeable thread'
it
'has the correct subject'
do
is_expected
.
to
have_subject
/
#{
merge_request
.
title
}
\(#
#{
merge_request
.
iid
}
\)/
...
...
@@ -558,6 +581,7 @@ describe Notify do
it_behaves_like
'a note email'
it_behaves_like
'an answer to an existing thread'
,
'issue'
it_behaves_like
'it should show Gmail Actions View Issue link'
it_behaves_like
'an unsubscribeable thread'
it
'has the correct subject'
do
is_expected
.
to
have_subject
/
#{
issue
.
title
}
\(#
#{
issue
.
iid
}
\)/
...
...
@@ -579,6 +603,7 @@ describe Notify do
it_behaves_like
'an email sent from GitLab'
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'has the correct subject'
do
is_expected
.
to
have_subject
/Access to group was granted/
...
...
@@ -607,6 +632,7 @@ describe Notify do
subject
{
ActionMailer
::
Base
.
deliveries
.
last
}
it_behaves_like
'an email sent from GitLab'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'is sent to the new user'
do
is_expected
.
to
deliver_to
'new-email@mail.com'
...
...
@@ -629,6 +655,7 @@ describe Notify do
subject
{
Notify
.
repository_push_email
(
project
.
id
,
'devs@company.name'
,
author_id:
user
.
id
,
ref:
'refs/heads/master'
,
action: :create
)
}
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'is sent as the author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
@@ -657,6 +684,7 @@ describe Notify do
subject
{
Notify
.
repository_push_email
(
project
.
id
,
'devs@company.name'
,
author_id:
user
.
id
,
ref:
'refs/tags/v1.0'
,
action: :create
)
}
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'is sent as the author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
@@ -684,6 +712,7 @@ describe Notify do
subject
{
Notify
.
repository_push_email
(
project
.
id
,
'devs@company.name'
,
author_id:
user
.
id
,
ref:
'refs/heads/master'
,
action: :delete
)
}
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'is sent as the author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
@@ -707,6 +736,7 @@ describe Notify do
subject
{
Notify
.
repository_push_email
(
project
.
id
,
'devs@company.name'
,
author_id:
user
.
id
,
ref:
'refs/tags/v1.0'
,
action: :delete
)
}
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'is sent as the author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
@@ -734,6 +764,7 @@ describe Notify do
subject
{
Notify
.
repository_push_email
(
project
.
id
,
'devs@company.name'
,
author_id:
user
.
id
,
ref:
'refs/heads/master'
,
action: :push
,
compare:
compare
,
reverse_compare:
false
,
send_from_committer_email:
send_from_committer_email
)
}
it_behaves_like
'it should not have Gmail Actions links'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'is sent as the author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
@@ -839,6 +870,7 @@ describe Notify do
subject
{
Notify
.
repository_push_email
(
project
.
id
,
'devs@company.name'
,
author_id:
user
.
id
,
ref:
'refs/heads/master'
,
action: :push
,
compare:
compare
)
}
it_behaves_like
'it should show Gmail Actions View Commit link'
it_behaves_like
"a user can not unsubscribe through footer link"
it
'is sent as the author'
do
sender
=
subject
.
header
[
:from
].
addrs
[
0
]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录