forked from publiclab/plots2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsubscription_mailer_test.rb
86 lines (77 loc) · 4.08 KB
/
subscription_mailer_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# In Rails 4, this would be moved to /test/mailers/
require 'test_helper'
class SubscriptionMailerTest < ActionMailer::TestCase
test 'notify subscribers on creation of a research note' do
node = nodes(:one)
subscribers = Tag.subscribers(node.tags)
assert_difference 'ActionMailer::Base.deliveries.size', subscribers.size do
SubscriptionMailer.notify_node_creation(node)
end
assert !ActionMailer::Base.deliveries.empty?
email = ActionMailer::Base.deliveries.last
assert_equal ["do-not-reply@#{request_host}"], email.from
assert_equal [subscribers.values.last[:user].email], email.to
assert_equal '[PublicLab] ' + node.title, email.subject
assert email.body.include?("Public Lab contributor <a href='https://#{request_host}/profile/#{node.author.name}'>#{node.author.name}</a> just posted a new research note")
end
test 'notify subscribers on creation of a question' do
node = nodes(:question)
subscribers = Tag.subscribers(node.tags)
assert_difference 'ActionMailer::Base.deliveries.size', subscribers.size do
SubscriptionMailer.notify_node_creation(node)
end
assert !ActionMailer::Base.deliveries.empty?
email = ActionMailer::Base.deliveries.last
assert_equal ["do-not-reply@#{request_host}"], email.from
assert_equal [subscribers.values.last[:user].email], email.to
assert_equal '[PublicLab] Question: ' + node.title, email.subject
assert email.body.include?("Public Lab contributor <a href='https://#{request_host}/profile/#{node.author.name}'>#{node.author.name}</a> just asked a question")
end
test 'notify note author when user likes a research note' do
node = nodes(:one)
user = users(:bob)
assert_difference 'ActionMailer::Base.deliveries.size', 1 do
SubscriptionMailer.notify_note_liked(node, user)
end
assert !ActionMailer::Base.deliveries.empty?
email = ActionMailer::Base.deliveries.last
assert_equal ["do-not-reply@#{request_host}"], email.from
assert_equal [node.author.email], email.to
assert_equal "[PublicLab] #{user.username} liked your research note", email.subject
assert email.body.include?("Public Lab contributor #{user.username} (https://#{request_host}/profile/#{user.username}) just liked your research note")
end
test 'notify question author when user likes a question' do
node = nodes(:question)
user = users(:bob)
assert_difference 'ActionMailer::Base.deliveries.size', 1 do
SubscriptionMailer.notify_note_liked(node, user)
end
assert !ActionMailer::Base.deliveries.empty?
email = ActionMailer::Base.deliveries.last
assert_equal ["do-not-reply@#{request_host}"], email.from
assert_equal [node.author.email], email.to
assert_equal "[PublicLab] #{user.username} liked your question", email.subject
assert email.body.include?("Public Lab contributor #{user.username} (https://#{request_host}/profile/#{user.username}) just liked your question")
end
test 'notify users who follow a newly added tag but were not previously notified based on the node existing tags' do
node = nodes(:one)
node_tags = node.tags
new_tag = tags(:spam)
user = drupal_users(:spammer)
users_not_following_tags = new_tag.followers_who_dont_follow_tags(node_tags)
users_to_email = users_not_following_tags.reject { |u| u.uid == user.uid }
u_e = Tag.followers('everything')
assert !u_e.empty?
users_to_email_without_exception = users_to_email.reject { |u| u_e.include? u }
assert_difference 'ActionMailer::Base.deliveries.size', users_to_email_without_exception.count do
SubscriptionMailer.notify_tag_added(node, new_tag, user)
end
assert !ActionMailer::Base.deliveries.empty?
email = ActionMailer::Base.deliveries.last
assert_equal ["do-not-reply@#{request_host}"], email.from
assert_equal [users_to_email.last.email], email.to
assert_not_equal [user.email], email.to
assert_equal "New tag added on #{node.title}", email.subject
assert email.body.include?("Public Lab contributor <a href='https://#{request_host}/profile/#{user.username}'>#{user.username}</a> just added a tag")
end
end